diff --git a/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp b/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp index cfcb955831ad2..664f3b76f6612 100644 --- a/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp +++ b/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp @@ -247,13 +247,12 @@ NSSymbolMap *Recognizer::namespaceSymbols(const DeclContext *DC, Lang L) { std::optional Recognizer::operator()(const Decl *D) { Lang L; - if (D->getLangOpts().CPlusPlus) { + if (D->getLangOpts().CPlusPlus) L = Lang::CXX; - } else if (D->getLangOpts().C11) { + else if (D->getLangOpts().C99) L = Lang::C; - } else { + else return std::nullopt; // not a supported language. - } // If D is std::vector::iterator, `vector` is the outer symbol to look up. // We keep all the candidate DCs as some may turn out to be anon enums. diff --git a/clang/unittests/Tooling/StandardLibraryTest.cpp b/clang/unittests/Tooling/StandardLibraryTest.cpp index 6d90bbdf3b6eb..edca31649accf 100644 --- a/clang/unittests/Tooling/StandardLibraryTest.cpp +++ b/clang/unittests/Tooling/StandardLibraryTest.cpp @@ -174,6 +174,17 @@ TEST(StdlibTest, Recognizer) { EXPECT_EQ(Recognizer(Sec), std::nullopt); } +TEST(StdlibTest, RecognizerForC99) { + TestInputs Input("typedef char uint8_t;"); + Input.Language = TestLanguage::Lang_C99; + TestAST AST(Input); + + auto &Uint8T = lookup(AST, "uint8_t"); + stdlib::Recognizer Recognizer; + EXPECT_EQ(Recognizer(&Uint8T), + stdlib::Symbol::named("", "uint8_t", stdlib::Lang::C)); +} + } // namespace } // namespace tooling } // namespace clang