diff options
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 12 | ||||
-rw-r--r-- | test/CodeGenCXX/expr.cpp | 4 |
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 2c2b76f2e4..5809d1e70d 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -1120,8 +1120,16 @@ LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { MakeQualifiers(ExprTy)); } case UnaryOperator::PreInc: - case UnaryOperator::PreDec: - return EmitUnsupportedLValue(E, "pre-inc/dec expression"); + case UnaryOperator::PreDec: { + LValue LV = EmitLValue(E->getSubExpr()); + bool isInc = E->getOpcode() == UnaryOperator::PreInc; + + if (E->getType()->isAnyComplexType()) + EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/); + else + EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/); + return LV; + } } } diff --git a/test/CodeGenCXX/expr.cpp b/test/CodeGenCXX/expr.cpp index 6d641dcb62..d92cfb46a4 100644 --- a/test/CodeGenCXX/expr.cpp +++ b/test/CodeGenCXX/expr.cpp @@ -10,3 +10,7 @@ void test1() { char *xpto; while ( true && xpto[0] ); } + +// PR5514 +int a; +void test2() { ++a+=10; } |