diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-03-20 05:53:45 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-03-20 05:53:45 +0000 |
| commit | 4c43e31d21f9921c3d4d7c1e3aa9cf5b41f71da8 (patch) | |
| tree | 4fe438692d0ab282818393d2098b05f0222cb5af /clang/test | |
| parent | e46b52a35f066bed7b20692a53606e483abc862e (diff) | |
| download | bcm5719-llvm-4c43e31d21f9921c3d4d7c1e3aa9cf5b41f71da8.tar.gz bcm5719-llvm-4c43e31d21f9921c3d4d7c1e3aa9cf5b41f71da8.zip | |
Evaluate: Fix a subtle bug in the pointer evaluator in which we would do an
expression computation in the wrong bit-width, and end up generating a totally
bogus array reference (_g0+8589934546).
- This showed up on Prolangs/cdecl.
llvm-svn: 99042
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/const-arithmetic.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/test/CodeGen/const-arithmetic.c b/clang/test/CodeGen/const-arithmetic.c new file mode 100644 index 00000000000..e12b4f6d92c --- /dev/null +++ b/clang/test/CodeGen/const-arithmetic.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +// CHECK: @g1 = global [2 x i8*] [i8* getelementptr (i8* getelementptr inbounds ([0 x %struct.anon]* @g0, i32 0, i32 0, i32 0), i64 -2), i8* getelementptr (i8* getelementptr inbounds ([0 x %struct.anon]* @g0, i32 0, i32 0, i32 0), i64 -46)], align 8 ; <[2 x i8*]*> [#uses=0] +// CHECK: @g2 = global [2 x i8*] [i8* getelementptr (i8* getelementptr inbounds ([0 x %struct.anon]* @g0, i32 0, i32 0, i32 0), i64 -2), i8* getelementptr (i8* getelementptr inbounds ([0 x %struct.anon]* @g0, i32 0, i32 0, i32 0), i64 -46)], align 8 ; <[2 x i8*]*> [#uses=0] + +extern struct { unsigned char a, b; } g0[]; +void *g1[] = {g0 + -1, g0 + -23 }; +void *g2[] = {g0 - 1, g0 - 23 }; |

