1 // RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s
2 // The store of p.y into the temporary was not
3 // getting extended to 32 bits, so uninitialized
4 // bits of the temporary were used.  7366161.
5 struct foo {
6   char x:8;
7   signed int y:24;
8 };
bar(struct foo p,int x)9 int bar(struct foo p, int x) {
10 // CHECK: bar
11 // CHECK: %[[val:.*]] = load i32, i32* {{.*}}
12 // CHECK-NEXT:          ashr i32 %[[val]]
13 // CHECK:             = load i32, i32* {{.*}}
14 // CHECK:             = load i32, i32* {{.*}}
15 // CHECK: %[[val:.*]] = load i32, i32* {{.*}}
16 // CHECK-NEXT:          ashr i32 %[[val]]
17   x = (p.y > x ? x : p.y);
18   return x;
19 // CHECK: ret
20 }
21