forked from OSchip/llvm-project
[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:
parent
06c4634483
commit
cc4b86cfc0
|
@ -493,6 +493,7 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
|
||||||
// We restore the original severity in the level adjuster.
|
// We restore the original severity in the level adjuster.
|
||||||
// FIXME: It would be better to have a real API for this, but what?
|
// FIXME: It would be better to have a real API for this, but what?
|
||||||
for (auto ID : {diag::ext_implicit_function_decl_c99,
|
for (auto ID : {diag::ext_implicit_function_decl_c99,
|
||||||
|
diag::ext_implicit_lib_function_decl,
|
||||||
diag::ext_implicit_lib_function_decl_c99,
|
diag::ext_implicit_lib_function_decl_c99,
|
||||||
diag::warn_implicit_function_decl}) {
|
diag::warn_implicit_function_decl}) {
|
||||||
OverriddenSeverity.try_emplace(
|
OverriddenSeverity.try_emplace(
|
||||||
|
|
|
@ -1465,11 +1465,12 @@ TEST(IncludeFixerTest, NoCrashOnTemplateInstantiations) {
|
||||||
TEST(IncludeFixerTest, HeaderNamedInDiag) {
|
TEST(IncludeFixerTest, HeaderNamedInDiag) {
|
||||||
Annotations Test(R"cpp(
|
Annotations Test(R"cpp(
|
||||||
$insert[[]]int main() {
|
$insert[[]]int main() {
|
||||||
[[printf]](""); // error-ok
|
[[printf]]("");
|
||||||
}
|
}
|
||||||
)cpp");
|
)cpp");
|
||||||
auto TU = TestTU::withCode(Test.code());
|
auto TU = TestTU::withCode(Test.code());
|
||||||
TU.ExtraArgs = {"-xc"};
|
TU.ExtraArgs = {"-xc", "-std=c99",
|
||||||
|
"-Wno-error=implicit-function-declaration"};
|
||||||
auto Index = buildIndexWithSymbol({});
|
auto Index = buildIndexWithSymbol({});
|
||||||
TU.ExternalIndex = Index.get();
|
TU.ExternalIndex = Index.get();
|
||||||
|
|
||||||
|
@ -1482,13 +1483,22 @@ TEST(IncludeFixerTest, HeaderNamedInDiag) {
|
||||||
"declarations"),
|
"declarations"),
|
||||||
withFix(Fix(Test.range("insert"), "#include <stdio.h>\n",
|
withFix(Fix(Test.range("insert"), "#include <stdio.h>\n",
|
||||||
"Include <stdio.h> for symbol printf")))));
|
"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) {
|
TEST(IncludeFixerTest, CImplicitFunctionDecl) {
|
||||||
Annotations Test("void x() { [[foo]](); /* error-ok */ }");
|
Annotations Test("void x() { [[foo]](); }");
|
||||||
auto TU = TestTU::withCode(Test.code());
|
auto TU = TestTU::withCode(Test.code());
|
||||||
TU.Filename = "test.c";
|
TU.Filename = "test.c";
|
||||||
TU.ExtraArgs.push_back("-std=c99");
|
TU.ExtraArgs = {"-std=c99", "-Wno-error=implicit-function-declaration"};
|
||||||
|
|
||||||
Symbol Sym = func("foo");
|
Symbol Sym = func("foo");
|
||||||
Sym.Flags |= Symbol::IndexedForCodeCompletion;
|
Sym.Flags |= Symbol::IndexedForCodeCompletion;
|
||||||
|
@ -1509,6 +1519,13 @@ TEST(IncludeFixerTest, CImplicitFunctionDecl) {
|
||||||
"support implicit function declarations"),
|
"support implicit function declarations"),
|
||||||
withFix(Fix(Range{}, "#include \"foo.h\"\n",
|
withFix(Fix(Range{}, "#include \"foo.h\"\n",
|
||||||
"Include \"foo.h\" for symbol foo")))));
|
"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) {
|
TEST(DiagsInHeaders, DiagInsideHeader) {
|
||||||
|
|
Loading…
Reference in New Issue