Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s |
| 2 | |
| 3 | #include "Inputs/stdio.h" |
Aaron Ballman | fe93546 | 2018-04-17 14:00:06 +0000 | [diff] [blame] | 4 | #include <stdint.h> |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 5 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 6 | // CHECK: @__const.unit1.a = private unnamed_addr constant %struct.U1A { i16 12 }, align 2 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 7 | // CHECK-NEXT: [[STRUCT_STR_U1:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U1A {\0A\00" |
| 8 | // CHECK-NEXT: [[FIELD_U1:@[0-9]+]] = private unnamed_addr constant [11 x i8] c"short a : \00" |
| 9 | // CHECK-NEXT: [[FORMAT_U1:@[0-9]+]] = private unnamed_addr constant [5 x i8] c"%hd\0A\00" |
| 10 | // CHECK-NEXT: [[END_STRUCT_U1:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 11 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 12 | // CHECK: @__const.unit2.a = private unnamed_addr constant %struct.U2A { i16 12 }, align 2 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 13 | // CHECK-NEXT: [[STRUCT_STR_U2:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U2A {\0A\00" |
| 14 | // CHECK-NEXT: [[FIELD_U2:@[0-9]+]] = private unnamed_addr constant [20 x i8] c"unsigned short a : \00" |
| 15 | // CHECK-NEXT: [[FORMAT_U2:@[0-9]+]] = private unnamed_addr constant [5 x i8] c"%hu\0A\00" |
| 16 | // CHECK-NEXT: [[END_STRUCT_U2:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 17 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 18 | // CHECK: @__const.unit3.a = private unnamed_addr constant %struct.U3A { i32 12 }, align 4 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 19 | // CHECK-NEXT: [[STRUCT_STR_U3:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U3A {\0A\00" |
| 20 | // CHECK-NEXT: [[FIELD_U3:@[0-9]+]] = private unnamed_addr constant [9 x i8] c"int a : \00" |
| 21 | // CHECK-NEXT: [[FORMAT_U3:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%d\0A\00" |
| 22 | // CHECK-NEXT: [[END_STRUCT_U3:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 23 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 24 | // CHECK: @__const.unit4.a = private unnamed_addr constant %struct.U4A { i32 12 }, align 4 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 25 | // CHECK-NEXT: [[STRUCT_STR_U4:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U4A {\0A\00" |
| 26 | // CHECK-NEXT: [[FIELD_U4:@[0-9]+]] = private unnamed_addr constant [18 x i8] c"unsigned int a : \00" |
| 27 | // CHECK-NEXT: [[FORMAT_U4:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%u\0A\00" |
| 28 | // CHECK-NEXT: [[END_STRUCT_U4:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 29 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 30 | // CHECK: @__const.unit5.a = private unnamed_addr constant %struct.U5A { i64 12 }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 31 | // CHECK-NEXT: [[STRUCT_STR_U5:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U5A {\0A\00" |
| 32 | // CHECK-NEXT: [[FIELD_U5:@[0-9]+]] = private unnamed_addr constant [10 x i8] c"long a : \00" |
| 33 | // CHECK-NEXT: [[FORMAT_U5:@[0-9]+]] = private unnamed_addr constant [5 x i8] c"%ld\0A\00" |
| 34 | // CHECK-NEXT: [[END_STRUCT_U5:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 35 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 36 | // CHECK: @__const.unit6.a = private unnamed_addr constant %struct.U6A { i64 12 }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 37 | // CHECK-NEXT: [[STRUCT_STR_U6:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U6A {\0A\00" |
| 38 | // CHECK-NEXT: [[FIELD_U6:@[0-9]+]] = private unnamed_addr constant [19 x i8] c"unsigned long a : \00" |
| 39 | // CHECK-NEXT: [[FORMAT_U6:@[0-9]+]] = private unnamed_addr constant [5 x i8] c"%lu\0A\00" |
| 40 | // CHECK-NEXT: [[END_STRUCT_U6:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 41 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 42 | // CHECK: @__const.unit7.a = private unnamed_addr constant %struct.U7A { i64 12 }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 43 | // CHECK-NEXT: [[STRUCT_STR_U7:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U7A {\0A\00" |
| 44 | // CHECK-NEXT: [[FIELD_U7:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"long long a : \00" |
| 45 | // CHECK-NEXT: [[FORMAT_U7:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%lld\0A\00" |
| 46 | // CHECK-NEXT: [[END_STRUCT_U7:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 47 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 48 | // CHECK: @__const.unit8.a = private unnamed_addr constant %struct.U8A { i64 12 }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 49 | // CHECK-NEXT: [[STRUCT_STR_U8:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U8A {\0A\00" |
| 50 | // CHECK-NEXT: [[FIELD_U8:@[0-9]+]] = private unnamed_addr constant [24 x i8] c"unsigned long long a : \00" |
| 51 | // CHECK-NEXT: [[FORMAT_U8:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%llu\0A\00" |
| 52 | // CHECK-NEXT: [[END_STRUCT_U8:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 53 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 54 | // CHECK: @__const.unit9.a = private unnamed_addr constant %struct.U9A { i8 97 }, align 1 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 55 | // CHECK-NEXT: [[STRUCT_STR_U9:@[0-9]+]] = private unnamed_addr constant [14 x i8] c"struct U9A {\0A\00" |
| 56 | // CHECK-NEXT: [[FIELD_U9:@[0-9]+]] = private unnamed_addr constant [10 x i8] c"char a : \00" |
| 57 | // CHECK-NEXT: [[FORMAT_U9:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%c\0A\00" |
| 58 | // CHECK-NEXT: [[END_STRUCT_U9:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 59 | |
| 60 | // CHECK: @.str = private unnamed_addr constant [4 x i8] c"LSE\00", align 1 |
| 61 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 62 | // CHECK: @__const.unit10.a = private unnamed_addr constant %struct.U10A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0) }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 63 | // CHECK-NEXT: [[STRUCT_STR_U10:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U10A {\0A\00" |
| 64 | // CHECK-NEXT: [[FIELD_U10:@[0-9]+]] = private unnamed_addr constant [12 x i8] c"char * a : \00" |
| 65 | // CHECK-NEXT: [[FORMAT_U10:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%s\0A\00" |
| 66 | // CHECK-NEXT: [[END_STRUCT_U10:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 67 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 68 | // CHECK: @__const.unit11.a = private unnamed_addr constant %struct.U11A { i8* inttoptr (i64 305419896 to i8*) }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 69 | // CHECK-NEXT: [[STRUCT_STR_U11:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U11A {\0A\00" |
| 70 | // CHECK-NEXT: [[FIELD_U11:@[0-9]+]] = private unnamed_addr constant [12 x i8] c"void * a : \00" |
| 71 | // CHECK-NEXT: [[FORMAT_U11:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%p\0A\00" |
| 72 | // CHECK-NEXT: [[END_STRUCT_U11:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 73 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 74 | // CHECK: @__const.unit12.a = private unnamed_addr constant %struct.U12A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0) }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 75 | // CHECK-NEXT: [[STRUCT_STR_U12:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U12A {\0A\00" |
| 76 | // CHECK-NEXT: [[FIELD_U12:@[0-9]+]] = private unnamed_addr constant [18 x i8] c"const char * a : \00" |
| 77 | // CHECK-NEXT: [[FORMAT_U12:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%s\0A\00" |
| 78 | // CHECK-NEXT: [[END_STRUCT_U12:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 79 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 80 | // CHECK: @__const.unit13.a = private unnamed_addr constant %struct.U13A { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0) }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 81 | // CHECK-NEXT: [[STRUCT_STR_U13:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U13A {\0A\00" |
| 82 | // CHECK-NEXT: [[FIELD_U13:@[0-9]+]] = private unnamed_addr constant [20 x i8] c"const charstar a : \00" |
| 83 | // CHECK-NEXT: [[FORMAT_U13:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%s\0A\00" |
| 84 | // CHECK-NEXT: [[END_STRUCT_U13:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 85 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 86 | // CHECK: @__const.unit14.a = private unnamed_addr constant %struct.U14A { double 0x3FF1F9ACFFA7EB6C }, align 8 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 87 | // CHECK-NEXT: [[STRUCT_STR_U14:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U14A {\0A\00" |
| 88 | // CHECK-NEXT: [[FIELD_U14:@[0-9]+]] = private unnamed_addr constant [12 x i8] c"double a : \00" |
| 89 | // CHECK-NEXT: [[FORMAT_U14:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%f\0A\00" |
| 90 | // CHECK-NEXT: [[END_STRUCT_U14:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 91 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 92 | // CHECK: @__const.unit15.a = private unnamed_addr constant %struct.U15A { [3 x i32] [i32 1, i32 2, i32 3] }, align 4 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 93 | // CHECK-NEXT: [[STRUCT_STR_U15:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U15A {\0A\00" |
| 94 | // CHECK-NEXT: [[FIELD_U15:@[0-9]+]] = private unnamed_addr constant [13 x i8] c"int [3] a : \00" |
| 95 | // CHECK-NEXT: [[FORMAT_U15:@[0-9]+]] = private unnamed_addr constant [4 x i8] c"%p\0A\00" |
| 96 | // CHECK-NEXT: [[END_STRUCT_U15:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 97 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 98 | // CHECK: @__const.unit16.a = private unnamed_addr constant %struct.U16A { i8 12 }, align 1 |
Aaron Ballman | fe93546 | 2018-04-17 14:00:06 +0000 | [diff] [blame] | 99 | // CHECK-NEXT: [[STRUCT_STR_U16:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U16A {\0A\00" |
| 100 | // CHECK-NEXT: [[FIELD_U16:@[0-9]+]] = private unnamed_addr constant [13 x i8] c"uint8_t a : \00" |
| 101 | // CHECK-NEXT: [[FORMAT_U16:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%hhu\0A\00" |
| 102 | // CHECK-NEXT: [[END_STRUCT_U16:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 103 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 104 | // CHECK: @__const.unit17.a = private unnamed_addr constant %struct.U17A { i8 12 }, align 1 |
Aaron Ballman | fe93546 | 2018-04-17 14:00:06 +0000 | [diff] [blame] | 105 | // CHECK-NEXT: [[STRUCT_STR_U17:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U17A {\0A\00" |
| 106 | // CHECK-NEXT: [[FIELD_U17:@[0-9]+]] = private unnamed_addr constant [12 x i8] c"int8_t a : \00" |
| 107 | // CHECK-NEXT: [[FORMAT_U17:@[0-9]+]] = private unnamed_addr constant [6 x i8] c"%hhd\0A\00" |
| 108 | // CHECK-NEXT: [[END_STRUCT_U17:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 109 | |
JF Bastien | 3a881e6 | 2018-11-15 00:19:18 +0000 | [diff] [blame] | 110 | // CHECK: @__const.unit18.a = private unnamed_addr constant %struct.U18A { x86_fp80 0xK3FFF8FCD67FD3F5B6000 }, align 16 |
Paul Semel | 80daae2 | 2018-04-25 10:09:20 +0000 | [diff] [blame] | 111 | // CHECK-NEXT: [[STRUCT_STR_U18:@[0-9]+]] = private unnamed_addr constant [15 x i8] c"struct U18A {\0A\00" |
| 112 | // CHECK-NEXT: [[FIELD_U18:@[0-9]+]] = private unnamed_addr constant [17 x i8] c"long double a : \00" |
| 113 | // CHECK-NEXT: [[FORMAT_U18:@[0-9]+]] = private unnamed_addr constant [5 x i8] c"%Lf\0A\00" |
| 114 | // CHECK-NEXT: [[END_STRUCT_U18:@[0-9]+]] = private unnamed_addr constant [3 x i8] c"}\0A\00" |
| 115 | |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 116 | int printf(const char *fmt, ...) { |
| 117 | return 0; |
| 118 | } |
| 119 | |
| 120 | void unit1() { |
| 121 | struct U1A { |
| 122 | short a; |
| 123 | }; |
| 124 | |
| 125 | struct U1A a = { |
| 126 | .a = 12, |
| 127 | }; |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 128 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U1]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 129 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U1A, %struct.U1A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 130 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* [[FIELD_U1]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 131 | // CHECK: [[LOAD1:%[0-9]+]] = load i16, i16* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 132 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[FORMAT_U1]], i32 0, i32 0), i16 [[LOAD1]]) |
| 133 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U1]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 134 | __builtin_dump_struct(&a, &printf); |
| 135 | } |
| 136 | |
| 137 | void unit2() { |
| 138 | struct U2A { |
| 139 | unsigned short a; |
| 140 | }; |
| 141 | |
| 142 | struct U2A a = { |
| 143 | .a = 12, |
| 144 | }; |
| 145 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 146 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U2]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 147 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U2A, %struct.U2A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 148 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* [[FIELD_U2]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 149 | // CHECK: [[LOAD1:%[0-9]+]] = load i16, i16* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 150 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[FORMAT_U2]], i32 0, i32 0), i16 [[LOAD1]]) |
| 151 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U2]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 152 | __builtin_dump_struct(&a, &printf); |
| 153 | } |
| 154 | |
| 155 | void unit3() { |
| 156 | struct U3A { |
| 157 | int a; |
| 158 | }; |
| 159 | |
| 160 | struct U3A a = { |
| 161 | .a = 12, |
| 162 | }; |
| 163 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 164 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U3]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 165 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U3A, %struct.U3A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 166 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* [[FIELD_U3]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 167 | // CHECK: [[LOAD1:%[0-9]+]] = load i32, i32* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 168 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U3]], i32 0, i32 0), i32 [[LOAD1]]) |
| 169 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U3]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 170 | __builtin_dump_struct(&a, &printf); |
| 171 | } |
| 172 | |
| 173 | void unit4() { |
| 174 | struct U4A { |
| 175 | unsigned int a; |
| 176 | }; |
| 177 | |
| 178 | struct U4A a = { |
| 179 | .a = 12, |
| 180 | }; |
| 181 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 182 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U4]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 183 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U4A, %struct.U4A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 184 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* [[FIELD_U4]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 185 | // CHECK: [[LOAD1:%[0-9]+]] = load i32, i32* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 186 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U4]], i32 0, i32 0), i32 [[LOAD1]]) |
| 187 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U4]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 188 | __builtin_dump_struct(&a, &printf); |
| 189 | } |
| 190 | |
| 191 | void unit5() { |
| 192 | struct U5A { |
| 193 | long a; |
| 194 | }; |
| 195 | |
| 196 | struct U5A a = { |
| 197 | .a = 12, |
| 198 | }; |
| 199 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 200 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U5]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 201 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U5A, %struct.U5A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 202 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* [[FIELD_U5]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 203 | // CHECK: [[LOAD1:%[0-9]+]] = load i64, i64* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 204 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[FORMAT_U5]], i32 0, i32 0), i64 [[LOAD1]]) |
| 205 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U5]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 206 | __builtin_dump_struct(&a, &printf); |
| 207 | } |
| 208 | |
| 209 | void unit6() { |
| 210 | struct U6A { |
| 211 | unsigned long a; |
| 212 | }; |
| 213 | |
| 214 | struct U6A a = { |
| 215 | .a = 12, |
| 216 | }; |
| 217 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 218 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U6]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 219 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U6A, %struct.U6A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 220 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* [[FIELD_U6]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 221 | // CHECK: [[LOAD1:%[0-9]+]] = load i64, i64* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 222 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[FORMAT_U6]], i32 0, i32 0), i64 [[LOAD1]]) |
| 223 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U6]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 224 | __builtin_dump_struct(&a, &printf); |
| 225 | } |
| 226 | |
| 227 | void unit7() { |
| 228 | struct U7A { |
| 229 | long long a; |
| 230 | }; |
| 231 | |
| 232 | struct U7A a = { |
| 233 | .a = 12, |
| 234 | }; |
| 235 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 236 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U7]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 237 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U7A, %struct.U7A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 238 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[FIELD_U7]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 239 | // CHECK: [[LOAD1:%[0-9]+]] = load i64, i64* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 240 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* [[FORMAT_U7]], i32 0, i32 0), i64 [[LOAD1]]) |
| 241 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U7]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 242 | __builtin_dump_struct(&a, &printf); |
| 243 | } |
| 244 | |
| 245 | void unit8() { |
| 246 | struct U8A { |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 247 | unsigned long long a; |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 248 | }; |
| 249 | |
| 250 | struct U8A a = { |
| 251 | .a = 12, |
| 252 | }; |
| 253 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 254 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U8]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 255 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U8A, %struct.U8A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 256 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* [[FIELD_U8]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 257 | // CHECK: [[LOAD1:%[0-9]+]] = load i64, i64* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 258 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* [[FORMAT_U8]], i32 0, i32 0), i64 [[LOAD1]]) |
| 259 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U8]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 260 | __builtin_dump_struct(&a, &printf); |
| 261 | } |
| 262 | |
| 263 | void unit9() { |
| 264 | struct U9A { |
| 265 | char a; |
| 266 | }; |
| 267 | |
| 268 | struct U9A a = { |
| 269 | .a = 'a', |
| 270 | }; |
| 271 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 272 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* [[STRUCT_STR_U9]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 273 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U9A, %struct.U9A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 274 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* [[FIELD_U9]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 275 | // CHECK: [[LOAD1:%[0-9]+]] = load i8, i8* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 276 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U9]], i32 0, i32 0), i8 [[LOAD1]]) |
| 277 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U9]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 278 | __builtin_dump_struct(&a, &printf); |
| 279 | } |
| 280 | |
| 281 | void unit10() { |
| 282 | struct U10A { |
| 283 | char *a; |
| 284 | }; |
| 285 | |
| 286 | struct U10A a = { |
| 287 | .a = "LSE", |
| 288 | }; |
| 289 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 290 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U10]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 291 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U10A, %struct.U10A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 292 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* [[FIELD_U10]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 293 | // CHECK: [[LOAD1:%[0-9]+]] = load i8*, i8** [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 294 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U10]], i32 0, i32 0), i8* [[LOAD1]]) |
| 295 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U10]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 296 | __builtin_dump_struct(&a, &printf); |
| 297 | } |
| 298 | |
| 299 | void unit11() { |
| 300 | struct U11A { |
| 301 | void *a; |
| 302 | }; |
| 303 | |
| 304 | struct U11A a = { |
| 305 | .a = (void *)0x12345678, |
| 306 | }; |
| 307 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 308 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U11]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 309 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U11A, %struct.U11A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 310 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* [[FIELD_U11]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 311 | // CHECK: [[LOAD1:%[0-9]+]] = load i8*, i8** [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 312 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U11]], i32 0, i32 0), i8* [[LOAD1]]) |
| 313 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U11]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 314 | __builtin_dump_struct(&a, &printf); |
| 315 | } |
| 316 | |
| 317 | void unit12() { |
| 318 | struct U12A { |
| 319 | const char *a; |
| 320 | }; |
| 321 | |
| 322 | struct U12A a = { |
| 323 | .a = "LSE", |
| 324 | }; |
| 325 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 326 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U12]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 327 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U12A, %struct.U12A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 328 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* [[FIELD_U12]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 329 | // CHECK: [[LOAD1:%[0-9]+]] = load i8*, i8** [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 330 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U12]], i32 0, i32 0), i8* [[LOAD1]]) |
| 331 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U12]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 332 | __builtin_dump_struct(&a, &printf); |
| 333 | } |
| 334 | |
| 335 | void unit13() { |
| 336 | typedef char *charstar; |
| 337 | struct U13A { |
| 338 | const charstar a; |
| 339 | }; |
| 340 | |
| 341 | struct U13A a = { |
| 342 | .a = "LSE", |
| 343 | }; |
| 344 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 345 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U13]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 346 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U13A, %struct.U13A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 347 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* [[FIELD_U13]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 348 | // CHECK: [[LOAD1:%[0-9]+]] = load i8*, i8** [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 349 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U13]], i32 0, i32 0), i8* [[LOAD1]]) |
| 350 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U13]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 351 | __builtin_dump_struct(&a, &printf); |
| 352 | } |
| 353 | |
| 354 | void unit14() { |
| 355 | struct U14A { |
| 356 | double a; |
| 357 | }; |
| 358 | |
| 359 | struct U14A a = { |
| 360 | .a = 1.123456, |
| 361 | }; |
| 362 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 363 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U14]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 364 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U14A, %struct.U14A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 365 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* [[FIELD_U14]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 366 | // CHECK: [[LOAD1:%[0-9]+]] = load double, double* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 367 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U14]], i32 0, i32 0), double [[LOAD1]]) |
| 368 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U14]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 369 | __builtin_dump_struct(&a, &printf); |
| 370 | } |
| 371 | |
| 372 | void unit15() { |
| 373 | struct U15A { |
| 374 | int a[3]; |
| 375 | }; |
| 376 | |
| 377 | struct U15A a = { |
| 378 | .a = {1, 2, 3}, |
| 379 | }; |
| 380 | |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 381 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U15]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 382 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U15A, %struct.U15A* %a, i32 0, i32 0 |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 383 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* [[FIELD_U15]], i32 0, i32 0)) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 384 | // CHECK: [[LOAD1:%[0-9]+]] = load [3 x i32], [3 x i32]* [[RES1]], |
Aaron Ballman | b6a7702 | 2018-04-17 11:57:47 +0000 | [diff] [blame] | 385 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* [[FORMAT_U15]], i32 0, i32 0), [3 x i32] [[LOAD1]]) |
| 386 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U15]], i32 0, i32 0) |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 387 | __builtin_dump_struct(&a, &printf); |
| 388 | } |
| 389 | |
Aaron Ballman | fe93546 | 2018-04-17 14:00:06 +0000 | [diff] [blame] | 390 | void unit16() { |
| 391 | struct U16A { |
| 392 | uint8_t a; |
| 393 | }; |
| 394 | |
| 395 | struct U16A a = { |
| 396 | .a = 12, |
| 397 | }; |
| 398 | |
| 399 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U16]], i32 0, i32 0)) |
| 400 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U16A, %struct.U16A* %a, i32 0, i32 0 |
| 401 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* [[FIELD_U16]], i32 0, i32 0)) |
| 402 | // CHECK: [[LOAD1:%[0-9]+]] = load i8, i8* [[RES1]], |
| 403 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* [[FORMAT_U16]], i32 0, i32 0), i8 [[LOAD1]]) |
| 404 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U16]], i32 0, i32 0) |
| 405 | __builtin_dump_struct(&a, &printf); |
| 406 | } |
| 407 | |
| 408 | void unit17() { |
| 409 | struct U17A { |
| 410 | int8_t a; |
| 411 | }; |
| 412 | |
| 413 | struct U17A a = { |
| 414 | .a = 12, |
| 415 | }; |
| 416 | |
| 417 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U17]], i32 0, i32 0)) |
| 418 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U17A, %struct.U17A* %a, i32 0, i32 0 |
| 419 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* [[FIELD_U17]], i32 0, i32 0)) |
| 420 | // CHECK: [[LOAD1:%[0-9]+]] = load i8, i8* [[RES1]], |
| 421 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* [[FORMAT_U17]], i32 0, i32 0), i8 [[LOAD1]]) |
| 422 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U17]], i32 0, i32 0) |
| 423 | __builtin_dump_struct(&a, &printf); |
| 424 | } |
| 425 | |
Paul Semel | 80daae2 | 2018-04-25 10:09:20 +0000 | [diff] [blame] | 426 | void unit18() { |
| 427 | struct U18A { |
| 428 | long double a; |
| 429 | }; |
| 430 | |
| 431 | struct U18A a = { |
| 432 | .a = 1.123456, |
| 433 | }; |
| 434 | |
| 435 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[STRUCT_STR_U18]], i32 0, i32 0)) |
| 436 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.U18A, %struct.U18A* %a, i32 0, i32 0 |
| 437 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* [[FIELD_U18]], i32 0, i32 0)) |
| 438 | // CHECK: [[LOAD1:%[0-9]+]] = load x86_fp80, x86_fp80* [[RES1]], |
| 439 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[FORMAT_U18]], i32 0, i32 0), x86_fp80 [[LOAD1]]) |
| 440 | // CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[END_STRUCT_U18]], i32 0, i32 0) |
| 441 | __builtin_dump_struct(&a, &printf); |
| 442 | } |
| 443 | |
Aaron Ballman | 0652534 | 2018-04-10 21:58:13 +0000 | [diff] [blame] | 444 | void test1() { |
| 445 | struct T1A { |
| 446 | int a; |
| 447 | char *b; |
| 448 | }; |
| 449 | |
| 450 | struct T1A a = { |
| 451 | .a = 12, |
| 452 | .b = "LSE", |
| 453 | }; |
| 454 | |
| 455 | // CHECK: call i32 (i8*, ...) @printf( |
| 456 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.T1A, %struct.T1A* %a, i32 0, i32 0 |
| 457 | // CHECK: call i32 (i8*, ...) @printf( |
| 458 | // CHECK: [[LOAD1:%[0-9]+]] = load i32, i32* [[RES1]], |
| 459 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i32 [[LOAD1]]) |
| 460 | // CHECK: [[RES2:%[0-9]+]] = getelementptr inbounds %struct.T1A, %struct.T1A* %a, i32 0, i32 1 |
| 461 | // CHECK: call i32 (i8*, ...) @printf( |
| 462 | // CHECK: [[LOAD2:%[0-9]+]] = load i8*, i8** [[RES2]], |
| 463 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i8* [[LOAD2]]) |
| 464 | // CHECK: call i32 (i8*, ...) @printf( |
| 465 | __builtin_dump_struct(&a, &printf); |
| 466 | } |
| 467 | |
| 468 | void test2() { |
| 469 | struct T2A { |
| 470 | int a; |
| 471 | }; |
| 472 | |
| 473 | struct T2B { |
| 474 | int b; |
| 475 | struct T2A a; |
| 476 | }; |
| 477 | |
| 478 | struct T2B b = { |
| 479 | .b = 24, |
| 480 | .a = { |
| 481 | .a = 12, |
| 482 | } |
| 483 | }; |
| 484 | |
| 485 | // CHECK: call i32 (i8*, ...) @printf( |
| 486 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.T2B, %struct.T2B* %b, i32 0, i32 0 |
| 487 | // CHECK: call i32 (i8*, ...) @printf( |
| 488 | // CHECK: [[LOAD1:%[0-9]+]] = load i32, i32* [[RES1]], |
| 489 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i32 [[LOAD1]]) |
| 490 | // CHECK: [[NESTED_STRUCT:%[0-9]+]] = getelementptr inbounds %struct.T2B, %struct.T2B* %b, i32 0, i32 1 |
| 491 | // CHECK: call i32 (i8*, ...) @printf( |
| 492 | // CHECK: [[RES2:%[0-9]+]] = getelementptr inbounds %struct.T2A, %struct.T2A* [[NESTED_STRUCT]], i32 0, i32 0 |
| 493 | // CHECK: call i32 (i8*, ...) @printf( |
| 494 | // CHECK: [[LOAD2:%[0-9]+]] = load i32, i32* [[RES2]], |
| 495 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i32 [[LOAD2]]) |
| 496 | // CHECK: call i32 (i8*, ...) @printf( |
| 497 | __builtin_dump_struct(&b, &printf); |
| 498 | } |
| 499 | |
| 500 | void test3() { |
| 501 | struct T3A { |
| 502 | union { |
| 503 | int a; |
| 504 | char b[4]; |
| 505 | }; |
| 506 | }; |
| 507 | |
| 508 | struct T3A a = { |
| 509 | .a = 42, |
| 510 | }; |
| 511 | |
| 512 | // CHECK: call i32 (i8*, ...) @printf( |
| 513 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.T3A, %struct.T3A* %a, i32 0, i32 0 |
| 514 | // CHECK: call i32 (i8*, ...) @printf( |
| 515 | // CHECK: [[BC1:%[0-9]+]] = bitcast %union.anon* [[RES1]] to i32* |
| 516 | // CHECK: [[LOAD1:%[0-9]+]] = load i32, i32* [[BC1]], |
| 517 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i32 [[LOAD1]]) |
| 518 | // CHECK: [[BC2:%[0-9]+]] = bitcast %union.anon* [[RES1]] to [4 x i8]* |
| 519 | // CHECK: [[LOAD2:%[0-9]+]] = load [4 x i8], [4 x i8]* [[BC2]], |
| 520 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, [4 x i8] [[LOAD2]]) |
| 521 | // CHECK: call i32 (i8*, ...) @printf( |
| 522 | __builtin_dump_struct(&a, &printf); |
| 523 | } |
| 524 | |
| 525 | void test4() { |
| 526 | struct T4A { |
| 527 | union { |
| 528 | struct { |
| 529 | void *a; |
| 530 | }; |
| 531 | struct { |
| 532 | unsigned long b; |
| 533 | }; |
| 534 | }; |
| 535 | }; |
| 536 | |
| 537 | struct T4A a = { |
| 538 | .a = (void *)0x12345678, |
| 539 | }; |
| 540 | |
| 541 | // CHECK: call i32 (i8*, ...) @printf( |
| 542 | // CHECK: [[RES1:%[0-9]+]] = getelementptr inbounds %struct.T4A, %struct.T4A* %a, i32 0, i32 0 |
| 543 | // CHECK: call i32 (i8*, ...) @printf( |
| 544 | // CHECK: [[BC1:%[0-9]+]] = bitcast %union.anon.0* [[RES1]] to %struct.anon* |
| 545 | // CHECK: [[RES2:%[0-9]+]] = getelementptr inbounds %struct.anon, %struct.anon* [[BC1]], i32 0, i32 0 |
| 546 | // CHECK: [[LOAD1:%[0-9]+]] = load i8*, i8** [[RES2]], |
| 547 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i8* [[LOAD1]]) |
| 548 | |
| 549 | // CHECK: [[BC2:%[0-9]+]] = bitcast %union.anon.0* [[RES1]] to %struct.anon.1* |
| 550 | // CHECK: [[RES3:%[0-9]+]] = getelementptr inbounds %struct.anon.1, %struct.anon.1* [[BC2]], i32 0, i32 0 |
| 551 | // CHECK: [[LOAD2:%[0-9]+]] = load i64, i64* [[RES3]], |
| 552 | // CHECK: call i32 (i8*, ...) @printf({{.*}}, i64 [[LOAD2]]) |
| 553 | // CHECK: call i32 (i8*, ...) @printf( |
| 554 | __builtin_dump_struct(&a, &printf); |
| 555 | } |