aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaExpr.cpp2
-rw-r--r--test/Sema/expr-comma.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 4f085d2e43..0e70c82637 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1894,7 +1894,7 @@ inline QualType Sema::CheckAssignmentOperands( // C99 6.5.16.1
inline QualType Sema::CheckCommaOperands( // C99 6.5.17
Expr *&lex, Expr *&rex, SourceLocation loc) {
- UsualUnaryConversions(rex);
+ // Comma does not perform unary or binary promotions.
return rex->getType();
}
diff --git a/test/Sema/expr-comma.c b/test/Sema/expr-comma.c
new file mode 100644
index 0000000000..7a601e9b3d
--- /dev/null
+++ b/test/Sema/expr-comma.c
@@ -0,0 +1,11 @@
+// RUN: clang %s -fsyntax-only -verify
+// rdar://6095180
+
+#include <assert.h>
+struct s { char c[17]; };
+extern struct s foo (void);
+
+// sizeof 'c' should be 17, not sizeof(char*).
+int X[sizeof(0, (foo().c)) == 17 ? 1 : -1];
+
+