pragma-pushpop-macro.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /* Test pragma pop_macro and push_macro directives from
  2. http://msdn.microsoft.com/en-us/library/hsttss76.aspx */
  3. // pop_macro: Sets the value of the macro_name macro to the value on the top of
  4. // the stack for this macro.
  5. // #pragma pop_macro("macro_name")
  6. // push_macro: Saves the value of the macro_name macro on the top of the stack
  7. // for this macro.
  8. // #pragma push_macro("macro_name")
  9. //
  10. // RUN: %clang_cc1 -fms-extensions -E %s -o - | FileCheck %s
  11. #define X 1
  12. #define Y 2
  13. int pmx0 = X;
  14. int pmy0 = Y;
  15. #define Y 3
  16. #pragma push_macro("Y")
  17. #pragma push_macro("X")
  18. int pmx1 = X;
  19. #define X 2
  20. int pmx2 = X;
  21. #pragma pop_macro("X")
  22. int pmx3 = X;
  23. #pragma pop_macro("Y")
  24. int pmy1 = Y;
  25. // Have a stray 'push' to show we don't crash when having imbalanced
  26. // push/pop
  27. #pragma push_macro("Y")
  28. #define Y 4
  29. int pmy2 = Y;
  30. // The sequence push, define/undef, pop caused problems if macro was not
  31. // previously defined.
  32. #pragma push_macro("PREVIOUSLY_UNDEFINED1")
  33. #undef PREVIOUSLY_UNDEFINED1
  34. #pragma pop_macro("PREVIOUSLY_UNDEFINED1")
  35. #ifndef PREVIOUSLY_UNDEFINED1
  36. int Q;
  37. #endif
  38. #pragma push_macro("PREVIOUSLY_UNDEFINED2")
  39. #define PREVIOUSLY_UNDEFINED2
  40. #pragma pop_macro("PREVIOUSLY_UNDEFINED2")
  41. #ifndef PREVIOUSLY_UNDEFINED2
  42. int P;
  43. #endif
  44. // CHECK: int pmx0 = 1
  45. // CHECK: int pmy0 = 2
  46. // CHECK: int pmx1 = 1
  47. // CHECK: int pmx2 = 2
  48. // CHECK: int pmx3 = 1
  49. // CHECK: int pmy1 = 3
  50. // CHECK: int pmy2 = 4
  51. // CHECK: int Q;
  52. // CHECK: int P;