Home | History | Annotate | Download | only in Preprocessor
      1 // RUN: %clang_cc1 %s -fms-extensions -E | FileCheck %s
      2 // We use -fms-extensions to test both _Pragma and __pragma.
      3 
      4 // A long time ago the pragma lexer's buffer showed through in -E output.
      5 // CHECK-NOT: scratch space
      6 
      7 #define push_p _Pragma ("pack(push)")
      8 push_p
      9 // CHECK: #pragma pack(push)
     10 
     11 push_p _Pragma("pack(push)") __pragma(pack(push))
     12 // CHECK: #pragma pack(push)
     13 // CHECK-NEXT: # 11 "{{.*}}_Pragma-location.c"
     14 // CHECK-NEXT: #pragma pack(push)
     15 // CHECK-NEXT: # 11 "{{.*}}_Pragma-location.c"
     16 // CHECK-NEXT: #pragma pack(push)
     17 
     18 
     19 #define __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic push") \
     20 _Pragma("clang diagnostic ignored \"-Wformat-extra-args\"")
     21 #define __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic pop")
     22 
     23 void test () {
     24   1;_Pragma("clang diagnostic push") \
     25   _Pragma("clang diagnostic ignored \"-Wformat-extra-args\"")
     26   _Pragma("clang diagnostic pop")
     27 
     28   2;__PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS
     29   3;__PRAGMA_POP_NO_EXTRA_ARG_WARNINGS
     30 }
     31 
     32 // CHECK: void test () {
     33 // CHECK-NEXT:   1;
     34 // CHECK-NEXT: # 24 "{{.*}}_Pragma-location.c"
     35 // CHECK-NEXT: #pragma clang diagnostic push
     36 // CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args"
     37 // CHECK-NEXT: #pragma clang diagnostic pop
     38 
     39 // CHECK:   2;
     40 // CHECK-NEXT: # 28 "{{.*}}_Pragma-location.c"
     41 // CHECK-NEXT: #pragma clang diagnostic push
     42 // CHECK-NEXT: # 28 "{{.*}}_Pragma-location.c"
     43 // CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args"
     44 // CHECK-NEXT:   3;
     45 // CHECK-NEXT: # 29 "{{.*}}_Pragma-location.c"
     46 // CHECK-NEXT: #pragma clang diagnostic pop
     47 // CHECK-NEXT: }
     48