r272776 - Revert accidential "[MSVC] Late parsing of in-class defined member functions in template"

Alexey Bataev via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 15 04:24:54 PDT 2016


Author: abataev
Date: Wed Jun 15 06:24:54 2016
New Revision: 272776

URL: http://llvm.org/viewvc/llvm-project?rev=272776&view=rev
Log:
Revert accidential "[MSVC] Late parsing of in-class defined member functions in template"

This reverts commit 0253605771b8bd9d414aba74fe2742c730d6fd1a.

Modified:
    cfe/trunk/include/clang-c/Index.h
    cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
    cfe/trunk/include/clang/AST/StmtCXX.h
    cfe/trunk/include/clang/Basic/StmtNodes.td
    cfe/trunk/include/clang/Parse/Parser.h
    cfe/trunk/include/clang/Sema/Sema.h
    cfe/trunk/include/clang/Serialization/ASTBitCodes.h
    cfe/trunk/lib/AST/StmtCXX.cpp
    cfe/trunk/lib/AST/StmtPrinter.cpp
    cfe/trunk/lib/AST/StmtProfile.cpp
    cfe/trunk/lib/CodeGen/CGStmt.cpp
    cfe/trunk/lib/Parse/ParseTemplate.cpp
    cfe/trunk/lib/Parse/Parser.cpp
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/lib/Sema/SemaStmt.cpp
    cfe/trunk/lib/Sema/TreeTransform.h
    cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
    cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
    cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
    cfe/trunk/test/SemaTemplate/ms-lookup-template-base-classes.cpp
    cfe/trunk/tools/libclang/CIndex.cpp
    cfe/trunk/tools/libclang/CXCursor.cpp

Modified: cfe/trunk/include/clang-c/Index.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang-c/Index.h (original)
+++ cfe/trunk/include/clang-c/Index.h Wed Jun 15 06:24:54 2016
@@ -2305,11 +2305,7 @@ enum CXCursorKind {
    */
   CXCursor_OMPTargetUpdateDirective      = 265,
 
-  /** \brief A MS-specific late parsed compound statement.
-   */
-  CXCursor_MSLateParsedCompoundStmt     = 266,
-
-  CXCursor_LastStmt                      = CXCursor_MSLateParsedCompoundStmt,
+  CXCursor_LastStmt                      = CXCursor_OMPTargetUpdateDirective,
 
   /**
    * \brief Cursor that represents the translation unit itself.

Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
+++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Wed Jun 15 06:24:54 2016
@@ -2332,7 +2332,6 @@ DEF_TRAVERSE_STMT(SEHExceptStmt, {})
 DEF_TRAVERSE_STMT(SEHFinallyStmt, {})
 DEF_TRAVERSE_STMT(SEHLeaveStmt, {})
 DEF_TRAVERSE_STMT(CapturedStmt, { TRY_TO(TraverseDecl(S->getCapturedDecl())); })
-DEF_TRAVERSE_STMT(MSLateParsedCompoundStmt, {})
 
 DEF_TRAVERSE_STMT(CXXOperatorCallExpr, {})
 DEF_TRAVERSE_STMT(OpaqueValueExpr, {})

Modified: cfe/trunk/include/clang/AST/StmtCXX.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtCXX.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/StmtCXX.h (original)
+++ cfe/trunk/include/clang/AST/StmtCXX.h Wed Jun 15 06:24:54 2016
@@ -18,7 +18,6 @@
 #include "clang/AST/Expr.h"
 #include "clang/AST/NestedNameSpecifier.h"
 #include "clang/AST/Stmt.h"
-#include "clang/Lex/Token.h"
 #include "llvm/Support/Compiler.h"
 
 namespace clang {
@@ -418,51 +417,6 @@ public:
   }
 };
 
-/// This represents a group of statements like { stmt stmt } that must be parsed
-/// only during instantiation. Required for better MSVC compatibility.
-class MSLateParsedCompoundStmt final
-    : public Stmt,
-      private llvm::TrailingObjects<MSLateParsedCompoundStmt, Token> {
-  friend class TrailingObjects;
-  friend class ASTStmtReader;
-  SourceLocation LBraceLoc, RBraceLoc;
-  StringRef StringRep;
-  unsigned NumToks;
-
-  MSLateParsedCompoundStmt()
-      : Stmt(MSLateParsedCompoundStmtClass), NumToks(0) {}
-
-  /// Set tokens for the statement.
-  void init(ASTContext &C, SourceLocation LB, SourceLocation RB,
-            ArrayRef<Token> Tokens, StringRef Rep);
-
-public:
-  static MSLateParsedCompoundStmt *Create(ASTContext &C, SourceLocation LB,
-                                          SourceLocation RB,
-                                          ArrayRef<Token> Tokens,
-                                          StringRef Rep);
-  /// Build an empty statement.
-  static MSLateParsedCompoundStmt *CreateEmpty(ASTContext &C,
-                                               unsigned NumTokens);
-
-  SourceLocation getLocStart() const LLVM_READONLY { return LBraceLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBraceLoc; }
-
-  /// Returns representation of the statement as a string.
-  StringRef getStringRepresentation() const { return StringRep; }
-
-  /// Get list of tokens associated with the statement.
-  ArrayRef<Token> tokens() const;
-
-  child_range children() {
-    return child_range(child_iterator(), child_iterator());
-  }
-
-  static bool classof(const Stmt *S) {
-    return S->getStmtClass() == MSLateParsedCompoundStmtClass;
-  }
-};
-
 }  // end namespace clang
 
 #endif

Modified: cfe/trunk/include/clang/Basic/StmtNodes.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/StmtNodes.td (original)
+++ cfe/trunk/include/clang/Basic/StmtNodes.td Wed Jun 15 06:24:54 2016
@@ -187,7 +187,6 @@ def SEHExceptStmt : Stmt;
 def SEHFinallyStmt : Stmt;
 def SEHLeaveStmt : Stmt;
 def MSDependentExistsStmt : Stmt;
-def MSLateParsedCompoundStmt : Stmt;
 
 // OpenCL Extensions.
 def AsTypeExpr : DStmt<Expr>;

Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Wed Jun 15 06:24:54 2016
@@ -1181,11 +1181,9 @@ private:
 
   void LexTemplateFunctionForLateParsing(CachedTokens &Toks);
   void ParseLateTemplatedFuncDef(LateParsedTemplate &LPT);
-  void ParseMSVCTemplatedFuncDef(LateParsedTemplate &LPT);
 
   static void LateTemplateParserCallback(void *P, LateParsedTemplate &LPT);
   static void LateTemplateParserCleanupCallback(void *P);
-  static void MSVCTemplateParserCallback(void *P, LateParsedTemplate &LPT);
 
   Sema::ParsingClassState
   PushParsingClass(Decl *TagOrTemplate, bool TopLevelClass, bool IsInterface);

Modified: cfe/trunk/include/clang/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/Sema.h (original)
+++ cfe/trunk/include/clang/Sema/Sema.h Wed Jun 15 06:24:54 2016
@@ -3507,11 +3507,6 @@ public:
   LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
                                    SourceLocation Location,
                                    bool AlwaysCreate);
-  /// Builds late parsed compound statement or just compound statement in MSVC
-  /// compatibility mode.
-  StmtResult ActOnMSLateParsedCompoundStmt(SourceLocation LB, SourceLocation RB,
-                                           ArrayRef<Token> Tokens,
-                                           StringRef Rep);
 
   VarDecl *BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType ExceptionType,
                                   SourceLocation StartLoc,

Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)
+++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Wed Jun 15 06:24:54 2016
@@ -1220,8 +1220,6 @@ namespace clang {
       STMT_GCCASM,
       /// \brief A MS-style AsmStmt record.
       STMT_MSASM,
-      /// \brief A MS-specific late parsed compound statement.
-      STMT_MS_LATE_PARSED_COMPOUND,
       /// \brief A PredefinedExpr record.
       EXPR_PREDEFINED,
       /// \brief A DeclRefExpr record.

Modified: cfe/trunk/lib/AST/StmtCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtCXX.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtCXX.cpp (original)
+++ cfe/trunk/lib/AST/StmtCXX.cpp Wed Jun 15 06:24:54 2016
@@ -86,38 +86,3 @@ VarDecl *CXXForRangeStmt::getLoopVariabl
 const VarDecl *CXXForRangeStmt::getLoopVariable() const {
   return const_cast<CXXForRangeStmt *>(this)->getLoopVariable();
 }
-
-MSLateParsedCompoundStmt *
-MSLateParsedCompoundStmt::Create(ASTContext &C, SourceLocation LB,
-                                 SourceLocation RB, ArrayRef<Token> Tokens,
-                                 StringRef Rep) {
-  // Allocate space for private variables and initializer expressions.
-  void *Mem = C.Allocate(totalSizeToAlloc<Token>(Tokens.size()),
-                         llvm::alignOf<MSLateParsedCompoundStmt>());
-  auto *S = new (Mem) MSLateParsedCompoundStmt();
-  S->init(C, LB, RB, Tokens, Rep);
-  return S;
-}
-
-MSLateParsedCompoundStmt *
-MSLateParsedCompoundStmt::CreateEmpty(ASTContext &C, unsigned NumTokens) {
-  // Allocate space for private variables and initializer expressions.
-  void *Mem = C.Allocate(totalSizeToAlloc<Token>(NumTokens),
-                         llvm::alignOf<MSLateParsedCompoundStmt>());
-  return new (Mem) MSLateParsedCompoundStmt();
-}
-
-void MSLateParsedCompoundStmt::init(ASTContext &C, SourceLocation LB,
-                                    SourceLocation RB, ArrayRef<Token> Tokens,
-                                    StringRef Rep) {
-  LBraceLoc = LB;
-  RBraceLoc = RB;
-  std::copy(Tokens.begin(), Tokens.end(), getTrailingObjects<Token>());
-  StringRep = Rep.copy(C);
-  NumToks = Tokens.size();
-}
-
-ArrayRef<Token> MSLateParsedCompoundStmt::tokens() const {
-  return llvm::makeArrayRef(getTrailingObjects<Token>(), NumToks);
-}
-

Modified: cfe/trunk/lib/AST/StmtPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtPrinter.cpp (original)
+++ cfe/trunk/lib/AST/StmtPrinter.cpp Wed Jun 15 06:24:54 2016
@@ -2352,10 +2352,6 @@ void StmtPrinter::VisitCoreturnStmt(Core
   OS << ";";
 }
 
-void StmtPrinter::VisitMSLateParsedCompoundStmt(MSLateParsedCompoundStmt *S) {
-  OS << S->getStringRepresentation();
-}
-
 void StmtPrinter::VisitCoawaitExpr(CoawaitExpr *S) {
   OS << "co_await ";
   PrintExpr(S->getOperand());

Modified: cfe/trunk/lib/AST/StmtProfile.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtProfile.cpp (original)
+++ cfe/trunk/lib/AST/StmtProfile.cpp Wed Jun 15 06:24:54 2016
@@ -1499,11 +1499,6 @@ void StmtProfiler::VisitCoreturnStmt(con
   VisitStmt(S);
 }
 
-void StmtProfiler::VisitMSLateParsedCompoundStmt(
-    const MSLateParsedCompoundStmt *S) {
-  VisitStmt(S);
-}
-
 void StmtProfiler::VisitCoawaitExpr(const CoawaitExpr *S) {
   VisitExpr(S);
 }

Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGStmt.cpp Wed Jun 15 06:24:54 2016
@@ -80,7 +80,6 @@ void CodeGenFunction::EmitStmt(const Stm
   case Stmt::SEHExceptStmtClass:
   case Stmt::SEHFinallyStmtClass:
   case Stmt::MSDependentExistsStmtClass:
-  case Stmt::MSLateParsedCompoundStmtClass:
     llvm_unreachable("invalid statement class to emit generically");
   case Stmt::NullStmtClass:
   case Stmt::CompoundStmtClass:

Modified: cfe/trunk/lib/Parse/ParseTemplate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseTemplate.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseTemplate.cpp (original)
+++ cfe/trunk/lib/Parse/ParseTemplate.cpp Wed Jun 15 06:24:54 2016
@@ -1417,90 +1417,6 @@ void Parser::ParseLateTemplatedFuncDef(L
     delete *I;
 }
 
-void Parser::MSVCTemplateParserCallback(void *P, LateParsedTemplate &LPT) {
-  ((Parser *)P)->ParseMSVCTemplatedFuncDef(LPT);
-}
-
-/// \brief Late parse a C++ function template in Microsoft mode.
-void Parser::ParseMSVCTemplatedFuncDef(LateParsedTemplate &LPT) {
-  if (!LPT.D)
-     return;
-
-  // Get the FunctionDecl.
-  FunctionDecl *FunD = LPT.D->getAsFunction();
-  // Track template parameter depth.
-  TemplateParameterDepthRAII CurTemplateDepthTracker(TemplateParameterDepth);
-
-  SmallVector<ParseScope*, 4> TemplateParamScopeStack;
-
-  // Get the list of DeclContexts to reenter.
-  SmallVector<DeclContext*, 4> DeclContextsToReenter;
-  DeclContext *DD = FunD;
-  while (DD && !DD->isTranslationUnit()) {
-    DeclContextsToReenter.push_back(DD);
-    DD = DD->getLexicalParent();
-  }
-
-  // Reenter template scopes from outermost to innermost.
-  SmallVectorImpl<DeclContext *>::reverse_iterator II =
-      DeclContextsToReenter.rbegin();
-  for (; II != DeclContextsToReenter.rend(); ++II) {
-    TemplateParamScopeStack.push_back(new ParseScope(this,
-          Scope::TemplateParamScope));
-    unsigned NumParamLists =
-      Actions.ActOnReenterTemplateScope(getCurScope(), cast<Decl>(*II));
-    CurTemplateDepthTracker.addDepth(NumParamLists);
-    if (*II != FunD) {
-      TemplateParamScopeStack.push_back(new ParseScope(this, Scope::DeclScope));
-      Actions.PushDeclContext(Actions.getCurScope(), *II);
-    }
-  }
-
-  assert(!LPT.Toks.empty() && "Empty body!");
-
-  // Append the current token at the end of the new token stream so that it
-  // doesn't get lost.
-  LPT.Toks.push_back(Tok);
-  PP.EnterTokenStream(LPT.Toks, true);
-
-  // Consume the previously pushed token.
-  ConsumeAnyToken(/*ConsumeCodeCompletionTok=*/true);
-  assert(Tok.isOneOf(tok::l_brace, tok::colon, tok::kw_try) &&
-         "Inline method not starting with '{', ':' or 'try'");
-
-  // Parse the method body. Function body parsing code is similar enough
-  // to be re-used for method bodies as well.
-  ParseScope FnScope(this, Scope::FnScope|Scope::DeclScope);
-
-  if (Tok.is(tok::kw_try)) {
-    ParseFunctionTryBlock(LPT.D, FnScope);
-  } else {
-    if (Tok.is(tok::colon))
-      ParseConstructorInitializer(LPT.D);
-    else
-      Actions.ActOnDefaultCtorInitializers(LPT.D);
-
-    if (Tok.is(tok::l_brace)) {
-      assert((!isa<FunctionTemplateDecl>(LPT.D) ||
-              cast<FunctionTemplateDecl>(LPT.D)
-                      ->getTemplateParameters()
-                      ->getDepth() == TemplateParameterDepth - 1) &&
-             "TemplateParameterDepth should be greater than the depth of "
-             "current template being instantiated!");
-      ParseFunctionStatementBody(LPT.D, FnScope);
-      Actions.UnmarkAsLateParsedTemplate(FunD);
-    } else
-      Actions.ActOnFinishFunctionBody(LPT.D, nullptr);
-  }
-
-  // Exit scopes.
-  FnScope.Exit();
-  SmallVectorImpl<ParseScope *>::reverse_iterator I =
-   TemplateParamScopeStack.rbegin();
-  for (; I != TemplateParamScopeStack.rend(); ++I)
-    delete *I;
-}
-
 /// \brief Lex a delayed template function for late parsing.
 void Parser::LexTemplateFunctionForLateParsing(CachedTokens &Toks) {
   tok::TokenKind kind = Tok.getKind();

Modified: cfe/trunk/lib/Parse/Parser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/Parser.cpp (original)
+++ cfe/trunk/lib/Parse/Parser.cpp Wed Jun 15 06:24:54 2016
@@ -89,8 +89,6 @@ Parser::Parser(Preprocessor &pp, Sema &a
   PP.addCommentHandler(CommentSemaHandler.get());
 
   PP.setCodeCompletionHandler(*this);
-  if (getLangOpts().MSVCCompat)
-    Actions.SetLateTemplateParser(LateTemplateParserCallback, nullptr, this);
 }
 
 DiagnosticBuilder Parser::Diag(SourceLocation Loc, unsigned DiagID) {
@@ -1055,35 +1053,12 @@ Decl *Parser::ParseFunctionDefinition(Pa
       Actions.MarkAsLateParsedTemplate(FnD, DP, Toks);
     }
     return DP;
-  } else if (getLangOpts().MSVCCompat && Tok.isNot(tok::equal) &&
-             TemplateInfo.Kind == ParsedTemplateInfo::Template &&
-             Actions.canDelayFunctionBody(D)) {
-    // In delayed template parsing mode, for function template we consume the
-    // tokens and store them for late parsing at the end of the translation
-    // unit.
-    MultiTemplateParamsArg TemplateParameterLists(*TemplateInfo.TemplateParams);
-
-    ParseScope BodyScope(this, Scope::FnScope | Scope::DeclScope);
-
-    CachedTokens Toks;
-    LexTemplateFunctionForLateParsing(Toks);
-
-    Decl *Res = Actions.ActOnStartOfFunctionDef(getCurScope(), D,
-                                                *TemplateInfo.TemplateParams);
-    D.complete(Res);
-    D.getMutableDeclSpec().abort();
-    StmtResult Body = Actions.ActOnMSLateParsedCompoundStmt(
-        Toks.begin()->getLocation(), Tok.getLocation(), Toks,
-        Lexer::getSourceText(
-            {{Toks.begin()->getLocation(), Tok.getLocation()}, false},
-            Actions.getASTContext().getSourceManager(), getLangOpts()));
-    BodyScope.Exit();
-
-    return Actions.ActOnFinishFunctionBody(Res, Body.get());
-  } else if (CurParsedObjCImpl && !TemplateInfo.TemplateParams &&
-             (Tok.is(tok::l_brace) || Tok.is(tok::kw_try) ||
-              Tok.is(tok::colon)) &&
-             Actions.CurContext->isTranslationUnit()) {
+  }
+  else if (CurParsedObjCImpl && 
+           !TemplateInfo.TemplateParams &&
+           (Tok.is(tok::l_brace) || Tok.is(tok::kw_try) ||
+            Tok.is(tok::colon)) && 
+      Actions.CurContext->isTranslationUnit()) {
     ParseScope BodyScope(this, Scope::FnScope|Scope::DeclScope);
     Scope *ParentScope = getCurScope()->getParent();
 

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Jun 15 06:24:54 2016
@@ -2213,11 +2213,11 @@ Sema::ActOnIdExpression(Scope *S, CXXSco
   bool ADL = UseArgumentDependentLookup(SS, R, HasTrailingLParen);
 
   if (R.empty() && !ADL) {
-    // if (SS.isEmpty() && getLangOpts().MSVCCompat) {
-    //   if (Expr *E = recoverFromMSUnqualifiedLookup(*this, Context, NameInfo,
-    //                                                TemplateKWLoc, TemplateArgs))
-    //     return E;
-    // }
+    if (SS.isEmpty() && getLangOpts().MSVCCompat) {
+      if (Expr *E = recoverFromMSUnqualifiedLookup(*this, Context, NameInfo,
+                                                   TemplateKWLoc, TemplateArgs))
+        return E;
+    }
 
     // Don't diagnose an empty lookup for inline assembly.
     if (IsInlineAsmIdentifier)

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Jun 15 06:24:54 2016
@@ -3978,30 +3978,3 @@ StmtResult Sema::ActOnCapturedRegionEnd(
 
   return Res;
 }
-
-StmtResult Sema::ActOnMSLateParsedCompoundStmt(SourceLocation LB,
-                                               SourceLocation RB,
-                                               ArrayRef<Token> Tokens,
-                                               StringRef Rep) {
-  if (CurContext->isDependentContext())
-    return MSLateParsedCompoundStmt::Create(getASTContext(), LB, RB, Tokens,
-                                            Rep);
-
-  QualType CXXThisTy = getCurrentThisType();
-  assert(!CXXThisTy.isNull());
-  auto *CXXThisRD = CXXThisTy->castAs<PointerType>()
-                        ->getPointeeCXXRecordDecl()
-                        ->getCanonicalDecl();
-  DeclContext *DC = getFunctionLevelDeclContext();
-  while (auto *PCXXRD = dyn_cast<CXXRecordDecl>(DC)) {
-    if (PCXXRD->getCanonicalDecl() == CXXThisRD)
-      break;
-    DC = DC->getParent();
-  }
-  auto *MD = dyn_cast<CXXMethodDecl>(DC);
-  LateParsedTemplate LPT;
-  LPT.Toks.append(Tokens.begin(), Tokens.end());
-  LPT.D = MD;
-  LateTemplateParser(OpaqueParser, LPT);
-  return MD->getBody();
-}

Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Wed Jun 15 06:24:54 2016
@@ -1292,17 +1292,6 @@ public:
                                     Constraints, Clobbers, Exprs, EndLoc);
   }
 
-  /// Build a new compound statement.
-  ///
-  /// By default, performs semantic analysis to build the new statement.
-  /// Subclasses may override this routine to provide different behavior.
-  StmtResult RebuildMSLateParsedCompoundStmt(SourceLocation LB,
-                                             SourceLocation RB,
-                                             ArrayRef<Token> Tokens,
-                                             StringRef Rep) {
-    return getSema().ActOnMSLateParsedCompoundStmt(LB, RB, Tokens, Rep);
-  }
-
   /// \brief Build a new co_return statement.
   ///
   /// By default, performs semantic analysis to build the new statement.
@@ -6617,16 +6606,6 @@ TreeTransform<Derived>::TransformMSAsmSt
                                        TransformedExprs, S->getEndLoc());
 }
 
-template <typename Derived>
-StmtResult TreeTransform<Derived>::TransformMSLateParsedCompoundStmt(
-    MSLateParsedCompoundStmt *S) {
-  if (SemaRef.CurContext->isDependentContext())
-    return S;
-  return getDerived().RebuildMSLateParsedCompoundStmt(
-      S->getLocStart(), S->getLocEnd(), S->tokens(),
-      S->getStringRepresentation());
-}
-
 // C++ Coroutines TS
 
 template<typename Derived>

Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Wed Jun 15 06:24:54 2016
@@ -382,21 +382,6 @@ void ASTStmtReader::VisitMSAsmStmt(MSAsm
                 Constraints, Exprs, Clobbers);
 }
 
-void ASTStmtReader::VisitMSLateParsedCompoundStmt(MSLateParsedCompoundStmt *S) {
-  VisitStmt(S);
-  SourceLocation LB = ReadSourceLocation(Record, Idx);
-  SourceLocation RB = ReadSourceLocation(Record, Idx);
-  std::string StringRep = ReadString(Record, Idx);
-  unsigned NumToks = Record[Idx++];
-
-  // Read the tokens.
-  SmallVector<Token, 16> Toks;
-  Toks.reserve(NumToks);
-  for (unsigned I = 0, E = NumToks; I != E; ++I)
-    Toks.push_back(ReadToken(Record, Idx));
-  S->init(Reader.getContext(), LB, RB, Toks, StringRep);
-}
-
 void ASTStmtReader::VisitCoroutineBodyStmt(CoroutineBodyStmt *S) {
   // FIXME: Implement coroutine serialization.
   llvm_unreachable("unimplemented");
@@ -2882,11 +2867,6 @@ Stmt *ASTReader::ReadStmtFromStream(Modu
       S = new (Context) MSAsmStmt(Empty);
       break;
 
-    case STMT_MS_LATE_PARSED_COMPOUND:
-      S = MSLateParsedCompoundStmt::CreateEmpty(
-          Context, Record[ASTStmtReader::NumStmtFields]);
-      break;
-
     case STMT_CAPTURED:
       S = CapturedStmt::CreateDeserialized(Context,
                                            Record[ASTStmtReader::NumStmtFields]);

Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Wed Jun 15 06:24:54 2016
@@ -297,18 +297,6 @@ void ASTStmtWriter::VisitMSAsmStmt(MSAsm
   Code = serialization::STMT_MSASM;
 }
 
-void ASTStmtWriter::VisitMSLateParsedCompoundStmt(MSLateParsedCompoundStmt *S) {
-  VisitStmt(S);
-  Record.push_back(S->tokens().size());
-  Record.AddSourceLocation(S->getLocStart());
-  Record.AddSourceLocation(S->getLocEnd());
-  Record.AddString(S->getStringRepresentation());
-  for (auto &Tok : S->tokens())
-    Writer.AddToken(Tok, Record.getRecordData());
-
-  Code = serialization::STMT_MS_LATE_PARSED_COMPOUND;
-}
-
 void ASTStmtWriter::VisitCoroutineBodyStmt(CoroutineBodyStmt *S) {
   // FIXME: Implement coroutine serialization.
   llvm_unreachable("unimplemented");

Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Wed Jun 15 06:24:54 2016
@@ -808,7 +808,6 @@ void ExprEngine::Visit(const Stmt *S, Ex
     case Stmt::SwitchStmtClass:
     case Stmt::WhileStmtClass:
     case Expr::MSDependentExistsStmtClass:
-    case Expr::MSLateParsedCompoundStmtClass:
     case Stmt::CapturedStmtClass:
     case Stmt::OMPParallelDirectiveClass:
     case Stmt::OMPSimdDirectiveClass:

Modified: cfe/trunk/test/SemaTemplate/ms-lookup-template-base-classes.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/ms-lookup-template-base-classes.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/ms-lookup-template-base-classes.cpp (original)
+++ cfe/trunk/test/SemaTemplate/ms-lookup-template-base-classes.cpp Wed Jun 15 06:24:54 2016
@@ -556,7 +556,6 @@ struct Base {
 template <typename T> struct Template : T {
   void member() {
     f(); // expected-warning {{found via unqualified lookup into dependent bases}}
-    T::f();
   }
 };
 void test() {

Modified: cfe/trunk/tools/libclang/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndex.cpp (original)
+++ cfe/trunk/tools/libclang/CIndex.cpp Wed Jun 15 06:24:54 2016
@@ -4632,8 +4632,6 @@ CXString clang_getCursorKindSpelling(enu
       return cxstring::createRef("GCCAsmStmt");
   case CXCursor_MSAsmStmt:
       return cxstring::createRef("MSAsmStmt");
-  case CXCursor_MSLateParsedCompoundStmt:
-      return cxstring::createRef("MSLateParsedCompoundStmt");
   case CXCursor_ObjCAtTryStmt:
       return cxstring::createRef("ObjCAtTryStmt");
   case CXCursor_ObjCAtCatchStmt:

Modified: cfe/trunk/tools/libclang/CXCursor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXCursor.cpp?rev=272776&r1=272775&r2=272776&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CXCursor.cpp (original)
+++ cfe/trunk/tools/libclang/CXCursor.cpp Wed Jun 15 06:24:54 2016
@@ -168,10 +168,6 @@ CXCursor cxcursor::MakeCXCursor(const St
     K = CXCursor_MSAsmStmt;
     break;
   
-  case Stmt::MSLateParsedCompoundStmtClass:
-    K = CXCursor_MSLateParsedCompoundStmt;
-    break;
-  
   case Stmt::ObjCAtTryStmtClass:
     K = CXCursor_ObjCAtTryStmt;
     break;




More information about the cfe-commits mailing list