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 | }; |
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 | |