diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2017-02-10 22:52:29 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2017-02-10 22:52:29 +0000 |
commit | f9013bf8f0ec73e9b6fe298cd02e0dd7032ded06 (patch) | |
tree | f2a9062fbe7828196dd5230cc27fd93b4045d477 /clang/test/CodeGen/object-size.c | |
parent | 4b3ea2d776bfd5019fb1e944a8527f24434f81d3 (diff) | |
download | bcm5719-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.c | 19 |
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); +} |