DynamoRIO / DynamoRIO/drmemory
false positive uninit reads in recent clang std::vector<bool>
- 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
Assessment
This issue has not been assessed yet.