[clang] c7d4a05 - Properly identify builtins in a diagnostic note
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 15 08:46:21 PDT 2022
Author: Aaron Ballman
Date: 2022-04-15T11:46:13-04:00
New Revision: c7d4a05228090cb6b1b7f6e5d300f197897ac756
URL: https://github.com/llvm/llvm-project/commit/c7d4a05228090cb6b1b7f6e5d300f197897ac756
DIFF: https://github.com/llvm/llvm-project/commit/c7d4a05228090cb6b1b7f6e5d300f197897ac756.diff
LOG: Properly identify builtins in a diagnostic note
When emitting a "conflicting types" warning for a function declaration,
it's more clear to diagnose the previous declaration specifically as
being a builtin if it one.
Added:
Modified:
clang/lib/Sema/SemaDecl.cpp
clang/test/Sema/prototype-redecls.c
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 0708e687c5752..76bf67397a6ee 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -3256,6 +3256,10 @@ getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {
PrevDiag = diag::note_previous_definition;
else if (Old->isImplicit()) {
PrevDiag = diag::note_previous_implicit_declaration;
+ if (const auto *FD = dyn_cast<FunctionDecl>(Old)) {
+ if (FD->getBuiltinID())
+ PrevDiag = diag::note_previous_builtin_declaration;
+ }
if (OldLocation.isInvalid())
OldLocation = New->getLocation();
} else
diff --git a/clang/test/Sema/prototype-redecls.c b/clang/test/Sema/prototype-redecls.c
index 9b85753cbbb5b..ca3355f79d69a 100644
--- a/clang/test/Sema/prototype-redecls.c
+++ b/clang/test/Sema/prototype-redecls.c
@@ -22,3 +22,10 @@ void derp(x) int x; {}
void garp(int);
void garp();
void garp(x) int x; {}
+
+// Ensure redeclarations that conflict with a builtin use a note which makes it
+// clear that the previous declaration was a builtin.
+float rintf() { // expected-error {{conflicting types for 'rintf'}} \
+ expected-note {{'rintf' is a builtin with type 'float (float)'}}
+ return 1.0f;
+}
More information about the cfe-commits
mailing list