Revert "Don't build invalid AST nodes during recovery"

This reverts commit r224451. It caused us to reject some valid existing
code.

This code appears to run in non-error cases as well as error cases. If
the scope of a DependentScopeDeclRefExpr is still incomplete it probably
means we still have more instantiation to do.

llvm-svn: 224526
This commit is contained in:
Reid Kleckner 2014-12-18 18:17:42 +00:00
parent 661a97bede
commit 034531d7af
2 changed files with 2 additions and 13 deletions

View File

@ -2874,7 +2874,7 @@ Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS,
if (!(DC = computeDeclContext(SS, false)) ||
DC->isDependentContext() ||
RequireCompleteDeclContext(SS, DC))
return ExprError();
return BuildDependentDeclRefExpr(SS, TemplateKWLoc, NameInfo, TemplateArgs);
bool MemberOfUnknownSpecialization;
LookupResult R(*this, NameInfo, LookupOrdinaryName);

View File

@ -1,19 +1,8 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// expected-no-diagnostics
// PR4382
template<typename T> struct X { static const T A = 1; };
template<typename T, bool = X<T>::A> struct Y { typedef T A; };
template<typename T> struct Z { typedef typename Y<T>::A A; };
extern int x;
extern Z<int>::A x;
namespace pr21964 {
struct H;
template <class> struct T {
struct A; // expected-note {{member is declared here}}
static void B() {
A::template N<H>; // expected-error {{implicit instantiation of undefined member 'pr21964::T<pr21964::H>::A'}}
}
};
template struct T<H>; // expected-note {{requested here}}
}