120 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -triple x86_64-apple-darwin -O1 -no-struct-path-tbaa -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s3// RUN: %clang_cc1 -triple x86_64-apple-darwin -O1 -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s -check-prefixes=PATH4// RUN: %clang_cc1 -triple x86_64-apple-darwin -O0 -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s -check-prefix=NO-TBAA5// RUN: %clang_cc1 -triple x86_64-apple-darwin -O1 -relaxed-aliasing -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s -check-prefix=NO-TBAA6// Test TBAA metadata generated by front-end.7//8// NO-TBAA-NOT: !tbaa9 10typedef unsigned char uint8_t;11typedef unsigned short uint16_t;12typedef unsigned int uint32_t;13typedef unsigned long long uint64_t;14 15typedef enum {16 RED_AUTO_32,17 GREEN_AUTO_32,18 BLUE_AUTO_3219} EnumAuto32;20 21typedef enum {22 RED_AUTO_64,23 GREEN_AUTO_64,24 BLUE_AUTO_64 = 0x100000000ull25} EnumAuto64;26 27typedef enum : uint16_t {28 RED_16,29 GREEN_16,30 BLUE_1631} Enum16;32 33typedef enum : uint8_t {34 RED_8,35 GREEN_8,36 BLUE_837} Enum8;38 39uint32_t g0(EnumAuto32 *E, uint32_t *val) {40// CHECK-LABEL: define{{.*}} i32 @g0(41// CHECK: store i32 5, ptr %{{.*}}, align 4, !tbaa [[TBAA2:![0-9]+]]42// CHECK: store i32 0, ptr %{{.*}}, align 4, !tbaa [[TBAA2]]43// CHECK: load i32, ptr %{{.*}}, align 4, !tbaa [[TBAA2]]44// PATH-LABEL: define{{.*}} i32 @g0(45// PATH: store i32 5, ptr %{{.*}}, align 4, !tbaa [[TBAA2:![0-9]+]]46// PATH: store i32 0, ptr %{{.*}}, align 4, !tbaa [[TBAA2]]47// PATH: load i32, ptr %{{.*}}, align 4, !tbaa [[TBAA2]]48 *val = 5;49 *E = RED_AUTO_32;50 return *val;51}52 53uint64_t g1(EnumAuto64 *E, uint64_t *val) {54// CHECK-LABEL: define{{.*}} i64 @g1(55// CHECK: store i64 5, ptr %{{.*}}, align 8, !tbaa [[TBAA12:![0-9]+]]56// CHECK: store i64 0, ptr %{{.*}}, align 8, !tbaa [[TBAA14:![0-9]+]]57// CHECK: load i64, ptr %{{.*}}, align 8, !tbaa [[TBAA12]]58// PATH-LABEL: define{{.*}} i64 @g1(59// PATH: store i64 5, ptr %{{.*}}, align 8, !tbaa [[TBAA12:![0-9]+]]60// PATH: store i64 0, ptr %{{.*}}, align 8, !tbaa [[TBAA14:![0-9]+]]61// PATH: load i64, ptr %{{.*}}, align 8, !tbaa [[TBAA12]]62 *val = 5;63 *E = RED_AUTO_64;64 return *val;65}66 67uint16_t g2(Enum16 *E, uint16_t *val) {68// CHECK-LABEL: define{{.*}} i16 @g2(69// CHECK: store i16 5, ptr %{{.*}}, align 2, !tbaa [[TBAA18:![0-9]+]]70// CHECK: store i16 0, ptr %{{.*}}, align 2, !tbaa [[TBAA18]]71// CHECK: load i16, ptr %{{.*}}, align 2, !tbaa [[TBAA18]]72// PATH-LABEL: define{{.*}} i16 @g2(73// PATH: store i16 5, ptr %{{.*}}, align 2, !tbaa [[TBAA18:![0-9]+]]74// PATH: store i16 0, ptr %{{.*}}, align 2, !tbaa [[TBAA18]]75// PATH: load i16, ptr %{{.*}}, align 2, !tbaa [[TBAA18]]76 *val = 5;77 *E = RED_16;78 return *val;79}80 81uint8_t g3(Enum8 *E, uint8_t *val) {82// CHECK-LABEL: define{{.*}} i8 @g3(83// CHECK: store i8 5, ptr %{{.*}}, align 1, !tbaa [[TBAA22:![0-9]+]]84// CHECK: store i8 0, ptr %{{.*}}, align 1, !tbaa [[TBAA22]]85// CHECK: load i8, ptr %{{.*}}, align 1, !tbaa [[TBAA22]]86// PATH-LABEL: define{{.*}} i8 @g3(87// PATH: store i8 5, ptr %{{.*}}, align 1, !tbaa [[TBAA22:![0-9]+]]88// PATH: store i8 0, ptr %{{.*}}, align 1, !tbaa [[TBAA22]]89// PATH: load i8, ptr %{{.*}}, align 1, !tbaa [[TBAA22]]90 *val = 5;91 *E = RED_8;92 return *val;93}94 95//.96// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}97// CHECK: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0}98// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}99// CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}100// CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META13]], i64 0}101// CHECK: [[META13]] = !{!"long long", [[META4]], i64 0}102// CHECK: [[TBAA14]] = !{[[META15:![0-9]+]], [[META15]], i64 0}103// CHECK: [[META15]] = !{!"long", [[META4]], i64 0}104// CHECK: [[TBAA18]] = !{[[META19:![0-9]+]], [[META19]], i64 0}105// CHECK: [[META19]] = !{!"short", [[META4]], i64 0}106// CHECK: [[TBAA22]] = !{[[META4]], [[META4]], i64 0}107//.108// PATH: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}109// PATH: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0}110// PATH: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}111// PATH: [[META5]] = !{!"Simple C/C++ TBAA"}112// PATH: [[TBAA12]] = !{[[META13:![0-9]+]], [[META13]], i64 0}113// PATH: [[META13]] = !{!"long long", [[META4]], i64 0}114// PATH: [[TBAA14]] = !{[[META15:![0-9]+]], [[META15]], i64 0}115// PATH: [[META15]] = !{!"long", [[META4]], i64 0}116// PATH: [[TBAA18]] = !{[[META19:![0-9]+]], [[META19]], i64 0}117// PATH: [[META19]] = !{!"short", [[META4]], i64 0}118// PATH: [[TBAA22]] = !{[[META4]], [[META4]], i64 0}119//.120