brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · d6e1768 Raw
105 lines · c
1// RUN: %clang_cc1 -x c -triple bpf-pc-linux-gnu -dwarf-version=4 -fsyntax-only -verify %s2 3struct s {4  int a;5  int b[4];6  int c:1;7};8union u {9  int a;10  int b[4];11  int c:1;12};13typedef struct {14  int a;15  int b;16} __t;17typedef int (*__f)(void);18enum AA {19  VAL1 = 10,20  VAL2 = 0xffffffff80000000UL,21};22typedef enum {23  VAL10 = 10,24  VAL11 = 11,25} __BB;26 27unsigned invalid1(const int *arg) {28  return __builtin_preserve_field_info(arg, 1); // expected-error {{__builtin_preserve_field_info argument 1 not a field access}}29}30 31unsigned invalid2(const int *arg) {32  return __builtin_preserve_field_info(*arg, 1); // expected-error {{__builtin_preserve_field_info argument 1 not a field access}}33}34 35void *invalid3(struct s *arg) {36  return __builtin_preserve_field_info(arg->a, 1); // expected-error {{incompatible integer to pointer conversion returning 'unsigned int' from a function with result type 'void *'}}37}38 39unsigned valid4(struct s *arg) {40  return __builtin_preserve_field_info(arg->b[1], 1);41}42 43unsigned valid5(union u *arg) {44  return __builtin_preserve_field_info(arg->b[2], 1);45}46 47unsigned valid6(struct s *arg) {48  return __builtin_preserve_field_info(arg->a, 1);49}50 51unsigned valid7(struct s *arg) {52  return __builtin_preserve_field_info(arg->c, 1ULL);53}54 55unsigned valid8(union u *arg) {56  return __builtin_preserve_field_info(arg->a, 1);57}58 59unsigned valid9(union u *arg) {60  return __builtin_preserve_field_info(arg->c, 'a');61}62 63unsigned invalid10(struct s *arg) {64  return __builtin_preserve_field_info(arg->a, arg); // expected-error {{__builtin_preserve_field_info argument 2 not a constant}}65}66 67unsigned invalid11(struct s *arg, int info_kind) {68  return __builtin_preserve_field_info(arg->a, info_kind); // expected-error {{__builtin_preserve_field_info argument 2 not a constant}}69}70 71unsigned valid12(void) {72  const struct s t = {};73  return __builtin_preserve_type_info(t, 0) +74         __builtin_preserve_type_info(*(struct s *)0, 1);75}76 77unsigned valid13(void) {78  __t t;79  return __builtin_preserve_type_info(t, 1) +80         __builtin_preserve_type_info(*(__t *)0, 0);81}82 83unsigned valid14(void) {84  enum AA t;85  return __builtin_preserve_type_info(t, 0) +86         __builtin_preserve_type_info(*(enum AA *)0, 1);87}88 89unsigned valid15(void) {90  return __builtin_preserve_enum_value(*(enum AA *)VAL1, 1) +91         __builtin_preserve_enum_value(*(enum AA *)VAL2, 1);92}93 94unsigned invalid16(void) {95  return __builtin_preserve_enum_value(*(enum AA *)0, 1); // expected-error {{__builtin_preserve_enum_value argument 1 invalid}}96}97 98unsigned invalid17(void) {99  return __builtin_preserve_enum_value(*(enum AA *)VAL10, 1); // expected-error {{__builtin_preserve_enum_value argument 1 invalid}}100}101 102unsigned invalid18(struct s *arg) {103  return __builtin_preserve_type_info(arg->a + 2, 0); // expected-error {{__builtin_preserve_type_info argument 1 invalid}}104}105