diff options
| author | John McCall <rjmccall@apple.com> | 2011-02-26 08:07:02 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2011-02-26 08:07:02 +0000 |
| commit | 53fcbd2718222d3c2abef0a39cf7bb73f2d63b8f (patch) | |
| tree | 3f1e072918e6e59d4614a9176799273fad17894e /clang/test | |
| parent | bebede4d336a709d237fdbf20ddd5f2eac51101b (diff) | |
| download | bcm5719-llvm-53fcbd2718222d3c2abef0a39cf7bb73f2d63b8f.tar.gz bcm5719-llvm-53fcbd2718222d3c2abef0a39cf7bb73f2d63b8f.zip | |
Pretty up the emission of field l-values and use volatile and TBAA when
loading references as part of that. Use 'char' TBAA when accessing
(immediate!) fields of a may_alias struct; fixes PR9307.
llvm-svn: 126540
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/may-alias.c | 13 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp | 4 |
2 files changed, 13 insertions, 4 deletions
diff --git a/clang/test/CodeGen/may-alias.c b/clang/test/CodeGen/may-alias.c index f3ea792da36..6171be763dc 100644 --- a/clang/test/CodeGen/may-alias.c +++ b/clang/test/CodeGen/may-alias.c @@ -8,12 +8,21 @@ typedef int __attribute__((may_alias)) aliasing_int; void test0(aliasing_int *ai, int *i) { +// CHECK: store i32 0, i32* %{{.*}}, !tbaa !1 *ai = 0; +// CHECK: store i32 1, i32* %{{.*}}, !tbaa !3 *i = 1; } -// CHECK: store i32 0, i32* %{{.*}}, !tbaa !1 -// CHECK: store i32 1, i32* %{{.*}}, !tbaa !3 +// PR9307 +struct Test1 { int x; }; +struct Test1MA { int x; } __attribute__((may_alias)); +void test1(struct Test1MA *p1, struct Test1 *p2) { + // CHECK: store i32 2, i32* {{%.*}}, !tbaa !1 + p1->x = 2; + // CHECK: store i32 3, i32* {{%.*}}, !tbaa !3 + p2->x = 3; +} // CHECK: !0 = metadata !{metadata !"any pointer", metadata !1} // CHECK: !1 = metadata !{metadata !"omnipotent char", metadata !2} diff --git a/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp b/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp index d97a2ae366b..85e931b50c9 100644 --- a/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp +++ b/clang/test/CodeGenCXX/anonymous-union-member-initializer.cpp @@ -84,11 +84,11 @@ namespace test3 { // CHECK: define void @_ZN5test31AC2Ev( // CHECK: [[THIS:%.*]] = load // CHECK-NEXT: [[UNION:%.*]] = getelementptr inbounds {{.*}} [[THIS]], i32 0, i32 0 - // CHECK-NEXT: [[STRUCT:%.*]] = getelementptr inbounds {{.*}} [[UNION]], i32 0, i32 0 + // CHECK-NEXT: [[STRUCT:%.*]] = bitcast {{.*}}* [[UNION]] to // CHECK-NEXT: [[CALLBACK:%.*]] = getelementptr inbounds {{.*}} [[STRUCT]], i32 0, i32 0 // CHECK-NEXT: store void (i8*)* null, void (i8*)** [[CALLBACK]] // CHECK-NEXT: [[UNION:%.*]] = getelementptr inbounds {{.*}} [[THIS]], i32 0, i32 0 - // CHECK-NEXT: [[STRUCT:%.*]] = getelementptr inbounds {{.*}} [[UNION]], i32 0, i32 0 + // CHECK-NEXT: [[STRUCT:%.*]] = bitcast {{.*}}* [[UNION]] to // CHECK-NEXT: [[CVALUE:%.*]] = getelementptr inbounds {{.*}} [[STRUCT]], i32 0, i32 1 // CHECK-NEXT: store i8* null, i8** [[CVALUE]] } |

