diff options
author | Ivan A. Kosarev <ikosarev@accesssoftek.com> | 2017-10-30 11:49:31 +0000 |
---|---|---|
committer | Ivan A. Kosarev <ikosarev@accesssoftek.com> | 2017-10-30 11:49:31 +0000 |
commit | 9f9d157517812d2be68ac72ddf3c3db7c607a527 (patch) | |
tree | 383804591f3d1ebc7b1402bae7ad9c2a2c38a4ec /clang/test/CodeGen/tbaa-reference.cpp | |
parent | f5142bf97f82e8eaebcb61767ab426f8e476595a (diff) | |
download | bcm5719-llvm-9f9d157517812d2be68ac72ddf3c3db7c607a527.tar.gz bcm5719-llvm-9f9d157517812d2be68ac72ddf3c3db7c607a527.zip |
[CodeGen] Generate TBAA info for reference loads
Differential Revision: https://reviews.llvm.org/D39177
llvm-svn: 316896
Diffstat (limited to 'clang/test/CodeGen/tbaa-reference.cpp')
-rw-r--r-- | clang/test/CodeGen/tbaa-reference.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/clang/test/CodeGen/tbaa-reference.cpp b/clang/test/CodeGen/tbaa-reference.cpp index aae6a82a8f1..ecdbfbee7f1 100644 --- a/clang/test/CodeGen/tbaa-reference.cpp +++ b/clang/test/CodeGen/tbaa-reference.cpp @@ -6,24 +6,32 @@ struct S; struct B { S &s; - B(S &s) : s(s) {} - void bar(); + B(S &s); + S &get(); }; -void foo(S &s) { - B b(s); - b.bar(); -} - -// CHECK-LABEL: _Z3fooR1S -// Check initialization of the reference parameter in foo(). -// CHECK: store %struct.S* {{.*}}, %struct.S** {{.*}}, !tbaa [[TAG_pointer:!.*]] -// +B::B(S &s) : s(s) { // CHECK-LABEL: _ZN1BC2ER1S -// TODO: Check loading of the reference parameter in B::B(S&). -// Check initialization of B::s in B::B(S&). +// Check initialization of the reference parameter. +// CHECK: store %struct.S* {{.*}}, %struct.S** {{.*}}, !tbaa [[TAG_pointer:!.*]] + +// Check loading of the reference parameter. +// CHECK: load %struct.S*, %struct.S** {{.*}}, !tbaa [[TAG_pointer]] + +// Check initialization of the reference member. // CHECK: store %struct.S* {{.*}}, %struct.S** {{.*}}, !tbaa [[TAG_pointer]] -// +} + +S &B::get() { +// CHECK-LABEL: _ZN1B3getEv +// Check that we access the reference as a structure member. +// CHECK: load %struct.S*, %struct.S** {{.*}}, !tbaa [[TAG_B_s:!.*]] + return s; +} + // CHECK-DAG: [[TAG_pointer]] = !{[[TYPE_pointer:!.*]], [[TYPE_pointer]], i64 0} +// CHECK-DAG: [[TAG_B_s]] = !{[[TYPE_B:!.*]], [[TYPE_pointer]], i64 0} +// +// CHECK-DAG: [[TYPE_B]] = !{!"_ZTS1B", [[TYPE_pointer]], i64 0} // CHECK-DAG: [[TYPE_pointer]] = !{!"any pointer", [[TYPE_char:!.*]], i64 0} // CHECK-DAG: [[TYPE_char]] = !{!"omnipotent char", {{!.*}}, i64 0} |