v.g.vassilev created this revision.
v.g.vassilev added reviewers: aaron.ballman, rsmith, shafik.
Herald added a subscriber: kristof.beyls.
Herald added a project: All.
v.g.vassilev requested review of this revision.
As we have discussed in https://reviews.llvm.org/D127284 we would like to phase
out `enableIncrementalProcesing` and use a better integrated option.
https://reviews.llvm.org/D127284 introduces a `LangOpt` called
`IncrementalExtensions`, however, we also have a `TU_Incremental` kind. I am
not entirely sure when we should use that because generally most of our actions
(even if we pass `-fincremental-extensions`) we still get `TU_Complete`.
@aaron.ballman, @rsmith, do you have an idea how to harmonize this?
https://reviews.llvm.org/D139258
Files:
clang/include/clang/Lex/Preprocessor.h
clang/lib/Interpreter/IncrementalParser.cpp
clang/lib/Lex/PPLexerChange.cpp
clang/lib/Parse/ParseDecl.cpp
clang/lib/Parse/Parser.cpp
clang/lib/Sema/Sema.cpp
clang/unittests/Frontend/FrontendActionTest.cpp
lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
Index: lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
===================================================================
--- lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
+++ lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
@@ -609,7 +609,8 @@
"-target",
arch.GetTriple().str(),
"-fmodules-validate-system-headers",
- "-Werror=non-modular-include-in-framework-module"};
+ "-Werror=non-modular-include-in-framework-module",
+ "-Xclang=-fincremental-extensions"};
target.GetPlatform()->AddClangModuleCompilationOptions(
&target, compiler_invocation_arguments);
@@ -701,8 +702,6 @@
instance->getFrontendOpts().Inputs[0]))
return nullptr;
- instance->getPreprocessor().enableIncrementalProcessing();
-
instance->createASTReader();
instance->createSema(action->getTranslationUnitKind(), nullptr);
Index: clang/unittests/Frontend/FrontendActionTest.cpp
===================================================================
--- clang/unittests/Frontend/FrontendActionTest.cpp
+++ clang/unittests/Frontend/FrontendActionTest.cpp
@@ -30,22 +30,12 @@
class TestASTFrontendAction : public ASTFrontendAction {
public:
- TestASTFrontendAction(bool enableIncrementalProcessing = false,
- bool actOnEndOfTranslationUnit = false)
- : EnableIncrementalProcessing(enableIncrementalProcessing),
- ActOnEndOfTranslationUnit(actOnEndOfTranslationUnit) { }
+ TestASTFrontendAction(bool actOnEndOfTranslationUnit = false)
+ : ActOnEndOfTranslationUnit(actOnEndOfTranslationUnit) {}
- bool EnableIncrementalProcessing;
bool ActOnEndOfTranslationUnit;
std::vector<std::string> decl_names;
- bool BeginSourceFileAction(CompilerInstance &ci) override {
- if (EnableIncrementalProcessing)
- ci.getPreprocessor().enableIncrementalProcessing();
-
- return ASTFrontendAction::BeginSourceFileAction(ci);
- }
-
std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
StringRef InFile) override {
return std::make_unique<Visitor>(CI, ActOnEndOfTranslationUnit,
@@ -108,11 +98,12 @@
FrontendInputFile("test.cc", Language::CXX));
invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
+ invocation->getLangOpts()->IncrementalExtensions = 1;
CompilerInstance compiler;
compiler.setInvocation(std::move(invocation));
compiler.createDiagnostics();
- TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true);
+ TestASTFrontendAction test_action;
ASSERT_TRUE(compiler.ExecuteAction(test_action));
ASSERT_EQ(2U, test_action.decl_names.size());
EXPECT_EQ("main", test_action.decl_names[0]);
@@ -123,6 +114,7 @@
auto invocation = std::make_shared<CompilerInvocation>();
invocation->getLangOpts()->CPlusPlus = true;
invocation->getLangOpts()->DelayedTemplateParsing = true;
+ invocation->getLangOpts()->IncrementalExtensions = 1;
invocation->getPreprocessorOpts().addRemappedFile(
"test.cc", MemoryBuffer::getMemBuffer(
"template<typename T> struct A { A(T); T data; };\n"
@@ -139,8 +131,7 @@
compiler.setInvocation(std::move(invocation));
compiler.createDiagnostics();
- TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true,
- /*actOnEndOfTranslationUnit=*/true);
+ TestASTFrontendAction test_action(/*actOnEndOfTranslationUnit=*/true);
ASSERT_TRUE(compiler.ExecuteAction(test_action));
ASSERT_EQ(13U, test_action.decl_names.size());
EXPECT_EQ("A", test_action.decl_names[0]);
Index: clang/lib/Sema/Sema.cpp
===================================================================
--- clang/lib/Sema/Sema.cpp
+++ clang/lib/Sema/Sema.cpp
@@ -1166,9 +1166,9 @@
}),
UnusedFileScopedDecls.end());
+ // Translation unit prefixes don't need any of the checking below.
if (TUKind == TU_Prefix) {
- // Translation unit prefixes don't need any of the checking below.
- if (!PP.isIncrementalProcessingEnabled())
+ if (!LangOpts.IncrementalExtensions)
TUScope = nullptr;
return;
}
@@ -1435,7 +1435,7 @@
assert(ParsingInitForAutoVars.empty() &&
"Didn't unmark var as having its initializer parsed");
- if (!PP.isIncrementalProcessingEnabled())
+ if (TUKind != TU_Incremental)
TUScope = nullptr;
}
Index: clang/lib/Parse/Parser.cpp
===================================================================
--- clang/lib/Parse/Parser.cpp
+++ clang/lib/Parse/Parser.cpp
@@ -614,7 +614,7 @@
// Skip over the EOF token, flagging end of previous input for incremental
// processing
- if (PP.isIncrementalProcessingEnabled() && Tok.is(tok::eof))
+ if (PP.getLangOpts().IncrementalExtensions && Tok.is(tok::eof))
ConsumeToken();
Result = nullptr;
@@ -1028,7 +1028,7 @@
ConsumeToken();
return nullptr;
}
- if (PP.isIncrementalProcessingEnabled() &&
+ if (PP.getLangOpts().IncrementalExtensions &&
!isDeclarationStatement(/*DisambiguatingWithExpression=*/true))
return ParseTopLevelStmtDecl();
Index: clang/lib/Parse/ParseDecl.cpp
===================================================================
--- clang/lib/Parse/ParseDecl.cpp
+++ clang/lib/Parse/ParseDecl.cpp
@@ -5382,7 +5382,7 @@
}
Parser::DeclGroupPtrTy Parser::ParseTopLevelStmtDecl() {
- assert(PP.isIncrementalProcessingEnabled() && "Not in incremental mode");
+ assert(PP.getLangOpts().IncrementalExtensions && "Not in incremental mode");
// Parse a top-level-stmt.
Parser::StmtVector Stmts;
Index: clang/lib/Lex/PPLexerChange.cpp
===================================================================
--- clang/lib/Lex/PPLexerChange.cpp
+++ clang/lib/Lex/PPLexerChange.cpp
@@ -550,12 +550,11 @@
<< PPOpts->PCHThroughHeader << 0;
}
- if (!isIncrementalProcessingEnabled())
+ if (!getLangOpts().IncrementalExtensions) {
// We're done with lexing.
CurLexer.reset();
-
- if (!isIncrementalProcessingEnabled())
CurPPLexer = nullptr;
+ }
if (TUKind == TU_Complete) {
// This is the end of the top-level file. 'WarnUnusedMacroLocs' has
Index: clang/lib/Interpreter/IncrementalParser.cpp
===================================================================
--- clang/lib/Interpreter/IncrementalParser.cpp
+++ clang/lib/Interpreter/IncrementalParser.cpp
@@ -216,7 +216,7 @@
llvm::Expected<PartialTranslationUnit &>
IncrementalParser::Parse(llvm::StringRef input) {
Preprocessor &PP = CI->getPreprocessor();
- assert(PP.isIncrementalProcessingEnabled() && "Not in incremental mode!?");
+ assert(PP.getLangOpts().IncrementalExtensions && "Not in incremental mode!?");
std::ostringstream SourceName;
SourceName << "input_line_" << InputCount++;
Index: clang/include/clang/Lex/Preprocessor.h
===================================================================
--- clang/include/clang/Lex/Preprocessor.h
+++ clang/include/clang/Lex/Preprocessor.h
@@ -1773,17 +1773,6 @@
/// CurTokenLexer pointers.
void recomputeCurLexerKind();
- /// Returns true if incremental processing is enabled
- bool isIncrementalProcessingEnabled() const {
- return getLangOpts().IncrementalExtensions;
- }
-
- /// Enables the incremental processing
- void enableIncrementalProcessing(bool value = true) {
- // FIXME: Drop this interface.
- const_cast<LangOptions &>(getLangOpts()).IncrementalExtensions = value;
- }
-
/// Specify the point at which code-completion will be performed.
///
/// \param File the file in which code completion should occur. If
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits