<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Dec 18, 2014 at 10:17 AM, Reid Kleckner <span dir="ltr"><<a href="mailto:reid@kleckner.net" target="_blank">reid@kleckner.net</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br>
Date: Thu Dec 18 12:17:42 2014<br>
New Revision: 224526<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=224526&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=224526&view=rev</a><br>
Log:<br>
Revert "Don't build invalid AST nodes during recovery"<br>
<br>
This reverts commit r224451. It caused us to reject some valid existing<br>
code.<br>
<br>
This code appears to run in non-error cases as well as error cases. If<br>
the scope of a DependentScopeDeclRefExpr is still incomplete it probably<br>
means we still have more instantiation to do.<br></blockquote><div><br></div><div>Do you have a testcase for such an instance that could be added here?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Modified:<br>
    cfe/trunk/lib/Sema/SemaTemplate.cpp<br>
    cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=224526&r1=224525&r2=224526&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=224526&r1=224525&r2=224526&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaTemplate.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaTemplate.cpp Thu Dec 18 12:17:42 2014<br>
@@ -2874,7 +2874,7 @@ Sema::BuildQualifiedTemplateIdExpr(CXXSc<br>
   if (!(DC = computeDeclContext(SS, false)) ||<br>
       DC->isDependentContext() ||<br>
       RequireCompleteDeclContext(SS, DC))<br>
-    return ExprError();<br>
+    return BuildDependentDeclRefExpr(SS, TemplateKWLoc, NameInfo, TemplateArgs);<br>
<br>
   bool MemberOfUnknownSpecialization;<br>
   LookupResult R(*this, NameInfo, LookupOrdinaryName);<br>
<br>
Modified: cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp?rev=224526&r1=224525&r2=224526&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp?rev=224526&r1=224525&r2=224526&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp (original)<br>
+++ cfe/trunk/test/SemaTemplate/instantiate-dependent-nested-name.cpp Thu Dec 18 12:17:42 2014<br>
@@ -1,19 +1,8 @@<br>
 // RUN: %clang_cc1 -fsyntax-only -verify %s<br>
-<br>
+// expected-no-diagnostics<br>
 // PR4382<br>
 template<typename T> struct X { static const T A = 1; };<br>
 template<typename T, bool = X<T>::A> struct Y { typedef T A; };<br>
 template<typename T> struct Z { typedef typename Y<T>::A A; };<br>
 extern int x;<br>
 extern Z<int>::A x;<br>
-<br>
-namespace pr21964 {<br>
-struct H;<br>
-template <class> struct T {<br>
-  struct A; // expected-note {{member is declared here}}<br>
-  static void B() {<br>
-    A::template N<H>; // expected-error {{implicit instantiation of undefined member 'pr21964::T<pr21964::H>::A'}}<br>
-  }<br>
-};<br>
-template struct T<H>; // expected-note {{requested here}}<br>
-}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div>