llvm-project/clang/test/CodeGen/debug-info-packed-struct.c
Douglas Katzman 3459ce2e5e Stop messing with the 'g' group of options in CompilerInvocation.
With this change, most 'g' options are rejected by CompilerInvocation.
They remain only as Driver options. The new way to request debug info
from cc1 is with "-debug-info-kind={line-tables-only|limited|standalone}"
and "-dwarf-version={2|3|4}". In the absence of a command-line option
to specify Dwarf version, the Toolchain decides it, rather than placing
Toolchain-specific logic in CompilerInvocation.

Also fix a bug in the Windows compatibility argument parsing
in which the "rightmost argument wins" principle failed.

Differential Revision: http://reviews.llvm.org/D13221

llvm-svn: 249655
2015-10-08 04:24:12 +00:00

92 lines
2.8 KiB
C

// RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s
// CHECK: %struct.layout0 = type { i8, %struct.size8, i8 }
// CHECK: %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }>
// CHECK: %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }>
// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }>
// ---------------------------------------------------------------------
// Not packed.
// ---------------------------------------------------------------------
struct size8 {
int i : 4;
long long l : 60;
};
struct layout0 {
char l0_ofs0;
struct size8 l0_ofs8;
int l0_ofs16 : 1;
};
// CHECK: l0_ofs0
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8",
// CHECK-SAME: {{.*}}size: 64, align: 64, offset: 64)
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16",
// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 128)
// ---------------------------------------------------------------------
// Implicitly packed.
// ---------------------------------------------------------------------
struct size8_anon {
int : 4;
long long : 60;
};
struct layout1 {
char l1_ofs0;
struct size8_anon l1_ofs1;
int l1_ofs9 : 1;
};
// CHECK: l1_ofs0
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1",
// CHECK-SAME: {{.*}}size: 64, align: 8, offset: 8)
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9",
// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72)
// ---------------------------------------------------------------------
// Explicitly packed.
// ---------------------------------------------------------------------
#pragma pack(1)
struct size8_pack1 {
int i : 4;
long long l : 60;
};
struct layout2 {
char l2_ofs0;
struct size8_pack1 l2_ofs1;
int l2_ofs9 : 1;
};
#pragma pack()
// CHECK: l2_ofs0
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1",
// CHECK-SAME: {{.*}}size: 64, align: 8, offset: 8)
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9",
// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72)
// ---------------------------------------------------------------------
// Explicitly packed with different alignment.
// ---------------------------------------------------------------------
#pragma pack(4)
struct size8_pack4 {
int i : 4;
long long l : 60;
};
struct layout3 {
char l3_ofs0;
struct size8_pack4 l3_ofs4;
int l3_ofs12 : 1;
};
#pragma pack()
// CHECK: l3_ofs0
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4",
// CHECK-SAME: {{.*}}size: 64, align: 32, offset: 32)
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12",
// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 96)
struct layout0 l0;
struct layout1 l1;
struct layout2 l2;
struct layout3 l3;