[cfe-commits] r160962 - in /cfe/trunk: lib/Sema/SemaDecl.cpp test/SemaCXX/cxx98-compat.cpp
Benjamin Kramer
benny.kra at googlemail.com
Mon Jul 30 09:41:40 PDT 2012
Author: d0k
Date: Mon Jul 30 11:41:40 2012
New Revision: 160962
URL: http://llvm.org/viewvc/llvm-project?rev=160962&view=rev
Log:
Use the location of the copy assignment when diagnosing classes that are nontrivial because of it.
Modified:
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/test/SemaCXX/cxx98-compat.cpp
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=160962&r1=160961&r2=160962&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Jul 30 11:41:40 2012
@@ -9513,10 +9513,9 @@
case CXXCopyAssignment:
if (RD->hasUserDeclaredCopyAssignment()) {
- // FIXME: this should use the location of the copy
- // assignment, not the type.
- SourceLocation TyLoc = RD->getLocStart();
- Diag(TyLoc, diag::note_nontrivial_user_defined) << QT << member;
+ SourceLocation AssignLoc =
+ RD->getCopyAssignmentOperator(0)->getLocation();
+ Diag(AssignLoc, diag::note_nontrivial_user_defined) << QT << member;
return;
}
break;
Modified: cfe/trunk/test/SemaCXX/cxx98-compat.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx98-compat.cpp?rev=160962&r1=160961&r2=160962&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/cxx98-compat.cpp (original)
+++ cfe/trunk/test/SemaCXX/cxx98-compat.cpp Mon Jul 30 11:41:40 2012
@@ -346,3 +346,19 @@
basic_iterator it; // expected-warning {{union member 'it' with a non-trivial copy constructor is incompatible with C++98}}
};
}
+
+namespace AssignOpUnion {
+ struct a {
+ void operator=(const a &it) {}
+ void operator=(a &it) {} // expected-note {{because type 'AssignOpUnion::a' has a user-declared copy assignment operator}}
+ };
+
+ struct b {
+ void operator=(const b &it) {} // expected-note {{because type 'AssignOpUnion::b' has a user-declared copy assignment operator}}
+ };
+
+ union test1 {
+ a x; // expected-warning {{union member 'x' with a non-trivial copy assignment operator is incompatible with C++98}}
+ b y; // expected-warning {{union member 'y' with a non-trivial copy assignment operator is incompatible with C++98}}
+ };
+}
More information about the cfe-commits
mailing list