Files
clang-p2996/clang/test/CodeGen/transparent-union.c
Chris Lattner 73e3004e75 fix an unintended behavior change in the type system rewrite, which caused us to compile
stuff like this:

typedef struct {
 int x, y, z; 
} foo_t;

foo_t g;

into:
%"struct.<anonymous>" = type { i32, i32, i32 }
we now get:
%struct.foo_t = type { i32, i32, i32 }

This doesn't change the behavior of the compiler, but makes the IR much easier to read.

llvm-svn: 134969
2011-07-12 05:53:08 +00:00

26 lines
586 B
C

// RUN: %clang_cc1 -Werror -triple i386-unknown-unknown -emit-llvm -o %t %s
// RUN: FileCheck < %t %s
//
// FIXME: Note that we don't currently get the ABI right here. f0() should be
// f0(i8*).
typedef union {
void *f0;
} transp_t0 __attribute__((transparent_union));
void f0(transp_t0 obj);
// CHECK: define void @f1_0(i32* %a0)
// CHECK: call void @f0(%union.transp_t0* byval align 4 %{{.*}})
// CHECK: call void %{{.*}}(i8* %{{[a-z0-9]*}})
// CHECK: }
void f1_0(int *a0) {
void (*f0p)(void *) = f0;
f0(a0);
f0p(a0);
}
void f1_1(int *a0) {
f0((transp_t0) { a0 });
}