Author: Nishith Kumar M Shah Date: 2024-06-05T11:42:13-07:00 New Revision: 0559eaff5ac4afae14dcbb6396da2a0c3f325cd8
URL: https://github.com/llvm/llvm-project/commit/0559eaff5ac4afae14dcbb6396da2a0c3f325cd8 DIFF: https://github.com/llvm/llvm-project/commit/0559eaff5ac4afae14dcbb6396da2a0c3f325cd8.diff LOG: Revert "Pass LangOpts from CompilerInstance to DependencyScanningWorker (#93753)" (#94488) This reverts commit 9862080b1cbf685c0d462b29596e3f7206d24aa2. Added: Modified: clang/include/clang/Lex/DependencyDirectivesScanner.h clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h clang/lib/Frontend/FrontendActions.cpp clang/lib/Lex/DependencyDirectivesScanner.cpp clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp clang/unittests/Lex/DependencyDirectivesScannerTest.cpp clang/unittests/Lex/PPDependencyDirectivesTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Lex/DependencyDirectivesScanner.h b/clang/include/clang/Lex/DependencyDirectivesScanner.h index 2f8354dec939f..0e115906fbfe5 100644 --- a/clang/include/clang/Lex/DependencyDirectivesScanner.h +++ b/clang/include/clang/Lex/DependencyDirectivesScanner.h @@ -17,7 +17,6 @@ #ifndef LLVM_CLANG_LEX_DEPENDENCYDIRECTIVESSCANNER_H #define LLVM_CLANG_LEX_DEPENDENCYDIRECTIVESSCANNER_H -#include "clang/Basic/LangOptions.h" #include "clang/Basic/SourceLocation.h" #include "llvm/ADT/ArrayRef.h" @@ -118,7 +117,7 @@ struct Directive { bool scanSourceForDependencyDirectives( StringRef Input, SmallVectorImpl<dependency_directives_scan::Token> &Tokens, SmallVectorImpl<dependency_directives_scan::Directive> &Directives, - const LangOptions &LangOpts, DiagnosticsEngine *Diags = nullptr, + DiagnosticsEngine *Diags = nullptr, SourceLocation InputSourceLoc = SourceLocation()); /// Print the previously scanned dependency directives as minimized source text. diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h index 9dc20065a09a3..f7b4510d7f7be 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h @@ -363,8 +363,7 @@ class DependencyScanningWorkerFilesystem /// /// Returns true if the directive tokens are populated for this file entry, /// false if not (i.e. this entry is not a file or its scan fails). - bool ensureDirectiveTokensArePopulated(EntryRef Entry, - const LangOptions &LangOpts); + bool ensureDirectiveTokensArePopulated(EntryRef Entry); /// Check whether \p Path exists. By default checks cached result of \c /// status(), and falls back on FS if unable to do so. diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 1812b85860f64..4f064321997a2 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -1169,8 +1169,8 @@ void PrintDependencyDirectivesSourceMinimizerAction::ExecuteAction() { llvm::SmallVector<dependency_directives_scan::Token, 16> Tokens; llvm::SmallVector<dependency_directives_scan::Directive, 32> Directives; if (scanSourceForDependencyDirectives( - FromFile.getBuffer(), Tokens, Directives, CI.getLangOpts(), - &CI.getDiagnostics(), SM.getLocForStartOfFile(SM.getMainFileID()))) { + FromFile.getBuffer(), Tokens, Directives, &CI.getDiagnostics(), + SM.getLocForStartOfFile(SM.getMainFileID()))) { assert(CI.getDiagnostics().hasErrorOccurred() && "no errors reported for failure"); diff --git a/clang/lib/Lex/DependencyDirectivesScanner.cpp b/clang/lib/Lex/DependencyDirectivesScanner.cpp index fda54d314eef6..0971daa1f3666 100644 --- a/clang/lib/Lex/DependencyDirectivesScanner.cpp +++ b/clang/lib/Lex/DependencyDirectivesScanner.cpp @@ -62,17 +62,14 @@ struct DirectiveWithTokens { struct Scanner { Scanner(StringRef Input, SmallVectorImpl<dependency_directives_scan::Token> &Tokens, - DiagnosticsEngine *Diags, SourceLocation InputSourceLoc, - const LangOptions &LangOpts) + DiagnosticsEngine *Diags, SourceLocation InputSourceLoc) : Input(Input), Tokens(Tokens), Diags(Diags), - InputSourceLoc(InputSourceLoc), - LangOpts(getLangOptsForDepScanning(LangOpts)), - TheLexer(InputSourceLoc, this->LangOpts, Input.begin(), Input.begin(), + InputSourceLoc(InputSourceLoc), LangOpts(getLangOptsForDepScanning()), + TheLexer(InputSourceLoc, LangOpts, Input.begin(), Input.begin(), Input.end()) {} - static LangOptions - getLangOptsForDepScanning(const LangOptions &invocationLangOpts) { - LangOptions LangOpts(invocationLangOpts); + static LangOptions getLangOptsForDepScanning() { + LangOptions LangOpts; // Set the lexer to use 'tok::at' for '@', instead of 'tok::unknown'. LangOpts.ObjC = true; LangOpts.LineComment = true; @@ -703,7 +700,7 @@ bool Scanner::lex_Pragma(const char *&First, const char *const End) { SmallVector<dependency_directives_scan::Token> DiscardTokens; const char *Begin = Buffer.c_str(); Scanner PragmaScanner{StringRef(Begin, Buffer.size()), DiscardTokens, Diags, - InputSourceLoc, LangOptions()}; + InputSourceLoc}; PragmaScanner.TheLexer.setParsingPreprocessorDirective(true); if (PragmaScanner.lexPragma(Begin, Buffer.end())) @@ -953,10 +950,9 @@ bool Scanner::scan(SmallVectorImpl<Directive> &Directives) { bool clang::scanSourceForDependencyDirectives( StringRef Input, SmallVectorImpl<dependency_directives_scan::Token> &Tokens, - SmallVectorImpl<Directive> &Directives, const LangOptions &LangOpts, - DiagnosticsEngine *Diags, SourceLocation InputSourceLoc) { - return Scanner(Input, Tokens, Diags, InputSourceLoc, LangOpts) - .scan(Directives); + SmallVectorImpl<Directive> &Directives, DiagnosticsEngine *Diags, + SourceLocation InputSourceLoc) { + return Scanner(Input, Tokens, Diags, InputSourceLoc).scan(Directives); } void clang::printDependencyDirectivesAsSource( diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp index 66a2f6e0acb63..0cab17a342440 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp @@ -42,7 +42,7 @@ DependencyScanningWorkerFilesystem::readFile(StringRef Filename) { } bool DependencyScanningWorkerFilesystem::ensureDirectiveTokensArePopulated( - EntryRef Ref, const LangOptions &LangOpts) { + EntryRef Ref) { auto &Entry = Ref.Entry; if (Entry.isError() || Entry.isDirectory()) @@ -66,7 +66,7 @@ bool DependencyScanningWorkerFilesystem::ensureDirectiveTokensArePopulated( // dependencies. if (scanSourceForDependencyDirectives(Contents->Original->getBuffer(), Contents->DepDirectiveTokens, - Directives, LangOpts)) { + Directives)) { Contents->DepDirectiveTokens.clear(); // FIXME: Propagate the diagnostic if desired by the client. Contents->DepDirectives.store(new std::optional<DependencyDirectivesTy>()); diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index 07e1960dd9058..0f82f22d8b9a8 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -364,12 +364,11 @@ class DependencyScanningAction : public tooling::ToolAction { // Use the dependency scanning optimized file system if requested to do so. if (DepFS) ScanInstance.getPreprocessorOpts().DependencyDirectivesForFile = - [LocalDepFS = DepFS, - &LangOpts = ScanInstance.getLangOpts()](FileEntryRef File) + [LocalDepFS = DepFS](FileEntryRef File) -> std::optional<ArrayRef<dependency_directives_scan::Directive>> { if (llvm::ErrorOr<EntryRef> Entry = LocalDepFS->getOrCreateFileSystemEntry(File.getName())) - if (LocalDepFS->ensureDirectiveTokensArePopulated(*Entry, LangOpts)) + if (LocalDepFS->ensureDirectiveTokensArePopulated(*Entry)) return Entry->getDirectiveTokens(); return std::nullopt; }; diff --git a/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp b/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp index 044c3d65ec6fb..59fef9ecbb9c9 100644 --- a/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp +++ b/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "clang/Lex/DependencyDirectivesScanner.h" -#include "clang/Basic/TokenKinds.h" #include "llvm/ADT/SmallString.h" #include "gtest/gtest.h" @@ -18,11 +17,11 @@ using namespace clang::dependency_directives_scan; static bool minimizeSourceToDependencyDirectives( StringRef Input, SmallVectorImpl<char> &Out, SmallVectorImpl<dependency_directives_scan::Token> &Tokens, - SmallVectorImpl<Directive> &Directives, const LangOptions &LangOpts) { + SmallVectorImpl<Directive> &Directives) { Out.clear(); Tokens.clear(); Directives.clear(); - if (scanSourceForDependencyDirectives(Input, Tokens, Directives, LangOpts)) + if (scanSourceForDependencyDirectives(Input, Tokens, Directives)) return true; raw_svector_ostream OS(Out); @@ -39,9 +38,7 @@ static bool minimizeSourceToDependencyDirectives(StringRef Input, SmallVectorImpl<char> &Out) { SmallVector<dependency_directives_scan::Token, 16> Tokens; SmallVector<Directive, 32> Directives; - LangOptions LangOpts; - return minimizeSourceToDependencyDirectives(Input, Out, Tokens, Directives, - LangOpts); + return minimizeSourceToDependencyDirectives(Input, Out, Tokens, Directives); } namespace { @@ -50,17 +47,16 @@ TEST(MinimizeSourceToDependencyDirectivesTest, Empty) { SmallVector<char, 128> Out; SmallVector<dependency_directives_scan::Token, 4> Tokens; SmallVector<Directive, 4> Directives; - LangOptions LangOpts; - ASSERT_FALSE(minimizeSourceToDependencyDirectives("", Out, Tokens, Directives, - LangOpts)); + ASSERT_FALSE( + minimizeSourceToDependencyDirectives("", Out, Tokens, Directives)); EXPECT_TRUE(Out.empty()); EXPECT_TRUE(Tokens.empty()); ASSERT_EQ(1u, Directives.size()); ASSERT_EQ(pp_eof, Directives.back().Kind); ASSERT_FALSE(minimizeSourceToDependencyDirectives("abc def\nxyz", Out, Tokens, - Directives, LangOpts)); + Directives)); EXPECT_STREQ("<TokBeforeEOF>\n", Out.data()); EXPECT_TRUE(Tokens.empty()); ASSERT_EQ(2u, Directives.size()); @@ -72,7 +68,6 @@ TEST(MinimizeSourceToDependencyDirectivesTest, AllTokens) { SmallVector<char, 128> Out; SmallVector<dependency_directives_scan::Token, 4> Tokens; SmallVector<Directive, 4> Directives; - LangOptions LangOpts; ASSERT_FALSE( minimizeSourceToDependencyDirectives("#define A\n" @@ -97,7 +92,7 @@ TEST(MinimizeSourceToDependencyDirectivesTest, AllTokens) { "export module m;\n" "import m;\n" "#pragma clang system_header\n", - Out, Tokens, Directives, LangOpts)); + Out, Tokens, Directives)); EXPECT_EQ(pp_define, Directives[0].Kind); EXPECT_EQ(pp_undef, Directives[1].Kind); EXPECT_EQ(pp_endif, Directives[2].Kind); @@ -150,10 +145,9 @@ TEST(MinimizeSourceToDependencyDirectivesTest, Define) { SmallVector<char, 128> Out; SmallVector<dependency_directives_scan::Token, 4> Tokens; SmallVector<Directive, 4> Directives; - LangOptions LangOpts; - ASSERT_FALSE(minimizeSourceToDependencyDirectives( - "#define MACRO", Out, Tokens, Directives, LangOpts)); + ASSERT_FALSE(minimizeSourceToDependencyDirectives("#define MACRO", Out, + Tokens, Directives)); EXPECT_STREQ("#define MACRO\n", Out.data()); ASSERT_EQ(4u, Tokens.size()); ASSERT_EQ(2u, Directives.size()); @@ -844,7 +838,6 @@ TEST(MinimizeSourceToDependencyDirectivesTest, PragmaOnce) { SmallVector<char, 128> Out; SmallVector<dependency_directives_scan::Token, 4> Tokens; SmallVector<Directive, 4> Directives; - LangOptions LangOpts; StringRef Source = R"(// comment #pragma once @@ -852,8 +845,8 @@ TEST(MinimizeSourceToDependencyDirectivesTest, PragmaOnce) { #include <test.h> _Pragma("once") )"; - ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out, Tokens, - Directives, LangOpts)); + ASSERT_FALSE( + minimizeSourceToDependencyDirectives(Source, Out, Tokens, Directives)); EXPECT_STREQ("#pragma once\n#include <test.h>\n_Pragma(\"once\")\n", Out.data()); ASSERT_EQ(Directives.size(), 4u); @@ -933,7 +926,6 @@ TEST(MinimizeSourceToDependencyDirectivesTest, CxxModules) { SmallVector<char, 128> Out; SmallVector<dependency_directives_scan::Token, 4> Tokens; SmallVector<Directive, 4> Directives; - LangOptions LangOpts; StringRef Source = R"( module; @@ -962,8 +954,8 @@ ort \ import f(->a = 3); } )"; - ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out, Tokens, - Directives, LangOpts)); + ASSERT_FALSE( + minimizeSourceToDependencyDirectives(Source, Out, Tokens, Directives)); EXPECT_STREQ("#include \"textual-header.h\"\nexport module m;" "exp\\\nort import:l[[rename]];" "import<<=3;import a b d e d e f e;" @@ -1020,52 +1012,4 @@ TEST(MinimizeSourceToDependencyDirectivesTest, TokensBeforeEOF) { EXPECT_STREQ("#ifndef A\n#define A\n#endif\n<TokBeforeEOF>\n", Out.data()); } -TEST(MinimizeSourceToDependencyDirectivesTest, CPlusPlus14PPNumber) { - SmallVector<char, 128> Out; - SmallVector<dependency_directives_scan::Token, 4> Tokens; - SmallVector<Directive, 4> Directives; - LangOptions LangOpts; - - StringRef Source = R"( -#if 123'124 -#endif -)"; - - LangOpts.CPlusPlus14 = true; - ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out, Tokens, - Directives, LangOpts)); - EXPECT_STREQ("#if 123'124\n#endif\n", Out.data()); - ASSERT_EQ(Directives.size(), 3u); - EXPECT_EQ(Directives[0].Kind, dependency_directives_scan::pp_if); - EXPECT_EQ(Directives[1].Kind, dependency_directives_scan::pp_endif); - EXPECT_EQ(Directives[2].Kind, dependency_directives_scan::pp_eof); - ASSERT_EQ(Tokens.size(), 7u); - - ASSERT_TRUE(Tokens[0].is(tok::hash)); - ASSERT_TRUE(Tokens[1].is(tok::raw_identifier)); // "if" - ASSERT_TRUE(Tokens[2].is(tok::numeric_constant)); // 123'124 - ASSERT_TRUE(Tokens[3].is(tok::eod)); - ASSERT_TRUE(Tokens[4].is(tok::hash)); - ASSERT_TRUE(Tokens[5].is(tok::raw_identifier)); // #endif - ASSERT_TRUE(Tokens[6].is(tok::eod)); - - LangOpts.CPlusPlus14 = false; - ASSERT_FALSE(minimizeSourceToDependencyDirectives(Source, Out, Tokens, - Directives, LangOpts)); - EXPECT_STREQ("#if 123'124\n#endif\n", Out.data()); - ASSERT_EQ(Directives.size(), 3u); - EXPECT_EQ(Directives[0].Kind, dependency_directives_scan::pp_if); - EXPECT_EQ(Directives[1].Kind, dependency_directives_scan::pp_endif); - EXPECT_EQ(Directives[2].Kind, dependency_directives_scan::pp_eof); - ASSERT_EQ(Tokens.size(), 8u); - ASSERT_TRUE(Tokens[0].is(tok::hash)); - ASSERT_TRUE(Tokens[1].is(tok::raw_identifier)); // "if" - ASSERT_TRUE(Tokens[2].is(tok::numeric_constant)); // 123 - ASSERT_TRUE(Tokens[3].is(tok::unknown)); // '124 - ASSERT_TRUE(Tokens[4].is(tok::eod)); - ASSERT_TRUE(Tokens[5].is(tok::hash)); - ASSERT_TRUE(Tokens[6].is(tok::raw_identifier)); // #endif - ASSERT_TRUE(Tokens[7].is(tok::eod)); -} - } // end anonymous namespace diff --git a/clang/unittests/Lex/PPDependencyDirectivesTest.cpp b/clang/unittests/Lex/PPDependencyDirectivesTest.cpp index 410f378f1e89d..6ff87f720a559 100644 --- a/clang/unittests/Lex/PPDependencyDirectivesTest.cpp +++ b/clang/unittests/Lex/PPDependencyDirectivesTest.cpp @@ -104,7 +104,6 @@ TEST_F(PPDependencyDirectivesTest, MacroGuard) { SmallVector<dependency_directives_scan::Directive> Directives; }; SmallVector<std::unique_ptr<DepDirectives>> DepDirectivesObjects; - LangOptions LangOpts; auto getDependencyDirectives = [&](FileEntryRef File) -> std::optional<ArrayRef<dependency_directives_scan::Directive>> { @@ -112,7 +111,7 @@ TEST_F(PPDependencyDirectivesTest, MacroGuard) { StringRef Input = (*FileMgr.getBufferForFile(File))->getBuffer(); bool Err = scanSourceForDependencyDirectives( Input, DepDirectivesObjects.back()->Tokens, - DepDirectivesObjects.back()->Directives, LangOpts); + DepDirectivesObjects.back()->Directives); EXPECT_FALSE(Err); return llvm::ArrayRef(DepDirectivesObjects.back()->Directives); }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits