diff --git a/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp b/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp --- a/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp +++ b/clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp @@ -247,13 +247,12 @@ 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 --- a/clang/unittests/Tooling/StandardLibraryTest.cpp +++ b/clang/unittests/Tooling/StandardLibraryTest.cpp @@ -174,6 +174,17 @@ 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