vitalybuka updated this revision to Diff 254728. vitalybuka added a comment.
remove debug dump Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77374/new/ https://reviews.llvm.org/D77374 Files: clang/lib/CodeGen/CGExpr.cpp clang/test/CodeGen/bounds-checking.c clang/test/CodeGen/bounds-checking.cpp Index: clang/test/CodeGen/bounds-checking.cpp =================================================================== --- clang/test/CodeGen/bounds-checking.cpp +++ clang/test/CodeGen/bounds-checking.cpp @@ -98,3 +98,19 @@ return s->a[i]; // CHECK: } } + +// CHECK-LABEL: define {{.*}} @_Z10SFlexComma +int SFlexComma(struct SFlex *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} + +// CHECK-LABEL: define {{.*}} @_Z7S1Comma +int S1Comma(struct S1 *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return ((s->t, (1, s->a)))[i]; + // CHECK: } +} Index: clang/test/CodeGen/bounds-checking.c =================================================================== --- clang/test/CodeGen/bounds-checking.c +++ clang/test/CodeGen/bounds-checking.c @@ -100,3 +100,19 @@ return s->a[i]; // CHECK: } } + +// CHECK-LABEL: define {{.*}} @SFlexComma +int SFlexComma(struct SFlex *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} + +// CHECK-LABEL: define {{.*}} @S1Comma +int S1Comma(struct S1 *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} Index: clang/lib/CodeGen/CGExpr.cpp =================================================================== --- clang/lib/CodeGen/CGExpr.cpp +++ clang/lib/CodeGen/CGExpr.cpp @@ -879,6 +879,13 @@ E = E->IgnoreParens(); + while (const BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { + if (!BO->isCommaOp()) + break; + E = BO->getRHS(); + E = E->IgnoreParens(); + } + // A flexible array member must be the last member in the class. if (const auto *ME = dyn_cast<MemberExpr>(E)) { // FIXME: If the base type of the member expr is not FD->getParent(),
Index: clang/test/CodeGen/bounds-checking.cpp =================================================================== --- clang/test/CodeGen/bounds-checking.cpp +++ clang/test/CodeGen/bounds-checking.cpp @@ -98,3 +98,19 @@ return s->a[i]; // CHECK: } } + +// CHECK-LABEL: define {{.*}} @_Z10SFlexComma +int SFlexComma(struct SFlex *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} + +// CHECK-LABEL: define {{.*}} @_Z7S1Comma +int S1Comma(struct S1 *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return ((s->t, (1, s->a)))[i]; + // CHECK: } +} Index: clang/test/CodeGen/bounds-checking.c =================================================================== --- clang/test/CodeGen/bounds-checking.c +++ clang/test/CodeGen/bounds-checking.c @@ -100,3 +100,19 @@ return s->a[i]; // CHECK: } } + +// CHECK-LABEL: define {{.*}} @SFlexComma +int SFlexComma(struct SFlex *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} + +// CHECK-LABEL: define {{.*}} @S1Comma +int S1Comma(struct S1 *s, int i) { + // a and b are treated as flexible array members. + // CHECK-NOT: @llvm.trap + return (s->t, s->a)[i]; + // CHECK: } +} Index: clang/lib/CodeGen/CGExpr.cpp =================================================================== --- clang/lib/CodeGen/CGExpr.cpp +++ clang/lib/CodeGen/CGExpr.cpp @@ -879,6 +879,13 @@ E = E->IgnoreParens(); + while (const BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { + if (!BO->isCommaOp()) + break; + E = BO->getRHS(); + E = E->IgnoreParens(); + } + // A flexible array member must be the last member in the class. if (const auto *ME = dyn_cast<MemberExpr>(E)) { // FIXME: If the base type of the member expr is not FD->getParent(),
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits