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
diff --git a/clang/test/CodeGen/may-alias.c b/clang/test/CodeGen/may-alias.c
index f3ea792..6171be7 100644
--- a/clang/test/CodeGen/may-alias.c
+++ b/clang/test/CodeGen/may-alias.c
@@ -8,12 +8,21 @@
 
 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}