From: John McCall Date: Tue, 17 Aug 2010 21:27:17 +0000 (+0000) Subject: Implicit decl ref expressions might not have name locations; don't silently X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec8045d3f0375302eadaa63deb373bacaf25a569;p=clang Implicit decl ref expressions might not have name locations; don't silently fail to instantiate them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111293 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 2f8d075c2a..fc6c7f08e0 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -4214,10 +4214,12 @@ TreeTransform::TransformDeclRefExpr(DeclRefExpr *E) { if (!ND) return SemaRef.ExprError(); - DeclarationNameInfo NameInfo - = getDerived().TransformDeclarationNameInfo(E->getNameInfo()); - if (!NameInfo.getName()) - return SemaRef.ExprError(); + DeclarationNameInfo NameInfo = E->getNameInfo(); + if (NameInfo.getName()) { + NameInfo = getDerived().TransformDeclarationNameInfo(NameInfo); + if (!NameInfo.getName()) + return SemaRef.ExprError(); + } if (!getDerived().AlwaysRebuild() && Qualifier == E->getQualifier() && diff --git a/test/SemaTemplate/instantiate-declref.cpp b/test/SemaTemplate/instantiate-declref.cpp index 2d27075bd4..ced56dfc6a 100644 --- a/test/SemaTemplate/instantiate-declref.cpp +++ b/test/SemaTemplate/instantiate-declref.cpp @@ -95,3 +95,13 @@ namespace test0 { }; void g() { X<2>(); } } + +// +namespace test1 { + template void f(T const &t) { + union { char c; T t_; }; + c = 'a'; // <- this shouldn't silently fail to instantiate + T::foo(); // expected-error {{has no members}} + } + template void f(int const &); // expected-note {{requested here}} +}