lebedev.ri added a comment.
Ok, tried llvm stage2 build, and it failed as expected, in code that
intentionally does self-assignment:
https://github.com/llvm-mirror/llvm/blob/1aa8147054e7ba8f2b7ea25daaed804662b4c6b2/unittests/ADT/DenseMapTest.cpp#L249-L250
[2/311 1.1/sec] Building CXX object
unittests/ADT/CMakeFiles/ADTTests.dir/DenseMapTest.cpp.o
FAILED: unittests/ADT/CMakeFiles/ADTTests.dir/DenseMapTest.cpp.o
/build/llvm-build-Clang-release/bin/clang++ -DGTEST_HAS_RTTI=0
-DGTEST_HAS_TR1_TUPLE=0 -DGTEST_LANG_CXX11=1 -D_DEBUG -D_GNU_SOURCE
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-Iunittests/ADT -I/build/llvm/unittests/ADT -I/usr/include/libxml2 -Iinclude
-I/build/llvm/include -I/build/llvm/utils/unittest/googletest/include
-I/build/llvm/utils/unittest/googlemock/include -g0 -fPIC
-fvisibility-inlines-hidden -Werror -Werror=date-time
-Werror=unguarded-availability-new -std=c++11 -Wall -W -Wno-unused-parameter
-Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic
-Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor
-Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics
-ffunction-sections -fdata-sections -g0 -UNDEBUG -Wno-variadic-macros
-Wno-gnu-zero-variadic-macro-arguments -fno-exceptions -fno-rtti -MD -MT
unittests/ADT/CMakeFiles/ADTTests.dir/DenseMapTest.cpp.o -MF
unittests/ADT/CMakeFiles/ADTTests.dir/DenseMapTest.cpp.o.d -o
unittests/ADT/CMakeFiles/ADTTests.dir/DenseMapTest.cpp.o -c
/build/llvm/unittests/ADT/DenseMapTest.cpp
/build/llvm/unittests/ADT/DenseMapTest.cpp:250:11: error: explicitly
assigning value of variable of type '(anonymous
namespace)::DenseMapTest_AssignmentTest_Test::TypeParam' (aka
'gtest_TypeParam_') to itself [-Werror,-Wself-assign]
copyMap = copyMap;
~~~~~~~ ^ ~~~~~~~
/build/llvm/unittests/ADT/DenseMapTest.cpp:265:11: error: explicitly
assigning value of variable of type '(anonymous
namespace)::DenseMapTest_AssignmentTestNotSmall_Test::TypeParam' (aka
'gtest_TypeParam_') to itself [-Werror,-Wself-assign]
copyMap = copyMap;
~~~~~~~ ^ ~~~~~~~
The `operator=` for `DenseMap`/`SmallDenseMap` is user-provided, non-trivial:
https://github.com/llvm-mirror/llvm/blob/1aa8147054e7ba8f2b7ea25daaed804662b4c6b2/include/llvm/ADT/DenseMap.h#L693-L705
https://github.com/llvm-mirror/llvm/blob/1aa8147054e7ba8f2b7ea25daaed804662b4c6b2/include/llvm/ADT/DenseMap.h#L926-L938
So i guess this will have to be split after all.
I'll try what we have discussed (`-Wself-assign`, and
`-Wself-assign-nontrivial` for non-trivial methods.)
Repository:
rC Clang
https://reviews.llvm.org/D44883
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits