Skip to content

Commit ba3b3e3

Browse files
authored
[NFC][CodeGen][CFI] Pre-commit transparent_union tests (#158192)
For #158193
1 parent a5bff94 commit ba3b3e3

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

clang/test/CodeGen/cfi-icall-generalize.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,21 @@ void g(int** (*fp)(const char *, const char **)) {
1515
fp(0, 0);
1616
}
1717

18+
union Union {
19+
char *c;
20+
long *n;
21+
} __attribute__((transparent_union));
22+
23+
// CHECK: define{{.*}} void @uni({{.*}} !type [[TYPE2:![0-9]+]] !type [[TYPE2_GENERALIZED:![0-9]+]]
24+
void uni(void (*fn)(union Union), union Union arg1) {
25+
// UNGENERALIZED: call i1 @llvm.type.test(ptr {{.*}}, metadata !"_ZTSFv5UnionE")
26+
// GENERALIZED: call i1 @llvm.type.test(ptr {{.*}}, metadata !"_ZTSFv5UnionE.generalized")
27+
fn(arg1);
28+
}
29+
1830
// CHECK: [[TYPE]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"}
1931
// CHECK: [[TYPE_GENERALIZED]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"}
32+
33+
// CHECK: [[TYPE2]] = !{i64 0, !"_ZTSFvPFv5UnionES_E"}
34+
// CHECK: [[TYPE2_GENERALIZED]] = !{i64 0, !"_ZTSFvPv5UnionE.generalized"}
35+

clang/test/CodeGen/cfi-icall-normalize2.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ void baz(void (*fn)(int, int, int), int arg1, int arg2, int arg3) {
2424
fn(arg1, arg2, arg3);
2525
}
2626

27+
union Union {
28+
char *c;
29+
long *n;
30+
} __attribute__((transparent_union));
31+
32+
void uni(void (*fn)(union Union), union Union arg1) {
33+
// CHECK-LABEL: define{{.*}}uni
34+
// CHECK-SAME: {{.*}}!type ![[TYPE4:[0-9]+]] !type !{{[0-9]+}}
35+
// CHECK: call i1 @llvm.type.test({{i8\*|ptr}} {{%f|%0}}, metadata !"_ZTSFv5UnionE.normalized")
36+
fn(arg1);
37+
}
38+
2739
// CHECK: ![[TYPE1]] = !{i64 0, !"_ZTSFvPFvu3i32ES_E.normalized"}
2840
// CHECK: ![[TYPE2]] = !{i64 0, !"_ZTSFvPFvu3i32S_ES_S_E.normalized"}
2941
// CHECK: ![[TYPE3]] = !{i64 0, !"_ZTSFvPFvu3i32S_S_ES_S_S_E.normalized"}
42+
// CHECK: ![[TYPE4]] = !{i64 0, !"_ZTSFvPFv5UnionES_E.normalized"}
43+

clang/test/CodeGen/kcfi-generalize.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,24 @@ void g(int** (*fp)(const char *, const char **)) {
2626
fp(0, 0);
2727
}
2828

29+
union Union {
30+
char *c;
31+
long *n;
32+
} __attribute__((transparent_union));
33+
34+
// CHECK: define{{.*}} void @uni({{.*}} !kcfi_type [[TYPE4:![0-9]+]]
35+
void uni(void (*fn)(union Union), union Union arg1) {
36+
// UNGENERALIZED: call {{.*}} [ "kcfi"(i32 -1037059548) ]
37+
// GENERALIZED: call {{.*}} [ "kcfi"(i32 422130955) ]
38+
fn(arg1);
39+
}
40+
2941
// UNGENERALIZED: [[TYPE]] = !{i32 1296635908}
3042
// GENERALIZED: [[TYPE]] = !{i32 -49168686}
3143

3244
// UNGENERALIZED: [[TYPE3]] = !{i32 874141567}
3345
// GENERALIZED: [[TYPE3]] = !{i32 954385378}
46+
47+
// UNGENERALIZED: [[TYPE4]] = !{i32 981319178}
48+
// GENERALIZED: [[TYPE4]] = !{i32 -1599950473}
49+

clang/test/CodeGen/kcfi-normalize.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,21 @@ void baz(void (*fn)(int, int, int), int arg1, int arg2, int arg3) {
2828
fn(arg1, arg2, arg3);
2929
}
3030

31+
union Union {
32+
char *c;
33+
long *n;
34+
} __attribute__((transparent_union));
35+
36+
void uni(void (*fn)(union Union), union Union arg1) {
37+
// CHECK-LABEL: define{{.*}}uni
38+
// CHECK-SAME: {{.*}}!kcfi_type ![[TYPE4:[0-9]+]]
39+
// CHECK: call void %0(ptr %1) [ "kcfi"(i32 -1430221633) ]
40+
fn(arg1);
41+
}
42+
3143
// CHECK: ![[#]] = !{i32 4, !"cfi-normalize-integers", i32 1}
3244
// CHECK: ![[TYPE1]] = !{i32 -1143117868}
3345
// CHECK: ![[TYPE2]] = !{i32 -460921415}
3446
// CHECK: ![[TYPE3]] = !{i32 -333839615}
47+
// CHECK: ![[TYPE4]] = !{i32 1766237188}
48+

0 commit comments

Comments
 (0)