diff options
author | John McCall <rjmccall@apple.com> | 2010-10-12 07:14:40 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-10-12 07:14:40 +0000 |
commit | 73d3618223f2081eedcee2dbc4b6f89c4e942214 (patch) | |
tree | fd8bf87d69fd2a5395274cd07aa511625c83fcbc /clang/lib/Sema/SemaExpr.cpp | |
parent | 7cd5cda6bb3e7356392fc6f80ec75d27547029d1 (diff) | |
download | bcm5719-llvm-73d3618223f2081eedcee2dbc4b6f89c4e942214.tar.gz bcm5719-llvm-73d3618223f2081eedcee2dbc4b6f89c4e942214.zip |
C's comma operator performs lvalue conversion on both its operands;
require them to have complete types.
llvm-svn: 116297
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 52ab62be020..514d9ba3f2f 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6164,13 +6164,18 @@ QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS, QualType Sema::CheckCommaOperands(Expr *LHS, Expr *&RHS, SourceLocation Loc) { DiagnoseUnusedExprResult(LHS); - // Comma performs lvalue conversion (C99 6.3.2.1), but not unary conversions. - // C++ does not perform this conversion (C++ [expr.comma]p1). - if (!getLangOptions().CPlusPlus) - DefaultFunctionArrayLvalueConversion(RHS); + // C's comma performs lvalue conversion (C99 6.3.2.1) on both its + // operands, but not unary promotions. + // C++'s comma does not do any conversions at all (C++ [expr.comma]p1). + if (!getLangOptions().CPlusPlus) { + DefaultFunctionArrayLvalueConversion(LHS); + if (!LHS->getType()->isVoidType()) + RequireCompleteType(Loc, LHS->getType(), diag::err_incomplete_type); - // FIXME: Check that RHS type is complete in C mode (it's legal for it to be - // incomplete in C++). + DefaultFunctionArrayLvalueConversion(RHS); + if (!RHS->getType()->isVoidType()) + RequireCompleteType(Loc, RHS->getType(), diag::err_incomplete_type); + } return RHS->getType(); } |