From bc6079684c639f2333a17cf5bd75602358e1cbb5 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Thu, 23 Aug 2007 22:06:40 +0000 Subject: [PATCH] Support '~' for complex conjugation. This is a GCC extension. This following now compiles without error... _Complex unsigned X, Y; _Complex double x, y; void test2(int c) { X = ~Y; x = ~y; } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41341 91177308-0d34-0410-b5e6-96231b3b80d8 --- Sema/SemaExpr.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index f6d00070c4..03f5d7f897 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -1256,7 +1256,8 @@ QualType Sema::CheckIncrementDecrementOperand(Expr *op, SourceLocation OpLoc) { QualType resType = op->getType(); assert(!resType.isNull() && "no type for increment/decrement expression"); - // C99 6.5.2.4p1 + // C99 6.5.2.4p1: C99 does not support ++/-- on complex types. + // We allow complex as a GCC extension. if (const PointerType *pt = dyn_cast(resType)) { if (!pt->getPointeeType()->isObjectType()) { // C99 6.5.2.4p2, 6.5.6p2 Diag(OpLoc, diag::err_typecheck_arithmetic_incomplete_type, @@ -1264,7 +1265,6 @@ QualType Sema::CheckIncrementDecrementOperand(Expr *op, SourceLocation OpLoc) { return QualType(); } } 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(); @@ -1555,7 +1555,9 @@ Action::ExprResult Sema::ParseUnaryOp(SourceLocation OpLoc, tok::TokenKind Op, case UnaryOperator::Not: // bitwise complement UsualUnaryConversions(Input); resultType = Input->getType(); - if (!resultType->isIntegerType()) // C99 6.5.3.3p1 + // C99 6.5.3.3p1. C99 does not support '~' for complex conjugation. + // We allow complex as a GCC extension. + if (!resultType->isIntegerType() && !resultType->isComplexType()) return Diag(OpLoc, diag::err_typecheck_unary_expr, resultType.getAsString()); break; -- 2.40.0