[PATCH] D38074: Fix TBAA information for reference accesses

Ivan A. Kosarev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 26 15:33:46 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL314209: Fix TBAA information for reference accesses (authored by kosarev).

Changed prior to commit:
  https://reviews.llvm.org/D38074?vs=116326&id=116721#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D38074

Files:
  cfe/trunk/lib/CodeGen/CodeGenTBAA.cpp
  cfe/trunk/test/CodeGen/tbaa-reference.cpp


Index: cfe/trunk/test/CodeGen/tbaa-reference.cpp
===================================================================
--- cfe/trunk/test/CodeGen/tbaa-reference.cpp
+++ cfe/trunk/test/CodeGen/tbaa-reference.cpp
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -triple x86_64-linux -O1 -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s
+//
+// Check that we generate correct TBAA information for reference accesses.
+
+struct S;
+
+struct B {
+  S &s;
+  B(S &s) : s(s) {}
+  void bar();
+};
+
+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:!.*]]
+//
+// CHECK-LABEL: _ZN1BC2ER1S
+// TODO: Check loading of the reference parameter in B::B(S&).
+// Check initialization of B::s in B::B(S&).
+// CHECK: store %struct.S* {{.*}}, %struct.S** {{.*}}, !tbaa [[TAG_pointer]]
+//
+// CHECK-DAG: [[TAG_pointer]] = !{[[TYPE_pointer:!.*]], [[TYPE_pointer]], i64 0}
+// CHECK-DAG: [[TYPE_pointer]] = !{!"any pointer", [[TYPE_char:!.*]], i64 0}
+// CHECK-DAG: [[TYPE_char]] = !{!"omnipotent char", {{!.*}}, i64 0}
Index: cfe/trunk/lib/CodeGen/CodeGenTBAA.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CodeGenTBAA.cpp
+++ cfe/trunk/lib/CodeGen/CodeGenTBAA.cpp
@@ -145,10 +145,10 @@
   if (Ty->isStdByteType())
     return MetadataCache[Ty] = getChar();
 
-  // Handle pointers.
+  // Handle pointers and references.
   // TODO: Implement C++'s type "similarity" and consider dis-"similar"
   // pointers distinct.
-  if (Ty->isPointerType())
+  if (Ty->isPointerType() || Ty->isReferenceType())
     return MetadataCache[Ty] = createTBAAScalarType("any pointer",
                                                     getChar());
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38074.116721.patch
Type: text/x-patch
Size: 1822 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170926/11639692/attachment.bin>


More information about the cfe-commits mailing list