Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
      2 // RUN: %clang_cc1 -emit-llvm -o - %s -faddress-sanitizer | FileCheck -check-prefix ASAN %s
      3 
      4 // The address_safety attribute should be attached to functions
      5 // when AddressSanitizer is enabled, unless no_address_safety_analysis attribute
      6 // is present.
      7 
      8 // CHECK-NOT:  NoAddressSafety1{{.*}} address_safety
      9 // ASAN-NOT:  NoAddressSafety1{{.*}} address_safety
     10 __attribute__((no_address_safety_analysis))
     11 int NoAddressSafety1(int *a) { return *a; }
     12 
     13 // CHECK-NOT:  NoAddressSafety2{{.*}} address_safety
     14 // ASAN-NOT:  NoAddressSafety2{{.*}} address_safety
     15 __attribute__((no_address_safety_analysis))
     16 int NoAddressSafety2(int *a);
     17 int NoAddressSafety2(int *a) { return *a; }
     18 
     19 // CHECK-NOT:  AddressSafetyOk{{.*}} address_safety
     20 // ASAN: AddressSafetyOk{{.*}} address_safety
     21 int AddressSafetyOk(int *a) { return *a; }
     22 
     23 // CHECK-NOT:  TemplateNoAddressSafety{{.*}} address_safety
     24 // ASAN-NOT: TemplateNoAddressSafety{{.*}} address_safety
     25 template<int i>
     26 __attribute__((no_address_safety_analysis))
     27 int TemplateNoAddressSafety() { return i; }
     28 
     29 // CHECK-NOT:  TemplateAddressSafetyOk{{.*}} address_safety
     30 // ASAN: TemplateAddressSafetyOk{{.*}} address_safety
     31 template<int i>
     32 int TemplateAddressSafetyOk() { return i; }
     33 
     34 int force_instance = TemplateAddressSafetyOk<42>()
     35                    + TemplateNoAddressSafety<42>();
     36