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