Fix a bunch of really nasty bugs in how we compute alignment for reference lvalues.  PR11376.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144745 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/references.cpp b/test/CodeGenCXX/references.cpp
index 4bbc251..505f418 100644
--- a/test/CodeGenCXX/references.cpp
+++ b/test/CodeGenCXX/references.cpp
@@ -1,10 +1,16 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin -verify -emit-llvm -o - %s | FileCheck %s
 void t1() {
+  // CHECK: define void @_Z2t1v
+  // CHECK: [[REFLOAD:%.*]] = load i32** @a, align 8
+  // CHECK: load i32* [[REFLOAD]], align 4
   extern int& a;
   int b = a; 
 }
 
 void t2(int& a) {
+  // CHECK: define void @_Z2t2Ri
+  // CHECK: [[REFLOAD2:%.*]] = load i32** {{.*}}, align 8
+  // CHECK: load i32* [[REFLOAD2]], align 4
   int b = a;
 }
 
@@ -297,3 +303,11 @@
     // CHECK-NEXT: ret void
   }
 }
+
+namespace N6 {
+  extern struct x {char& x;}y;
+  int a() { return y.x; }
+  // CHECK: define i32 @_ZN2N61aEv
+  // CHECK: [[REFLOAD3:%.*]] = load i8** getelementptr inbounds (%"struct.N6::x"* @_ZN2N61yE, i32 0, i32 0), align 8
+  // CHECK: %0 = load i8* [[REFLOAD3]], align 1
+}