[PATCH] D153267: [clang][Diagnostics] Provide parameter source range to arity-mismatch notes
Takuya Shimizu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 19 05:19:58 PDT 2023
hazohelet created this revision.
hazohelet added reviewers: aaron.ballman, tbaeder, cjdb, erichkeane.
Herald added a project: All.
hazohelet requested review of this revision.
Herald added a project: clang.
On mismatch of arity of functions like
void func( int aa, int bb) {}
void callsite() { func(3); }
this patch provides parameter source range to the diagnostic and makes it look like the following
void func( int aa, int bb) {}
^ ~~~~~~~~~~~~~~
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D153267
Files:
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaOverload.cpp
clang/test/Misc/diag-func-call-ranges.c
clang/test/Misc/diag-func-call-ranges.cpp
Index: clang/test/Misc/diag-func-call-ranges.cpp
===================================================================
--- /dev/null
+++ clang/test/Misc/diag-func-call-ranges.cpp
@@ -0,0 +1,14 @@
+// RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-print-source-range-info %s 2>&1 | FileCheck %s --strict-whitespace
+
+// CHECK: error: no matching function for call to 'func'
+
+// CHECK: :{[[@LINE+1]]:12-[[@LINE+1]]:18}: note: {{.*}} requires single argument
+void func( int aa ) {}
+// CHECK: :{[[@LINE+1]]:12-[[@LINE+3]]:18}: note: {{.*}} requires 3 arguments
+void func( int aa,
+ int bb,
+ int cc) {}
+
+void arity_mismatch() {
+ (void)func(2, 4);
+}
Index: clang/test/Misc/diag-func-call-ranges.c
===================================================================
--- /dev/null
+++ clang/test/Misc/diag-func-call-ranges.c
@@ -0,0 +1,11 @@
+// RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-print-source-range-info %s 2>&1 | FileCheck %s --strict-whitespace
+
+// CHECK: :{9:10-9:14}: error: too few arguments
+// CHECK: :{7:12-7:26}: note: 'func' declared here
+// CHECK: :{10:10-10:14}{10:20-10:24}: error: too many arguments
+// CHECK: :{7:12-7:26}: note: 'func' declared here
+void func( int aa, int bb) {}
+void arity_mismatch() {
+ (void)(func(3));
+ (void)(func(3, 4,5, 6));
+}
Index: clang/lib/Sema/SemaOverload.cpp
===================================================================
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -11037,11 +11037,13 @@
if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
<< (unsigned)FnKindPair.first << (unsigned)FnKindPair.second
- << Description << mode << Fn->getParamDecl(0) << NumFormalArgs;
+ << Description << mode << Fn->getParamDecl(0) << NumFormalArgs
+ << Fn->getParametersSourceRange();
else
S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
<< (unsigned)FnKindPair.first << (unsigned)FnKindPair.second
- << Description << mode << modeCount << NumFormalArgs;
+ << Description << mode << modeCount << NumFormalArgs
+ << Fn->getParametersSourceRange();
MaybeEmitInheritedConstructorNote(S, Found);
}
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -6448,7 +6448,8 @@
// Emit the location of the prototype.
if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)
- Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;
+ Diag(FDecl->getLocation(), diag::note_callee_decl)
+ << FDecl << FDecl->getParametersSourceRange();
return true;
}
@@ -6493,7 +6494,8 @@
// Emit the location of the prototype.
if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)
- Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;
+ Diag(FDecl->getLocation(), diag::note_callee_decl)
+ << FDecl << FDecl->getParametersSourceRange();
// This deletes the extra arguments.
Call->shrinkNumArgs(NumParams);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153267.532610.patch
Type: text/x-patch
Size: 3235 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230619/54fc5141/attachment.bin>
More information about the cfe-commits
mailing list