[cfe-commits] r54058 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/Sema/expr-comma.c

Chris Lattner sabre at nondot.org
Fri Jul 25 13:54:07 PDT 2008


Author: lattner
Date: Fri Jul 25 15:54:07 2008
New Revision: 54058

URL: http://llvm.org/viewvc/llvm-project?rev=54058&view=rev
Log:
In c99 mode, comma does do function/array promotion even though 
it does not do unary promotions (like short->int).

Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/test/Sema/expr-comma.c

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=54058&r1=54057&r2=54058&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Fri Jul 25 15:54:07 2008
@@ -1894,7 +1894,9 @@
 
 inline QualType Sema::CheckCommaOperands( // C99 6.5.17
   Expr *&lex, Expr *&rex, SourceLocation loc) {
-  // Comma does not perform unary or binary promotions.
+  
+  // Comma performs lvalue conversion (C99 6.3.2.1), but not unary conversions.
+  DefaultFunctionArrayConversion(rex);
   return rex->getType();
 }
 

Modified: cfe/trunk/test/Sema/expr-comma.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/expr-comma.c?rev=54058&r1=54057&r2=54058&view=diff

==============================================================================
--- cfe/trunk/test/Sema/expr-comma.c (original)
+++ cfe/trunk/test/Sema/expr-comma.c Fri Jul 25 15:54:07 2008
@@ -1,11 +1,18 @@
-// RUN: clang %s -fsyntax-only -verify
+// RUN: clang %s -fsyntax-only -verify -std=c99
 // rdar://6095180
 
 #include <assert.h>
 struct s { char c[17]; };
-extern struct s foo (void);
+extern struct s foo(void);
 
-// sizeof 'c' should be 17, not sizeof(char*).
-int X[sizeof(0, (foo().c)) == 17 ? 1 : -1];
+struct s a, b, c;
 
+int A[sizeof((foo().c)) == 17 ? 1 : -1];
+int B[sizeof((a.c)) == 17 ? 1 : -1];
+
+
+// comma does array/function promotion in c99.
+int X[sizeof(0, (foo().c)) == sizeof(char*) ? 1 : -1];
+int Y[sizeof(0, (a,b).c) == sizeof(char*) ? 1 : -1];
+int Z[sizeof(0, (a=b).c) == sizeof(char*) ? 1 : -1];
 





More information about the cfe-commits mailing list