// #target: macos-x64
module test;

union Test @align(16)
{
	char foo;
}

union Test3
{
	Test test;
	ulong a @align(32);
}

struct Test2
{
	Test test;
	uint a;
}

fn int main()
{
	Test2 a;
	Test b;
	Test3 c;
	$assert(32 == Test3.sizeof);
	$assert(32 == Test3.alignof);
	$assert(32 == Test2.sizeof);
	$assert(16 == Test2.alignof);
	$assert(16 == Test.sizeof);
	$assert(16 == Test.alignof);
	return 0;
}

/* #expect: test.ll

%Test2 = type { %Test, i32, [12 x i8] }
%Test = type { i8, [15 x i8] }
%Test3 = type { i64, [24 x i8] }

  %a = alloca %Test2, align 16
  %b = alloca %Test, align 16
  %c = alloca %Test3, align 32
