_Pragma-location.c 1.6 KB

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