From: Steve Naroff Date: Thu, 23 Aug 2007 21:37:33 +0000 (+0000) Subject: Remove a FIXME, allowing ++/-- on Complex types (a GCC extension). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd10e02a414c04bff431ba5e749385a91b5480a3;p=clang Remove a FIXME, allowing ++/-- on Complex types (a GCC extension). Now, the following test case succeeds... _Complex double x, y; void test2(int c) { ++x; } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41335 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index 7fc6422ab7..6d5d852719 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -1262,14 +1262,14 @@ QualType Sema::CheckIncrementDecrementOperand(Expr *op, SourceLocation OpLoc) { resType.getAsString(), op->getSourceRange()); return QualType(); } - } else if (!resType->isRealType()) { - // FIXME: Allow Complex as a GCC extension. + } else if (!resType->isRealType() && !resType->isComplexType()) { + // Allowing Complex is a GCC extension. Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement, resType.getAsString(), op->getSourceRange()); return QualType(); } - // At this point, we know we have a real or pointer type. Now make sure - // the operand is a modifiable lvalue. + // At this point, we know we have a real, complex or pointer type. + // Now make sure the operand is a modifiable lvalue. Expr::isModifiableLvalueResult mlval = op->isModifiableLvalue(); if (mlval != Expr::MLV_Valid) { // FIXME: emit a more precise diagnostic...