DynamoRIO / DynamoRIO/drmemory

false positive uninit reads in recent clang std::vector<bool>

Open
#1,666 1 comment 0 reactions 1 assignee Claimed by @derekbruening View on GitHub
Bug-FalsePositive Component-FullMode FalsePos-BitLevel OpSys-OSX
Dominant language
C
Stars
2.7k
Forks
290
PR merge metrics
No merged PRs in 30d

Description

It looks like recent clang:
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
is using bitvectors for std::vector and they thwart DrMem's bit
handling.

```
~~Dr.M~~ Error #1: UNINITIALIZED READ: reading register esi
~~Dr.M~~ # 0 Board::getHorizontalWall [/Applications/Xcode.app/Contents/Developer/Too\
lchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__bit_reference:145]
~~Dr.M~~ # 1 Board::moveRobot [board_solution.cpp:226]
~~Dr.M~~ # 2 TryAllMoveSequences [main_solution.cpp:208]
~~Dr.M~~ # 3 main [main_solution.cpp:295]
```

Zooming in on the code involved:

```
while (getHorizontalWall(location.row+0.5,location.col) == false &&
getspot(Position(location.row+1,location.col)) == ' ') {

horizontal_walls = std::vector >(rows+1,std::vector(cols,false));

return horizontal_walls[floor(r)][c-1];

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c\
++/v1/__bit_reference:145
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator bool() const _NOEXCEPT
{return static_cast(*__seg_ & __mask_);}
```

So this C++ lib is taking vector and squishing it into a bit array.

I have yet to construct a small reproducer (unless I turn on -strict_bitops).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.