]> granicus.if.org Git - clang/commitdiff
Fix a regression from my fix to PR2631. Fixes PR2692.
authorEli Friedman <eli.friedman@gmail.com>
Wed, 20 Aug 2008 22:17:17 +0000 (22:17 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 20 Aug 2008 22:17:17 +0000 (22:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55083 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/Sema/va_arg_x86_64.c

index 4781ffb57823a38bb8af6b9ae450e1be0cfb294a..2bb3983acf8c128af4244c58c5681da311812742 100644 (file)
@@ -2613,6 +2613,8 @@ Sema::ExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
   // a pointer for va_arg.
   if (VaListType->isArrayType())
     VaListType = Context.getArrayDecayedType(VaListType);
+  // Make sure the input expression also decays appropriately.
+  UsualUnaryConversions(E);
 
   if (CheckAssignmentConstraints(VaListType, E->getType()) != Compatible)
     return Diag(E->getLocStart(),
index 86511349c39846d11c4c8e28d9c9308020f44568..3e51b8628c3d13dc2645baa931b937d30e25a485 100644 (file)
@@ -1,6 +1,16 @@
 // RUN: clang -fsyntax-only -verify -triple=x86_64-unknown-freebsd7.0 %s
 
+// PR2631
 char* foo(char *fmt, __builtin_va_list ap)
 {
   return __builtin_va_arg((ap), char *);
 }
+
+// PR2692
+typedef __builtin_va_list va_list;
+static char *f (char * (*g) (char **, int), char **p, ...) {
+    char *s;
+    va_list v;
+    s = g (p, __builtin_va_arg(v, int));
+}
+