Revert r347627 "[MS] Push fewer DeclContexts for delayed template parsing"
authorReid Kleckner <rnk@google.com>
Tue, 27 Nov 2018 02:54:17 +0000 (02:54 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 27 Nov 2018 02:54:17 +0000 (02:54 +0000)
It broke the Windows self-host:
http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/1799/steps/stage%202%20build/logs/stdio

I can build
lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MachinePostDominators.cpp.obj to
repro.

llvm-svn: 347630

clang/lib/Parse/ParseTemplate.cpp
clang/test/Parser/DelayedTemplateParsing.cpp

index 55f80f2..26709a5 100644 (file)
@@ -1382,7 +1382,7 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) {
   SmallVector<ParseScope*, 4> TemplateParamScopeStack;
 
   // Get the list of DeclContexts to reenter.
-  SmallVector<DeclContext *, 4> DeclContextsToReenter;
+  SmallVector<DeclContext*, 4> DeclContextsToReenter;
   DeclContext *DD = FunD;
   while (DD && !DD->isTranslationUnit()) {
     DeclContextsToReenter.push_back(DD);
@@ -1398,12 +1398,7 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) {
     unsigned NumParamLists =
       Actions.ActOnReenterTemplateScope(getCurScope(), cast<Decl>(*II));
     CurTemplateDepthTracker.addDepth(NumParamLists);
-    // If we find a class in a class, we need to push the context of the
-    // outermost class to match up with how we would parse a regular C++ class
-    // inline method.
-    if (*II != FunD &&
-        !(isa<CXXRecordDecl>(*II) && isa<CXXRecordDecl>(Actions.CurContext) &&
-          Actions.CurContext == (*II)->getLexicalParent())) {
+    if (*II != FunD) {
       TemplateParamScopeStack.push_back(new ParseScope(this, Scope::DeclScope));
       Actions.PushDeclContext(Actions.getCurScope(), *II);
     }
index 301eacf..6ea245c 100644 (file)
@@ -181,20 +181,3 @@ static void h() {
 }
 
 }
-
-struct PR38460 {
-  template <typename>
-  struct T {
-    static void foo() {
-      struct U {
-        void dummy() {
-          use_delayed_identifier();
-        }
-      };
-    }
-  };
-};
-void use_delayed_identifier();
-void trigger_PR38460() {
-  PR38460::T<int>::foo();
-}