add support for conditional expressions in Expr::HasSideEffects()
This fixes a bug in __builtin_object_size() codegen llvm-svn: 160191
This commit is contained in:
parent
72db6d04e1
commit
e61e9dbf73
|
@ -2323,6 +2323,9 @@ public:
|
|||
{ return Visit(E->getLHS()) || Visit(E->getRHS()); }
|
||||
bool VisitChooseExpr(const ChooseExpr *E)
|
||||
{ return Visit(E->getChosenSubExpr(Ctx)); }
|
||||
bool VisitAbstractConditionalOperator(const AbstractConditionalOperator *E)
|
||||
{ return Visit(E->getCond()) || Visit(E->getTrueExpr())
|
||||
|| Visit(E->getFalseExpr()); }
|
||||
bool VisitCastExpr(const CastExpr *E) { return Visit(E->getSubExpr()); }
|
||||
bool VisitBinAssign(const BinaryOperator *E) { return true; }
|
||||
bool VisitCompoundAssignOperator(const BinaryOperator *E) { return true; }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm %s -o - 2>&1 | FileCheck %s
|
||||
|
||||
#define strcpy(dest, src) \
|
||||
((__builtin_object_size(dest, 0) != -1ULL) \
|
||||
|
@ -127,6 +127,7 @@ void test16() {
|
|||
strcpy(gp += 1, "Hi there");
|
||||
}
|
||||
|
||||
// CHECK: @test17
|
||||
void test17() {
|
||||
// CHECK: store i32 -1
|
||||
gi = __builtin_object_size(gp++, 0);
|
||||
|
@ -137,3 +138,11 @@ void test17() {
|
|||
// CHECK: store i32 0
|
||||
gi = __builtin_object_size(gp++, 3);
|
||||
}
|
||||
|
||||
// CHECK: @test18
|
||||
unsigned test18(int cond) {
|
||||
int a[4], b[4];
|
||||
// CHECK: phi i32*
|
||||
// CHECK: call i64 @llvm.objectsize.i64
|
||||
return __builtin_object_size(cond ? a : b, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue