<div dir="ltr">Hi Richard, it looks like this commit caused an assertion failure on the following input:<div><br></div><div>$ cat test2.ii<br># 2 "" 3<br>namespace a {<br>enum { b };<br>}<br>template <typename> void c() {<br>  auto d = [](auto) {<br>    using a::b;<br>    b;<br>  };<br>  d(0);<br>}<br>void e() { c<int>; }<br></div><div>$ clang test2.ii<br>clang: ../clang/lib/Sema/SemaTemplateInstantiate.cpp:2985: llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *> *clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl *): Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"' failed.<br></div><div><br></div><div>Can you please take a look?</div><div><br></div><div>Peter</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 26, 2019 at 6:04 PM Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: rsmith<br>
Date: Mon Aug 26 18:06:21 2019<br>
New Revision: 369999<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=369999&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=369999&view=rev</a><br>
Log:<br>
Don't lose the FoundDecl and template arguments for a DeclRefExpr in<br>
TreeTransform.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/TreeTransform.h<br>
<br>
Modified: cfe/trunk/lib/Sema/TreeTransform.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=369999&r1=369998&r2=369999&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=369999&r1=369998&r2=369999&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/TreeTransform.h (original)<br>
+++ cfe/trunk/lib/Sema/TreeTransform.h Mon Aug 26 18:06:21 2019<br>
@@ -2167,13 +2167,12 @@ public:<br>
   ExprResult RebuildDeclRefExpr(NestedNameSpecifierLoc QualifierLoc,<br>
                                 ValueDecl *VD,<br>
                                 const DeclarationNameInfo &NameInfo,<br>
+                                NamedDecl *Found,<br>
                                 TemplateArgumentListInfo *TemplateArgs) {<br>
     CXXScopeSpec SS;<br>
     SS.Adopt(QualifierLoc);<br>
-<br>
-    // FIXME: loses template args.<br>
-<br>
-    return getSema().BuildDeclarationNameExpr(SS, NameInfo, VD);<br>
+    return getSema().BuildDeclarationNameExpr(SS, NameInfo, VD, Found,<br>
+                                              TemplateArgs);<br>
   }<br>
<br>
   /// Build a new expression in parentheses.<br>
@@ -9204,6 +9203,14 @@ TreeTransform<Derived>::TransformDeclRef<br>
   if (!ND)<br>
     return ExprError();<br>
<br>
+  NamedDecl *Found = ND;<br>
+  if (E->getFoundDecl() != E->getDecl()) {<br>
+    Found = cast_or_null<NamedDecl>(<br>
+        getDerived().TransformDecl(E->getLocation(), E->getFoundDecl()));<br>
+    if (!Found)<br>
+      return ExprError();<br>
+  }<br>
+<br>
   DeclarationNameInfo NameInfo = E->getNameInfo();<br>
   if (NameInfo.getName()) {<br>
     NameInfo = getDerived().TransformDeclarationNameInfo(NameInfo);<br>
@@ -9236,7 +9243,7 @@ TreeTransform<Derived>::TransformDeclRef<br>
   }<br>
<br>
   return getDerived().RebuildDeclRefExpr(QualifierLoc, ND, NameInfo,<br>
-                                         TemplateArgs);<br>
+                                         Found, TemplateArgs);<br>
 }<br>
<br>
 template<typename Derived><br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>