[cfe-commits] r97924 - in /cfe/trunk: lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaTemplate.cpp test/SemaTemplate/typename-specifier-4.cpp
Douglas Gregor
dgregor at apple.com
Sun Mar 7 15:26:22 PST 2010
Author: dgregor
Date: Sun Mar 7 17:26:22 2010
New Revision: 97924
URL: http://llvm.org/viewvc/llvm-project?rev=97924&view=rev
Log:
Robustify callers that rebuild typename type nodes again NULL return
types. Fixes PR6463.
Modified:
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/lib/Sema/SemaTemplate.cpp
cfe/trunk/test/SemaTemplate/typename-specifier-4.cpp
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=97924&r1=97923&r2=97924&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Sun Mar 7 17:26:22 2010
@@ -1083,6 +1083,9 @@
// specialization, we take it as a type name.
BaseType = CheckTypenameType((NestedNameSpecifier *)SS.getScopeRep(),
*MemberOrBase, SS.getRange());
+ if (BaseType.isNull())
+ return true;
+
R.clear();
}
}
Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=97924&r1=97923&r2=97924&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplate.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplate.cpp Sun Mar 7 17:26:22 2010
@@ -4992,6 +4992,9 @@
Result = getDerived().RebuildTypenameType(NNS, T->getIdentifier(),
SourceRange(TL.getNameLoc()));
+ if (Result.isNull())
+ return QualType();
+
TypenameTypeLoc NewTL = TLB.push<TypenameTypeLoc>(Result);
NewTL.setNameLoc(TL.getNameLoc());
return Result;
Modified: cfe/trunk/test/SemaTemplate/typename-specifier-4.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/typename-specifier-4.cpp?rev=97924&r1=97923&r2=97924&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/typename-specifier-4.cpp (original)
+++ cfe/trunk/test/SemaTemplate/typename-specifier-4.cpp Sun Mar 7 17:26:22 2010
@@ -99,3 +99,20 @@
return Inner<U>();
}
}
+
+namespace PR6463 {
+ struct B { typedef int type; }; // expected-note 2{{member found by ambiguous name lookup}}
+ struct C { typedef int type; }; // expected-note 2{{member found by ambiguous name lookup}}
+
+ template<typename T>
+ struct A : B, C {
+ type& a(); // expected-error{{found in multiple base classes}}
+ int x;
+ };
+
+ // FIXME: Improve source location info here.
+ template<typename T>
+ typename A<T>::type& A<T>::a() { // expected-error{{found in multiple base classes}}
+ return x; // expected-error{{undeclared identifier}}
+ }
+}
More information about the cfe-commits
mailing list