Author: Aleksandr Platonov Date: 2022-09-01T23:46:20+03:00 New Revision: cc4b86cfc01c3a923324c4bf1485ae9c8021e0a1
URL: https://github.com/llvm/llvm-project/commit/cc4b86cfc01c3a923324c4bf1485ae9c8021e0a1 DIFF: https://github.com/llvm/llvm-project/commit/cc4b86cfc01c3a923324c4bf1485ae9c8021e0a1.diff LOG: [clangd] Fix tests for implicit C function declaration clangd code fixes at D122983 were not right. We need to check that clangd provides IncludeFixer fixits for implicit function declaration even if this is not an error (e.g. implicit function declaration in C89). Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D133043 Added: Modified: clang-tools-extra/clangd/ParsedAST.cpp clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/ParsedAST.cpp b/clang-tools-extra/clangd/ParsedAST.cpp index cf4c57e6e871b..50923c862c583 100644 --- a/clang-tools-extra/clangd/ParsedAST.cpp +++ b/clang-tools-extra/clangd/ParsedAST.cpp @@ -493,6 +493,7 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs, // We restore the original severity in the level adjuster. // FIXME: It would be better to have a real API for this, but what? for (auto ID : {diag::ext_implicit_function_decl_c99, + diag::ext_implicit_lib_function_decl, diag::ext_implicit_lib_function_decl_c99, diag::warn_implicit_function_decl}) { OverriddenSeverity.try_emplace( diff --git a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp index 306c8b1221093..0727fff464303 100644 --- a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp @@ -1465,11 +1465,12 @@ TEST(IncludeFixerTest, NoCrashOnTemplateInstantiations) { TEST(IncludeFixerTest, HeaderNamedInDiag) { Annotations Test(R"cpp( $insert[[]]int main() { - [[printf]](""); // error-ok + [[printf]](""); } )cpp"); auto TU = TestTU::withCode(Test.code()); - TU.ExtraArgs = {"-xc"}; + TU.ExtraArgs = {"-xc", "-std=c99", + "-Wno-error=implicit-function-declaration"}; auto Index = buildIndexWithSymbol({}); TU.ExternalIndex = Index.get(); @@ -1482,13 +1483,22 @@ TEST(IncludeFixerTest, HeaderNamedInDiag) { "declarations"), withFix(Fix(Test.range("insert"), "#include <stdio.h>\n", "Include <stdio.h> for symbol printf"))))); + + TU.ExtraArgs = {"-xc", "-std=c89"}; + EXPECT_THAT( + *TU.build().getDiagnostics(), + ElementsAre(AllOf( + Diag(Test.range(), "implicitly declaring library function 'printf' " + "with type 'int (const char *, ...)'"), + withFix(Fix(Test.range("insert"), "#include <stdio.h>\n", + "Include <stdio.h> for symbol printf"))))); } TEST(IncludeFixerTest, CImplicitFunctionDecl) { - Annotations Test("void x() { [[foo]](); /* error-ok */ }"); + Annotations Test("void x() { [[foo]](); }"); auto TU = TestTU::withCode(Test.code()); TU.Filename = "test.c"; - TU.ExtraArgs.push_back("-std=c99"); + TU.ExtraArgs = {"-std=c99", "-Wno-error=implicit-function-declaration"}; Symbol Sym = func("foo"); Sym.Flags |= Symbol::IndexedForCodeCompletion; @@ -1509,6 +1519,13 @@ TEST(IncludeFixerTest, CImplicitFunctionDecl) { "support implicit function declarations"), withFix(Fix(Range{}, "#include \"foo.h\"\n", "Include \"foo.h\" for symbol foo"))))); + + TU.ExtraArgs = {"-std=c89", "-Wall"}; + EXPECT_THAT(*TU.build().getDiagnostics(), + ElementsAre(AllOf( + Diag(Test.range(), "implicit declaration of function 'foo'"), + withFix(Fix(Range{}, "#include \"foo.h\"\n", + "Include \"foo.h\" for symbol foo"))))); } TEST(DiagsInHeaders, DiagInsideHeader) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits