[cfe-commits] r64371 - in /cfe/trunk: lib/AST/Expr.cpp test/Sema/varargs.c

Daniel Dunbar daniel at zuster.org
Thu Feb 12 01:21:08 PST 2009


Author: ddunbar
Date: Thu Feb 12 03:21:08 2009
New Revision: 64371

URL: http://llvm.org/viewvc/llvm-project?rev=64371&view=rev
Log:
Fix va_arg bug noticed by Eli, __builtin_va_arg is not an l-value
designating an object.

Modified:
    cfe/trunk/lib/AST/Expr.cpp
    cfe/trunk/test/Sema/varargs.c

Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=64371&r1=64370&r2=64371&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Thu Feb 12 03:21:08 2009
@@ -565,7 +565,7 @@
   case PredefinedExprClass:
     return LV_Valid;
   case VAArgExprClass:
-    return LV_Valid;
+    return LV_NotObjectType;
   case CXXDefaultArgExprClass:
     return cast<CXXDefaultArgExpr>(this)->getExpr()->isLvalue(Ctx);
   case CXXConditionDeclExprClass:

Modified: cfe/trunk/test/Sema/varargs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/varargs.c?rev=64371&r1=64370&r2=64371&view=diff

==============================================================================
--- cfe/trunk/test/Sema/varargs.c (original)
+++ cfe/trunk/test/Sema/varargs.c Thu Feb 12 03:21:08 2009
@@ -52,3 +52,11 @@
   __builtin_va_end (authors);
 }
 
+void f7(int a, ...) {
+  __builtin_va_list ap;
+  __builtin_va_start(ap, a);
+  // FIXME: This error message is sub-par.
+  __builtin_va_arg(ap, int) = 1; // expected-error {{non-object type 'int' is not assignable}}
+  int *x = &__builtin_va_arg(ap, int); // expected-error {{address expression must be an lvalue or a function designator}}
+  __builtin_va_end(ap);
+}





More information about the cfe-commits mailing list