[clang-tools-extra] cc4b86c - [clangd] Fix tests for implicit C function declaration
Aleksandr Platonov via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 1 13:47:30 PDT 2022
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) {
More information about the cfe-commits
mailing list