[cfe-commits] r62124 - in /cfe/trunk: lib/AST/DeclarationName.cpp lib/Sema/SemaOverload.cpp test/SemaCXX/overloaded-operator.cpp
Douglas Gregor
dgregor at apple.com
Mon Jan 12 16:11:19 PST 2009
Author: dgregor
Date: Mon Jan 12 18:11:19 2009
New Revision: 62124
URL: http://llvm.org/viewvc/llvm-project?rev=62124&view=rev
Log:
Make sure we don't name a constructor or destructor with a qualified
type. It leads to very weird errors.
Modified:
cfe/trunk/lib/AST/DeclarationName.cpp
cfe/trunk/lib/Sema/SemaOverload.cpp
cfe/trunk/test/SemaCXX/overloaded-operator.cpp
Modified: cfe/trunk/lib/AST/DeclarationName.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclarationName.cpp?rev=62124&r1=62123&r2=62124&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclarationName.cpp (original)
+++ cfe/trunk/lib/AST/DeclarationName.cpp Mon Jan 12 18:11:19 2009
@@ -286,9 +286,11 @@
switch (Kind) {
case DeclarationName::CXXConstructorName:
EKind = DeclarationNameExtra::CXXConstructor;
+ assert(Ty.getCVRQualifiers() == 0 && "Constructor type must be unqualified");
break;
case DeclarationName::CXXDestructorName:
EKind = DeclarationNameExtra::CXXDestructor;
+ assert(Ty.getCVRQualifiers() == 0 && "Destructor type must be unqualified");
break;
case DeclarationName::CXXConversionFunctionName:
EKind = DeclarationNameExtra::CXXConversionFunction;
Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=62124&r1=62123&r2=62124&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOverload.cpp Mon Jan 12 18:11:19 2009
@@ -1115,7 +1115,7 @@
CXXRecordDecl *ToRecordDecl = ToRecordType->getDecl();
DeclarationName ConstructorName
= Context.DeclarationNames.getCXXConstructorName(
- Context.getCanonicalType(ToType));
+ Context.getCanonicalType(ToType).getUnqualifiedType());
DeclContext::lookup_iterator Con, ConEnd;
for (llvm::tie(Con, ConEnd) = ToRecordDecl->lookup(ConstructorName);
Con != ConEnd; ++Con) {
Modified: cfe/trunk/test/SemaCXX/overloaded-operator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/overloaded-operator.cpp?rev=62124&r1=62123&r2=62124&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/overloaded-operator.cpp (original)
+++ cfe/trunk/test/SemaCXX/overloaded-operator.cpp Mon Jan 12 18:11:19 2009
@@ -172,3 +172,14 @@
int &i2 = a2->m;
a3->m; // expected-error{{no viable overloaded 'operator->'; candidate is}}
}
+
+struct CopyConBase {
+};
+
+struct CopyCon : public CopyConBase {
+ CopyCon(const CopyConBase &Base);
+
+ CopyCon(const CopyConBase *Base) {
+ *this = *Base;
+ }
+};
More information about the cfe-commits
mailing list