Yonghong Song | 6d67506 | 2020-07-29 16:54:29 -0700 | [diff] [blame] | 1 | // REQUIRES: bpf-registered-target |
Yonghong Song | 54d9f74 | 2020-09-02 22:56:41 -0700 | [diff] [blame] | 2 | // RUN: %clang -target bpf -emit-llvm -S -g -Xclang -disable-llvm-passes %s -o - | FileCheck %s |
Yonghong Song | 6d67506 | 2020-07-29 16:54:29 -0700 | [diff] [blame] | 3 | |
| 4 | #define _(x, y) (__builtin_preserve_type_info((x), (y))) |
| 5 | |
| 6 | struct s { |
| 7 | char a; |
| 8 | }; |
| 9 | typedef int __int; |
| 10 | enum AA { |
| 11 | VAL1 = 1, |
| 12 | VAL2 = 2, |
| 13 | }; |
| 14 | |
| 15 | unsigned unit1() { |
| 16 | struct s v = {}; |
| 17 | return _(v, 0) + _(*(struct s *)0, 0); |
| 18 | } |
| 19 | |
| 20 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 0, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S:[0-9]+]] |
| 21 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 1, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S]] |
| 22 | |
| 23 | unsigned unit2() { |
| 24 | __int n; |
| 25 | return _(n, 1) + _(*(__int *)0, 1); |
| 26 | } |
| 27 | |
| 28 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 2, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_INT:[0-9]+]] |
| 29 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 3, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_INT]] |
| 30 | |
| 31 | unsigned unit3() { |
| 32 | enum AA t; |
| 33 | return _(t, 0) + _(*(enum AA *)0, 1); |
| 34 | } |
| 35 | |
| 36 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 4, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA:[0-9]+]] |
| 37 | // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 5, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA]] |
| 38 | |
| 39 | // CHECK: ![[ENUM_AA]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "AA" |
| 40 | // CHECK: ![[TYPEDEF_INT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__int" |
| 41 | // CHECK: ![[STRUCT_S]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s" |