[cfe-commits] r40136 - in /cfe/trunk: Sema/SemaExpr.cpp test/Sema/arg-duplicate.c
Chris Lattner
sabre at nondot.org
Fri Jul 20 20:09:59 PDT 2007
Author: lattner
Date: Fri Jul 20 22:09:58 2007
New Revision: 40136
URL: http://llvm.org/viewvc/llvm-project?rev=40136&view=rev
Log:
Fix off-by-one error when emitting diagnostics. Also, make diagnostic
a bit nicer for people who pass lots of extra arguments to calls by
selecting them all instead of just the first one:
arg-duplicate.c:13:13: error: too many arguments to function
f3 (1, 1, 2, 3, 4); // expected-error {{too many arguments to function}}
^~~~~~~
This implements test/Sema/arg-duplicate.c, thanks to Neil for pointing
out this crash.
Added:
cfe/trunk/test/Sema/arg-duplicate.c
Modified:
cfe/trunk/Sema/SemaExpr.cpp
Modified: cfe/trunk/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/SemaExpr.cpp?rev=40136&r1=40135&r2=40136&view=diff
==============================================================================
--- cfe/trunk/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/Sema/SemaExpr.cpp Fri Jul 20 22:09:58 2007
@@ -409,9 +409,10 @@
Fn->getSourceRange());
else if (NumArgsInCall > NumArgsInProto) {
if (!proto->isVariadic()) {
- Diag(Args[NumArgsInProto+1]->getLocStart(),
+ Diag(Args[NumArgsInProto]->getLocStart(),
diag::err_typecheck_call_too_many_args, Fn->getSourceRange(),
- Args[NumArgsInProto+1]->getSourceRange());
+ SourceRange(Args[NumArgsInProto]->getLocStart(),
+ Args[NumArgsInCall-1]->getLocEnd()));
}
NumArgsToCheck = NumArgsInProto;
}
Added: cfe/trunk/test/Sema/arg-duplicate.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/arg-duplicate.c?rev=40136&view=auto
==============================================================================
--- cfe/trunk/test/Sema/arg-duplicate.c (added)
+++ cfe/trunk/test/Sema/arg-duplicate.c Fri Jul 20 22:09:58 2007
@@ -0,0 +1,15 @@
+// RUN: clang -parse-ast-check %s
+
+typedef int x;
+int f3(y, x,
+ x) // expected-error {{redefinition of parameter}}
+ int y, x,
+ x; // expected-error {{redefinition of parameter}}
+{
+ return x + y;
+}
+
+void f4(void) {
+ f3 (1, 1, 2, 3, 4); // expected-error {{too many arguments to function}}
+}
+
More information about the cfe-commits
mailing list