[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
This commit is contained in:
Aleksandr Platonov 2022-09-01 21:51:25 +03:00
parent 06c4634483
commit cc4b86cfc0
2 changed files with 22 additions and 4 deletions

View File

@ -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(

View File

@ -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) {