diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/StmtCXX.cpp | 35 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 4 | ||||
-rw-r--r-- | clang/lib/AST/StmtProfile.cpp | 5 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Parse/ParseTemplate.cpp | 84 | ||||
-rw-r--r-- | clang/lib/Parse/Parser.cpp | 37 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 27 | ||||
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 21 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 20 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriterStmt.cpp | 12 | ||||
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 1 |
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: |