Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGenCXX/2009-12-23-MissingSext.cpp
// RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s | // RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s | ||||
// The store of p.y into the temporary was not | // The store of p.y into the temporary was not | ||||
// getting extended to 32 bits, so uninitialized | // getting extended to 32 bits, so uninitialized | ||||
// bits of the temporary were used. 7366161. | // bits of the temporary were used. 7366161. | ||||
struct foo { | struct foo { | ||||
char x:8; | char x1:3; | ||||
char x2:5; | |||||
signed int y:24; | signed int y:24; | ||||
}; | }; | ||||
int bar(struct foo p, int x) { | int bar(struct foo p, int x) { | ||||
// CHECK: bar | // CHECK: bar | ||||
// CHECK: %[[val:.*]] = load i32, i32* {{.*}} | // CHECK: %[[val:.*]] = load i32, i32* {{.*}} | ||||
// CHECK-NEXT: ashr i32 %[[val]] | // CHECK-NEXT: ashr i32 %[[val]] | ||||
// CHECK: = load i32, i32* {{.*}} | // CHECK: = load i32, i32* {{.*}} | ||||
// CHECK: = load i32, i32* {{.*}} | // CHECK: = load i32, i32* {{.*}} | ||||
// CHECK: %[[val:.*]] = load i32, i32* {{.*}} | // CHECK: %[[val:.*]] = load i32, i32* {{.*}} | ||||
// CHECK-NEXT: ashr i32 %[[val]] | // CHECK-NEXT: ashr i32 %[[val]] | ||||
x = (p.y > x ? x : p.y); | x = (p.y > x ? x : p.y); | ||||
return x; | return x; | ||||
// CHECK: ret | // CHECK: ret | ||||
} | } |