]> granicus.if.org Git - clang/commitdiff
PR5462: Don't run off the edge of the argument array for vararg handling
authorEli Friedman <eli.friedman@gmail.com>
Sat, 14 Nov 2009 04:43:10 +0000 (04:43 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 14 Nov 2009 04:43:10 +0000 (04:43 +0000)
when there are more parameters in the prototype than arguments to the call.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88759 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/SemaCXX/vararg-default-arg.cpp [new file with mode: 0644]

index f20b37d90cdcfa30bc99a6d1539bb83135a4af9e..b311fda2d3c4f009c7b29f37b39ef4d5b1e7c34c 100644 (file)
@@ -2679,7 +2679,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
       CallType = VariadicMethod;
 
     // Promote the arguments (C99 6.5.2.2p7).
-    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
+    for (unsigned i = NumArgsInProto; i < NumArgs; i++) {
       Expr *Arg = Args[i];
       Invalid |= DefaultVariadicArgumentPromotion(Arg, CallType);
       Call->setArg(i, Arg);
diff --git a/test/SemaCXX/vararg-default-arg.cpp b/test/SemaCXX/vararg-default-arg.cpp
new file mode 100644 (file)
index 0000000..5ba0320
--- /dev/null
@@ -0,0 +1,10 @@
+// RUN: clang-cc %s -verify -fsyntax-only
+// PR5462
+
+void f1(void);
+void f2(const char * = __null, ...);
+
+void f1(void)
+{
+        f2();
+}