forked from OSchip/llvm-project
emit padding as undef values, take 2
merge also a few tests I had here for this feature, and FileCheck'ize one file llvm-svn: 101535
This commit is contained in:
parent
4d273f4519
commit
5863c999e7
|
@ -259,7 +259,7 @@ void ConstStructBuilder::AppendPadding(uint64_t NumBytes) {
|
|||
if (NumBytes > 1)
|
||||
Ty = llvm::ArrayType::get(Ty, NumBytes);
|
||||
|
||||
llvm::Constant *C = llvm::Constant::getNullValue(Ty);
|
||||
llvm::Constant *C = llvm::UndefValue::get(Ty);
|
||||
Elements.push_back(C);
|
||||
assert(getAlignment(C) == 1 && "Padding must have 1 byte alignment!");
|
||||
|
||||
|
@ -297,7 +297,7 @@ void ConstStructBuilder::ConvertStructToPacked() {
|
|||
if (NumBytes > 1)
|
||||
Ty = llvm::ArrayType::get(Ty, NumBytes);
|
||||
|
||||
llvm::Constant *Padding = llvm::Constant::getNullValue(Ty);
|
||||
llvm::Constant *Padding = llvm::UndefValue::get(Ty);
|
||||
PackedElements.push_back(Padding);
|
||||
ElementOffsetInBytes += getSizeInBytes(Padding);
|
||||
}
|
||||
|
@ -537,7 +537,7 @@ public:
|
|||
if (NumPadBytes > 1)
|
||||
Ty = llvm::ArrayType::get(Ty, NumPadBytes);
|
||||
|
||||
Elts.push_back(llvm::Constant::getNullValue(Ty));
|
||||
Elts.push_back(llvm::UndefValue::get(Ty));
|
||||
Types.push_back(Ty);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// CHECK: @test1.x = internal constant [12 x i32] [i32 1
|
||||
// CHECK: @test2.x = internal constant [13 x i32] [i32 1,
|
||||
// CHECK: @test5w = global %0 { i32 2, [4 x i8] zeroinitializer }
|
||||
// CHECK: @test5w = global %0 { i32 2, [4 x i8] undef }
|
||||
// CHECK: @test5y = global %union.test5u { double 7.300000e+0{{[0]*}}1 }
|
||||
|
||||
// CHECK: @test6.x = internal constant %struct.SelectDest { i8 1, i8 2, i32 3, i32 0 }
|
||||
|
|
|
@ -1,22 +1,34 @@
|
|||
// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o %t
|
||||
// RUN: grep "{ i8\* null, i32 1024 }" %t
|
||||
// RUN: grep "i32 0, i32 22" %t
|
||||
// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
|
||||
|
||||
struct foo {
|
||||
void *a;
|
||||
int b;
|
||||
};
|
||||
|
||||
// CHECK: @u = global %union.anon zeroinitializer
|
||||
union { int i; float f; } u = { };
|
||||
|
||||
// CHECK: @u2 = global %0 { i32 0, [4 x i8] undef }
|
||||
union { int i; double f; } u2 = { };
|
||||
|
||||
// CHECK: @b = global [2 x i32] [i32 0, i32 22]
|
||||
int b[2] = {
|
||||
[1] = 22
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
union { int i; float f; } u2 = { };
|
||||
static struct foo foo = {
|
||||
.b = 1024,
|
||||
};
|
||||
}
|
||||
// CHECK: internal global %struct.foo { i8* null, i32 1024 }
|
||||
static struct foo foo = {
|
||||
.b = 1024,
|
||||
};
|
||||
|
||||
int b[2] = {
|
||||
[1] 22
|
||||
};
|
||||
// CHECK: bitcast %union.anon* %u2
|
||||
// CHECK: call void @llvm.memset
|
||||
union { int i; float f; } u2 = { };
|
||||
|
||||
// CHECK-NOT: call void @llvm.memset
|
||||
union { int i; float f; } u3;
|
||||
|
||||
// CHECK: ret i32
|
||||
}
|
||||
|
|
|
@ -12,19 +12,28 @@ int c __attribute__((weak))= 0;
|
|||
// CHECK: @c = weak global i32 0
|
||||
|
||||
|
||||
|
||||
// Since this is marked const, it should get weak_odr linkage, since all
|
||||
// definitions have to be the same.
|
||||
// CHECK: @d = weak_odr constant i32 0
|
||||
const int d __attribute__((weak))= 0;
|
||||
|
||||
// PR6168 "too many undefs"
|
||||
struct ManyFields {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
char d;
|
||||
int e;
|
||||
int f;
|
||||
};
|
||||
|
||||
// CHECK: global %0 { i32 1, i32 2, i32 0, i8 0, i32 0, i32 0 }
|
||||
struct ManyFields FewInits = {1, 2};
|
||||
|
||||
|
||||
// NOTE: tentative definitions are processed at the end of the translation unit.
|
||||
|
||||
// This shouldn't be emitted as common because it has an explicit section.
|
||||
// rdar://7119244
|
||||
int b __attribute__((section("foo")));
|
||||
|
||||
// CHECK: @b = global i32 0, section "foo"
|
||||
|
||||
int b __attribute__((section("foo")));
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
// RUN: %clang_cc1 -emit-llvm %s -o - -triple i686-pc-linux-gnu | FileCheck %s
|
||||
|
||||
// Make sure we generate something sane instead of a ptrtoint
|
||||
// CHECK: bitcast (%0* @r to %union.x*), [4 x i8] undef
|
||||
union x {long long b;union x* a;} r = {.a = &r};
|
||||
|
||||
|
||||
// CHECK: bitcast (%0* @r to %union.x*), [4 x i8] zero
|
||||
// CHECK: global %1 { [3 x i8] zeroinitializer, [5 x i8] undef }
|
||||
union z {
|
||||
char a[3];
|
||||
long long b;
|
||||
};
|
||||
union z y = {};
|
||||
|
|
Loading…
Reference in New Issue