summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/object-size.c
diff options
context:
space:
mode:
authorGeorge Burgess IV <george.burgess.iv@gmail.com>2017-02-10 22:52:29 +0000
committerGeorge Burgess IV <george.burgess.iv@gmail.com>2017-02-10 22:52:29 +0000
commitf9013bf8f0ec73e9b6fe298cd02e0dd7032ded06 (patch)
treef2a9062fbe7828196dd5230cc27fd93b4045d477 /clang/test/CodeGen/object-size.c
parent4b3ea2d776bfd5019fb1e944a8527f24434f81d3 (diff)
downloadbcm5719-llvm-f9013bf8f0ec73e9b6fe298cd02e0dd7032ded06.tar.gz
bcm5719-llvm-f9013bf8f0ec73e9b6fe298cd02e0dd7032ded06.zip
Don't let EvaluationModes dictate whether an invalid base is OK
What we want to actually control this behavior is something more local than an EvalutationMode. Please see the linked revision for more discussion on why/etc. This fixes PR31843. Differential Revision: https://reviews.llvm.org/D29469 llvm-svn: 294800
Diffstat (limited to 'clang/test/CodeGen/object-size.c')
-rw-r--r--clang/test/CodeGen/object-size.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/CodeGen/object-size.c b/clang/test/CodeGen/object-size.c
index fe4c1859a27..a824f554b5f 100644
--- a/clang/test/CodeGen/object-size.c
+++ b/clang/test/CodeGen/object-size.c
@@ -549,3 +549,22 @@ int incomplete_and_function_types() {
// CHECK: store i32 0
gi = __builtin_object_size(incomplete_char_array, 3);
}
+
+// Flips between the pointer and lvalue evaluator a lot.
+void deeply_nested() {
+ struct {
+ struct {
+ struct {
+ struct {
+ int e[2];
+ char f; // Inhibit our writing-off-the-end check
+ } d[2];
+ } c[2];
+ } b[2];
+ } *a;
+
+ // CHECK: store i32 4
+ gi = __builtin_object_size(&a->b[1].c[1].d[1].e[1], 1);
+ // CHECK: store i32 4
+ gi = __builtin_object_size(&a->b[1].c[1].d[1].e[1], 3);
+}
OpenPOWER on IntegriCloud