r326766 - [ExprConstant] Look through ExprWithCleanups for `allocsize`
George Burgess IV via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 5 23:42:36 PST 2018
Author: gbiv
Date: Mon Mar 5 23:42:36 2018
New Revision: 326766
URL: http://llvm.org/viewvc/llvm-project?rev=326766&view=rev
Log:
[ExprConstant] Look through ExprWithCleanups for `allocsize`
Modified:
cfe/trunk/lib/AST/ExprConstant.cpp
cfe/trunk/test/CodeGenCXX/alloc-size.cpp
Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=326766&r1=326765&r2=326766&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Mar 5 23:42:36 2018
@@ -133,7 +133,11 @@ namespace {
E = E->IgnoreParens();
// If we're doing a variable assignment from e.g. malloc(N), there will
- // probably be a cast of some kind. Ignore it.
+ // probably be a cast of some kind. In exotic cases, we might also see a
+ // top-level ExprWithCleanups. Ignore them either way.
+ if (const auto *EC = dyn_cast<ExprWithCleanups>(E))
+ E = EC->getSubExpr()->IgnoreParens();
+
if (const auto *Cast = dyn_cast<CastExpr>(E))
E = Cast->getSubExpr()->IgnoreParens();
Modified: cfe/trunk/test/CodeGenCXX/alloc-size.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/alloc-size.cpp?rev=326766&r1=326765&r2=326766&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/alloc-size.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/alloc-size.cpp Mon Mar 5 23:42:36 2018
@@ -88,3 +88,15 @@ int callMemberCalloc() {
// CHECK: ret i32 32
return __builtin_object_size(C().my_calloc(16, 2), 0);
}
+
+struct D {
+ ~D();
+ void *my_malloc(int N) __attribute__((alloc_size(2)));
+};
+
+// CHECK-LABEL: define i32 @_Z20callExprWithCleanupsv
+int callExprWithCleanups() {
+ int *const p = (int *)D().my_malloc(3);
+ // CHECK: ret i32 3
+ return __builtin_object_size(p, 0);
+}
More information about the cfe-commits
mailing list