aaron.ballman added a comment. Thank you for rebasing, but the patch does not pass tests locally for me. I get the following results (testing on Windows x64 with MSVC 2017 in a Debug build):
63>******************** TEST 'Clang :: CodeGen/dump-struct-builtin.c' FAILED ******************** 63>Script: 63>-- 63>d:\build\debug\bin\clang.EXE -cc1 -internal-isystem d:\build\debug\lib\clang\7.0.0\include -nostdsysteminc -emit-llvm D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c -o - | D:\build\Debug\bin\FileCheck.EXE D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c 63>-- 63>Exit Code: 1 63> 63>Command Output (stdout): 63>-- 63>$ "d:\build\debug\bin\clang.EXE" "-cc1" "-internal-isystem" "d:\build\debug\lib\clang\7.0.0\include" "-nostdsysteminc" "-emit-llvm" "D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c" "-o" "-" 63># command stderr: 63>D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c(20,30): warning G4AB12AC8: implicitly declaring library function 'printf' with type 'int (const char *, ...)' 63> 63> __builtin_dump_struct(&a, &printf); 63> 63> ^ 63> 63>D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c:20:30: note: include the header <stdio.h> or explicitly provide a declaration for 'printf' 63> 63>1 warning generated. 63> 63> 63>$ "D:\build\Debug\bin\FileCheck.EXE" "D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c" 63># command stderr: 63>D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c(105,12): error G8E235623: expected string not found in input 63> 63> // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U6A, %struct.U6A* %a, i32 0, i32 0 63> 63> ^ 63> 63><stdin>:290:35: note: scanning from here 63> 63> %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @28, i32 0, i32 0)) 63> 63> ^ 63> 63><stdin>:291:2: note: possible intended match here 63> 63> %2 = getelementptr inbounds %struct.U8A, %struct.U8A* %a, i32 0, i32 0 63> 63> ^ 63> 63> 63>CUSTOMBUILD : error : command failed with exit status: 1 63> 63>-- 63> 63>******************** The output from the test on my machine is: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional>d:\build\debug\bin\clang.EXE -cc1 -internal-isystem d:\build\debug\lib\clang\7.0.0\include -nostdsysteminc -emit-llvm D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c -o - D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c:20:30: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)' __builtin_dump_struct(&a, &printf); ^ D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c:20:30: note: include the header <stdio.h> or explicitly provide a declaration for 'printf' ; ModuleID = 'D:\llvm\tools\clang\test\CodeGen\dump-struct-builtin.c' source_filename = "D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc" %struct.U1A = type { i16 } %struct.U2A = type { i16 } %struct.U3A = type { i32 } %struct.U4A = type { i32 } %struct.U5A = type { i32 } %struct.U6A = type { i32 } %struct.U7A = type { i64 } %struct.U8A = type { i64 } %struct.U9A = type { i8 } %struct.U10A = type { i8* } %struct.U11A = type { i8* } %struct.U12A = type { i8* } %struct.U13A = type { i8* } %struct.U14A = type { double } %struct.U15A = type { [3 x i32] } %struct.T1A = type { i32, i8* } %struct.T2B = type { i32, %struct.T2A } %struct.T2A = type { i32 } %struct.T3A = type { %union.anon } %union.anon = type { i32 } %struct.T4A = type { %union.anon.0 } %union.anon.0 = type { %struct.anon } %struct.anon = type { i8* } %struct.anon.1 = type { i32 } $"??_C@_03OMINOMMP@LSE?$AA@" = comdat any @unit1.a = private unnamed_addr constant %struct.U1A { i16 12 }, align 2 @0 = private unnamed_addr constant [14 x i8] c"struct U1A {\0A\00" @1 = private unnamed_addr constant [11 x i8] c"short a : \00" @2 = private unnamed_addr constant [5 x i8] c"%hd\0A\00" @3 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit2.a = private unnamed_addr constant %struct.U2A { i16 12 }, align 2 @4 = private unnamed_addr constant [14 x i8] c"struct U2A {\0A\00" @5 = private unnamed_addr constant [20 x i8] c"unsigned short a : \00" @6 = private unnamed_addr constant [5 x i8] c"%hu\0A\00" @7 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit3.a = private unnamed_addr constant %struct.U3A { i32 12 }, align 4 @8 = private unnamed_addr constant [14 x i8] c"struct U3A {\0A\00" @9 = private unnamed_addr constant [9 x i8] c"int a : \00" @10 = private unnamed_addr constant [4 x i8] c"%d\0A\00" @11 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit4.a = private unnamed_addr constant %struct.U4A { i32 12 }, align 4 @12 = private unnamed_addr constant [14 x i8] c"struct U4A {\0A\00" @13 = private unnamed_addr constant [18 x i8] c"unsigned int a : \00" @14 = private unnamed_addr constant [4 x i8] c"%u\0A\00" @15 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit5.a = private unnamed_addr constant %struct.U5A { i32 12 }, align 4 @16 = private unnamed_addr constant [14 x i8] c"struct U5A {\0A\00" @17 = private unnamed_addr constant [10 x i8] c"long a : \00" @18 = private unnamed_addr constant [5 x i8] c"%ld\0A\00" @19 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit6.a = private unnamed_addr constant %struct.U6A { i32 12 }, align 4 @20 = private unnamed_addr constant [14 x i8] c"struct U6A {\0A\00" @21 = private unnamed_addr constant [19 x i8] c"unsigned long a : \00" @22 = private unnamed_addr constant [5 x i8] c"%lu\0A\00" @23 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit7.a = private unnamed_addr constant %struct.U7A { i64 12 }, align 8 @24 = private unnamed_addr constant [14 x i8] c"struct U7A {\0A\00" @25 = private unnamed_addr constant [15 x i8] c"long long a : \00" @26 = private unnamed_addr constant [6 x i8] c"%lld\0A\00" @27 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit8.a = private unnamed_addr constant %struct.U8A { i64 12 }, align 8 @28 = private unnamed_addr constant [14 x i8] c"struct U8A {\0A\00" @29 = private unnamed_addr constant [15 x i8] c"long long a : \00" @30 = private unnamed_addr constant [6 x i8] c"%lld\0A\00" @31 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit9.a = private unnamed_addr constant %struct.U9A { i8 97 }, align 1 @32 = private unnamed_addr constant [14 x i8] c"struct U9A {\0A\00" @33 = private unnamed_addr constant [10 x i8] c"char a : \00" @34 = private unnamed_addr constant [4 x i8] c"%c\0A\00" @35 = private unnamed_addr constant [3 x i8] c"}\0A\00" @"??_C@_03OMINOMMP@LSE?$AA@" = linkonce_odr dso_local unnamed_addr constant [4 x i8] c"LSE\00", comdat, align 1 @unit10.a = private unnamed_addr constant %struct.U10A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"??_C@_03OMINOMMP@LSE?$AA@", i32 0, i32 0) }, align 8 @36 = private unnamed_addr constant [15 x i8] c"struct U10A {\0A\00" @37 = private unnamed_addr constant [12 x i8] c"char * a : \00" @38 = private unnamed_addr constant [4 x i8] c"%s\0A\00" @39 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit11.a = private unnamed_addr constant %struct.U11A { i8* inttoptr (i64 305419896 to i8*) }, align 8 @40 = private unnamed_addr constant [15 x i8] c"struct U11A {\0A\00" @41 = private unnamed_addr constant [12 x i8] c"void * a : \00" @42 = private unnamed_addr constant [4 x i8] c"%p\0A\00" @43 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit12.a = private unnamed_addr constant %struct.U12A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"??_C@_03OMINOMMP@LSE?$AA@", i32 0, i32 0) }, align 8 @44 = private unnamed_addr constant [15 x i8] c"struct U12A {\0A\00" @45 = private unnamed_addr constant [18 x i8] c"const char * a : \00" @46 = private unnamed_addr constant [4 x i8] c"%p\0A\00" @47 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit13.a = private unnamed_addr constant %struct.U13A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"??_C@_03OMINOMMP@LSE?$AA@", i32 0, i32 0) }, align 8 @48 = private unnamed_addr constant [15 x i8] c"struct U13A {\0A\00" @49 = private unnamed_addr constant [20 x i8] c"const charstar a : \00" @50 = private unnamed_addr constant [4 x i8] c"%s\0A\00" @51 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit14.a = private unnamed_addr constant %struct.U14A { double 0x3FF1F9ACFFA7EB6C }, align 8 @52 = private unnamed_addr constant [15 x i8] c"struct U14A {\0A\00" @53 = private unnamed_addr constant [12 x i8] c"double a : \00" @54 = private unnamed_addr constant [4 x i8] c"%f\0A\00" @55 = private unnamed_addr constant [3 x i8] c"}\0A\00" @unit15.a = private unnamed_addr constant %struct.U15A { [3 x i32] [i32 1, i32 2, i32 3] }, align 4 @56 = private unnamed_addr constant [15 x i8] c"struct U15A {\0A\00" @57 = private unnamed_addr constant [13 x i8] c"int [3] a : \00" @58 = private unnamed_addr constant [4 x i8] c"%p\0A\00" @59 = private unnamed_addr constant [3 x i8] c"}\0A\00" @test1.a = private unnamed_addr constant %struct.T1A { i32 12, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"??_C@_03OMINOMMP@LSE?$AA@", i32 0, i32 0) }, align 8 @60 = private unnamed_addr constant [14 x i8] c"struct T1A {\0A\00" @61 = private unnamed_addr constant [9 x i8] c"int a : \00" @62 = private unnamed_addr constant [4 x i8] c"%d\0A\00" @63 = private unnamed_addr constant [12 x i8] c"char * b : \00" @64 = private unnamed_addr constant [4 x i8] c"%s\0A\00" @65 = private unnamed_addr constant [3 x i8] c"}\0A\00" @test2.b = private unnamed_addr constant %struct.T2B { i32 24, %struct.T2A { i32 12 } }, align 4 @66 = private unnamed_addr constant [14 x i8] c"struct T2B {\0A\00" @67 = private unnamed_addr constant [9 x i8] c"int b : \00" @68 = private unnamed_addr constant [4 x i8] c"%d\0A\00" @69 = private unnamed_addr constant [16 x i8] c"struct T2A a : \00" @70 = private unnamed_addr constant [14 x i8] c"struct T2A {\0A\00" @71 = private unnamed_addr constant [13 x i8] c" int a : \00" @72 = private unnamed_addr constant [4 x i8] c"%d\0A\00" @73 = private unnamed_addr constant [7 x i8] c" }\0A\00" @74 = private unnamed_addr constant [3 x i8] c"}\0A\00" @test3.a = private unnamed_addr constant %struct.T3A { %union.anon { i32 42 } }, align 4 @75 = private unnamed_addr constant [14 x i8] c"struct T3A {\0A\00" @76 = private unnamed_addr constant [91 x i8] c"union T3A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:334:5) : \00" @77 = private unnamed_addr constant [90 x i8] c"union T3A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:334:5) {\0A\00" @78 = private unnamed_addr constant [13 x i8] c" int a : \00" @79 = private unnamed_addr constant [4 x i8] c"%d\0A\00" @80 = private unnamed_addr constant [18 x i8] c" char [4] b : \00" @81 = private unnamed_addr constant [4 x i8] c"%p\0A\00" @82 = private unnamed_addr constant [7 x i8] c" }\0A\00" @83 = private unnamed_addr constant [3 x i8] c"}\0A\00" @test4.a = private unnamed_addr constant %struct.T4A { %union.anon.0 { %struct.anon { i8* inttoptr (i64 305419896 to i8*) } } }, align 8 @84 = private unnamed_addr constant [14 x i8] c"struct T4A {\0A\00" @85 = private unnamed_addr constant [91 x i8] c"union T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:359:5) : \00" @86 = private unnamed_addr constant [90 x i8] c"union T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:359:5) {\0A\00" @87 = private unnamed_addr constant [96 x i8] c" struct T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:360:7) : \00" @88 = private unnamed_addr constant [91 x i8] c"struct T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:360:7) {\0A\00" @89 = private unnamed_addr constant [20 x i8] c" void * a : \00" @90 = private unnamed_addr constant [4 x i8] c"%p\0A\00" @91 = private unnamed_addr constant [11 x i8] c" }\0A\00" @92 = private unnamed_addr constant [96 x i8] c" struct T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:363:7) : \00" @93 = private unnamed_addr constant [91 x i8] c"struct T4A::(anonymous at D:\5Cllvm\5Ctools\5Cclang\5Ctest\5CCodeGen\5Cdump-struct-builtin.c:363:7) {\0A\00" @94 = private unnamed_addr constant [27 x i8] c" unsigned long b : \00" @95 = private unnamed_addr constant [5 x i8] c"%lu\0A\00" @96 = private unnamed_addr constant [11 x i8] c" }\0A\00" @97 = private unnamed_addr constant [7 x i8] c" }\0A\00" @98 = private unnamed_addr constant [3 x i8] c"}\0A\00" ; Function Attrs: noinline nounwind optnone define dso_local void @unit1() #0 { entry: %a = alloca %struct.U1A, align 2 %0 = bitcast %struct.U1A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 2 %0, i8* align 2 bitcast (%struct.U1A* @unit1.a to i8*), i64 2, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U1A, %struct.U1A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @1, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i16, i16* %2, align 2 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @2, i32 0, i32 0), i16 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @3, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: argmemonly nounwind declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #1 declare dso_local i32 @printf(i8*, ...) #2 ; Function Attrs: noinline nounwind optnone define dso_local void @unit2() #0 { entry: %a = alloca %struct.U2A, align 2 %0 = bitcast %struct.U2A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 2 %0, i8* align 2 bitcast (%struct.U2A* @unit2.a to i8*), i64 2, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @4, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U2A, %struct.U2A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @5, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i16, i16* %2, align 2 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @6, i32 0, i32 0), i16 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @7, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit3() #0 { entry: %a = alloca %struct.U3A, align 4 %0 = bitcast %struct.U3A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.U3A* @unit3.a to i8*), i64 4, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @8, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U3A, %struct.U3A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @9, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @10, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @11, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit4() #0 { entry: %a = alloca %struct.U4A, align 4 %0 = bitcast %struct.U4A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.U4A* @unit4.a to i8*), i64 4, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @12, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U4A, %struct.U4A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @13, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @14, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @15, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit5() #0 { entry: %a = alloca %struct.U5A, align 4 %0 = bitcast %struct.U5A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.U5A* @unit5.a to i8*), i64 4, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @16, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U5A, %struct.U5A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @17, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @18, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @19, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit6() #0 { entry: %a = alloca %struct.U6A, align 4 %0 = bitcast %struct.U6A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.U6A* @unit6.a to i8*), i64 4, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @20, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U6A, %struct.U6A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @21, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @22, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @23, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit7() #0 { entry: %a = alloca %struct.U7A, align 8 %0 = bitcast %struct.U7A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U7A* @unit7.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @24, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U7A, %struct.U7A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @25, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i64, i64* %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @26, i32 0, i32 0), i64 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @27, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit8() #0 { entry: %a = alloca %struct.U8A, align 8 %0 = bitcast %struct.U8A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U8A* @unit8.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @28, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U8A, %struct.U8A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @29, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i64, i64* %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @30, i32 0, i32 0), i64 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @31, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit9() #0 { entry: %a = alloca %struct.U9A, align 1 %0 = bitcast %struct.U9A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 getelementptr inbounds (%struct.U9A, %struct.U9A* @unit9.a, i32 0, i32 0), i64 1, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @32, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U9A, %struct.U9A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @33, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i8, i8* %2, align 1 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @34, i32 0, i32 0), i8 %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @35, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit10() #0 { entry: %a = alloca %struct.U10A, align 8 %0 = bitcast %struct.U10A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U10A* @unit10.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @36, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U10A, %struct.U10A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @37, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i8*, i8** %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @38, i32 0, i32 0), i8* %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @39, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit11() #0 { entry: %a = alloca %struct.U11A, align 8 %0 = bitcast %struct.U11A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U11A* @unit11.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @40, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U11A, %struct.U11A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @41, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i8*, i8** %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @42, i32 0, i32 0), i8* %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @43, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit12() #0 { entry: %a = alloca %struct.U12A, align 8 %0 = bitcast %struct.U12A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U12A* @unit12.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @44, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U12A, %struct.U12A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @45, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i8*, i8** %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @46, i32 0, i32 0), i8* %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @47, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit13() #0 { entry: %a = alloca %struct.U13A, align 8 %0 = bitcast %struct.U13A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U13A* @unit13.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @48, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U13A, %struct.U13A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @49, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i8*, i8** %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @50, i32 0, i32 0), i8* %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @51, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit14() #0 { entry: %a = alloca %struct.U14A, align 8 %0 = bitcast %struct.U14A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.U14A* @unit14.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @52, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U14A, %struct.U14A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @53, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load double, double* %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @54, i32 0, i32 0), double %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @55, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @unit15() #0 { entry: %a = alloca %struct.U15A, align 4 %0 = bitcast %struct.U15A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.U15A* @unit15.a to i8*), i64 12, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @56, i32 0, i32 0)) %2 = getelementptr inbounds %struct.U15A, %struct.U15A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @57, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load [3 x i32], [3 x i32]* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @58, i32 0, i32 0), [3 x i32] %5) %7 = add i32 %4, %6 %8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @59, i32 0, i32 0)) %9 = add i32 %7, %8 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @test1() #0 { entry: %a = alloca %struct.T1A, align 8 %0 = bitcast %struct.T1A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.T1A* @test1.a to i8*), i64 16, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @60, i32 0, i32 0)) %2 = getelementptr inbounds %struct.T1A, %struct.T1A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @61, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 8 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @62, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = getelementptr inbounds %struct.T1A, %struct.T1A* %a, i32 0, i32 1 %9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @63, i32 0, i32 0)) %10 = add i32 %7, %9 %11 = load i8*, i8** %8, align 8 %12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @64, i32 0, i32 0), i8* %11) %13 = add i32 %10, %12 %14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @65, i32 0, i32 0)) %15 = add i32 %13, %14 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @test2() #0 { entry: %b = alloca %struct.T2B, align 4 %0 = bitcast %struct.T2B* %b to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.T2B* @test2.b to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @66, i32 0, i32 0)) %2 = getelementptr inbounds %struct.T2B, %struct.T2B* %b, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @67, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = load i32, i32* %2, align 4 %6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @68, i32 0, i32 0), i32 %5) %7 = add i32 %4, %6 %8 = getelementptr inbounds %struct.T2B, %struct.T2B* %b, i32 0, i32 1 %9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @69, i32 0, i32 0)) %10 = add i32 %7, %9 %11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @70, i32 0, i32 0)) %12 = getelementptr inbounds %struct.T2A, %struct.T2A* %8, i32 0, i32 0 %13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @71, i32 0, i32 0)) %14 = add i32 %11, %13 %15 = load i32, i32* %12, align 4 %16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @72, i32 0, i32 0), i32 %15) %17 = add i32 %14, %16 %18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @73, i32 0, i32 0)) %19 = add i32 %17, %18 %20 = add i32 %19, %10 %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @74, i32 0, i32 0)) %22 = add i32 %20, %21 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @test3() #0 { entry: %a = alloca %struct.T3A, align 4 %0 = bitcast %struct.T3A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 bitcast (%struct.T3A* @test3.a to i8*), i64 4, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @75, i32 0, i32 0)) %2 = getelementptr inbounds %struct.T3A, %struct.T3A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @76, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @77, i32 0, i32 0)) %6 = bitcast %union.anon* %2 to i32* %7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @78, i32 0, i32 0)) %8 = add i32 %5, %7 %9 = load i32, i32* %6, align 4 %10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @79, i32 0, i32 0), i32 %9) %11 = add i32 %8, %10 %12 = bitcast %union.anon* %2 to [4 x i8]* %13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @80, i32 0, i32 0)) %14 = add i32 %11, %13 %15 = load [4 x i8], [4 x i8]* %12, align 4 %16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @81, i32 0, i32 0), [4 x i8] %15) %17 = add i32 %14, %16 %18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @82, i32 0, i32 0)) %19 = add i32 %17, %18 %20 = add i32 %19, %4 %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @83, i32 0, i32 0)) %22 = add i32 %20, %21 ret void } ; Function Attrs: noinline nounwind optnone define dso_local void @test4() #0 { entry: %a = alloca %struct.T4A, align 8 %0 = bitcast %struct.T4A* %a to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 bitcast (%struct.T4A* @test4.a to i8*), i64 8, i1 false) %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @84, i32 0, i32 0)) %2 = getelementptr inbounds %struct.T4A, %struct.T4A* %a, i32 0, i32 0 %3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @85, i32 0, i32 0)) %4 = add i32 %1, %3 %5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @86, i32 0, i32 0)) %6 = bitcast %union.anon.0* %2 to %struct.anon* %7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @87, i32 0, i32 0)) %8 = add i32 %5, %7 %9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @88, i32 0, i32 0)) %10 = getelementptr inbounds %struct.anon, %struct.anon* %6, i32 0, i32 0 %11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @89, i32 0, i32 0)) %12 = add i32 %9, %11 %13 = load i8*, i8** %10, align 8 %14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @90, i32 0, i32 0), i8* %13) %15 = add i32 %12, %14 %16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @91, i32 0, i32 0)) %17 = add i32 %15, %16 %18 = add i32 %17, %8 %19 = bitcast %union.anon.0* %2 to %struct.anon.1* %20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @92, i32 0, i32 0)) %21 = add i32 %18, %20 %22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([91 x i8], [91 x i8]* @93, i32 0, i32 0)) %23 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %19, i32 0, i32 0 %24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @94, i32 0, i32 0)) %25 = add i32 %22, %24 %26 = load i32, i32* %23, align 8 %27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @95, i32 0, i32 0), i32 %26) %28 = add i32 %25, %27 %29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @96, i32 0, i32 0)) %30 = add i32 %28, %29 %31 = add i32 %30, %21 %32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @97, i32 0, i32 0)) %33 = add i32 %31, %32 %34 = add i32 %33, %4 %35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @98, i32 0, i32 0)) %36 = add i32 %34, %35 ret void } attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { argmemonly nounwind } attributes #2 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{!"clang version 7.0.0 (trunk 329536)"} 1 warning generated. Repository: rC Clang https://reviews.llvm.org/D44093 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits