summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/StmtCXX.cpp35
-rw-r--r--clang/lib/AST/StmtPrinter.cpp4
-rw-r--r--clang/lib/AST/StmtProfile.cpp5
-rw-r--r--clang/lib/CodeGen/CGStmt.cpp1
-rw-r--r--clang/lib/Parse/ParseTemplate.cpp84
-rw-r--r--clang/lib/Parse/Parser.cpp37
-rw-r--r--clang/lib/Sema/SemaExpr.cpp10
-rw-r--r--clang/lib/Sema/SemaStmt.cpp27
-rw-r--r--clang/lib/Sema/TreeTransform.h21
-rw-r--r--clang/lib/Serialization/ASTReaderStmt.cpp20
-rw-r--r--clang/lib/Serialization/ASTWriterStmt.cpp12
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngine.cpp1
12 files changed, 11 insertions, 246 deletions
diff --git a/clang/lib/AST/StmtCXX.cpp b/clang/lib/AST/StmtCXX.cpp
index 08cdd204582..4692db84b50 100644
--- a/clang/lib/AST/StmtCXX.cpp
+++ b/clang/lib/AST/StmtCXX.cpp
@@ -86,38 +86,3 @@ VarDecl *CXXForRangeStmt::getLoopVariable() {
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);
-}
-
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index 07aef87f5fb..2e15c81cccd 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -2352,10 +2352,6 @@ void StmtPrinter::VisitCoreturnStmt(CoreturnStmt *S) {
OS << ";";
}
-void StmtPrinter::VisitMSLateParsedCompoundStmt(MSLateParsedCompoundStmt *S) {
- OS << S->getStringRepresentation();
-}
-
void StmtPrinter::VisitCoawaitExpr(CoawaitExpr *S) {
OS << "co_await ";
PrintExpr(S->getOperand());
diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp
index 4868beccb7a..f68bc3a397f 100644
--- a/clang/lib/AST/StmtProfile.cpp
+++ b/clang/lib/AST/StmtProfile.cpp
@@ -1499,11 +1499,6 @@ void StmtProfiler::VisitCoreturnStmt(const CoreturnStmt *S) {
VisitStmt(S);
}
-void StmtProfiler::VisitMSLateParsedCompoundStmt(
- const MSLateParsedCompoundStmt *S) {
- VisitStmt(S);
-}
-
void StmtProfiler::VisitCoawaitExpr(const CoawaitExpr *S) {
VisitExpr(S);
}
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp
index dfabd2e8d13..ff70bbc866f 100644
--- a/clang/lib/CodeGen/CGStmt.cpp
+++ b/clang/lib/CodeGen/CGStmt.cpp
@@ -80,7 +80,6 @@ void CodeGenFunction::EmitStmt(const Stmt *S) {
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:
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp
index 0369aae5597..6cf7b6d3dc5 100644
--- a/clang/lib/Parse/ParseTemplate.cpp
+++ b/clang/lib/Parse/ParseTemplate.cpp
@@ -1417,90 +1417,6 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) {
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();
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index b8f68c03bd4..9ed2d72fcd9 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -89,8 +89,6 @@ Parser::Parser(Preprocessor &pp, Sema &actions, bool skipFunctionBodies)
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(ParsingDeclarator &D,
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();
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 098a76379b3..6f23115f02a 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -2213,11 +2213,11 @@ Sema::ActOnIdExpression(Scope *S, CXXScopeSpec &SS,
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)
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 51ae9c1b844..d2d4098d177 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -3978,30 +3978,3 @@ StmtResult Sema::ActOnCapturedRegionEnd(Stmt *S) {
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();
-}
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 985f3072ef9..bba90191019 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -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>::TransformMSAsmStmt(MSAsmStmt *S) {
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>
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp
index 578193c9eeb..15e289f6f8e 100644
--- a/clang/lib/Serialization/ASTReaderStmt.cpp
+++ b/clang/lib/Serialization/ASTReaderStmt.cpp
@@ -382,21 +382,6 @@ void ASTStmtReader::VisitMSAsmStmt(MSAsmStmt *S) {
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(ModuleFile &F) {
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]);
diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp
index 942485f209c..5382b4af922 100644
--- a/clang/lib/Serialization/ASTWriterStmt.cpp
+++ b/clang/lib/Serialization/ASTWriterStmt.cpp
@@ -297,18 +297,6 @@ void ASTStmtWriter::VisitMSAsmStmt(MSAsmStmt *S) {
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");
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index 8df4c0ff852..84515022fc0 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -808,7 +808,6 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
case Stmt::SwitchStmtClass:
case Stmt::WhileStmtClass:
case Expr::MSDependentExistsStmtClass:
- case Expr::MSLateParsedCompoundStmtClass:
case Stmt::CapturedStmtClass:
case Stmt::OMPParallelDirectiveClass:
case Stmt::OMPSimdDirectiveClass:
OpenPOWER on IntegriCloud