[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