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
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to