summaryrefslogtreecommitdiffstats
path: root/clang/test/Preprocessor/pragma-pushpop-macro.c
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2012-08-29 16:56:24 +0000
committerAlexander Kornienko <alexfh@google.com>2012-08-29 16:56:24 +0000
commitc0b4928df87a856696aee603ca994739df476675 (patch)
tree36eac4a91b4f4a5684b87e55bfa8807211d47c15 /clang/test/Preprocessor/pragma-pushpop-macro.c
parent771f1607588293a2bd0f3d2a7686792cdcc5efee (diff)
downloadbcm5719-llvm-c0b4928df87a856696aee603ca994739df476675.tar.gz
bcm5719-llvm-c0b4928df87a856696aee603ca994739df476675.zip
Fixed a problem with #pragma push_macro/pop_macro implementation.
Summary: The problem was with the following sequence: #pragma push_macro("long") #undef long #pragma pop_macro("long") in case when "long" didn't represent a macro. Fixed crash and removed code duplication for #undef/pop_macro case. Added regression tests. Reviewers: doug.gregor, klimek Reviewed By: doug.gregor CC: cfe-commits, chapuni Differential Revision: http://llvm-reviews.chandlerc.com/D31 llvm-svn: 162845
Diffstat (limited to 'clang/test/Preprocessor/pragma-pushpop-macro.c')
-rw-r--r--clang/test/Preprocessor/pragma-pushpop-macro.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/clang/test/Preprocessor/pragma-pushpop-macro.c b/clang/test/Preprocessor/pragma-pushpop-macro.c
index 08a65704e4c..0aee074c55c 100644
--- a/clang/test/Preprocessor/pragma-pushpop-macro.c
+++ b/clang/test/Preprocessor/pragma-pushpop-macro.c
@@ -31,6 +31,22 @@ int pmy1 = Y;
#define Y 4
int pmy2 = Y;
+// The sequence push, define/undef, pop caused problems if macro was not
+// previously defined.
+#pragma push_macro("PREVIOUSLY_UNDEFINED1")
+#undef PREVIOUSLY_UNDEFINED1
+#pragma pop_macro("PREVIOUSLY_UNDEFINED1")
+#ifndef PREVIOUSLY_UNDEFINED1
+int Q;
+#endif
+
+#pragma push_macro("PREVIOUSLY_UNDEFINED2")
+#define PREVIOUSLY_UNDEFINED2
+#pragma pop_macro("PREVIOUSLY_UNDEFINED2")
+#ifndef PREVIOUSLY_UNDEFINED2
+int P;
+#endif
+
// CHECK: int pmx0 = 1
// CHECK: int pmy0 = 2
// CHECK: int pmx1 = 1
@@ -38,4 +54,5 @@ int pmy2 = Y;
// CHECK: int pmx3 = 1
// CHECK: int pmy1 = 3
// CHECK: int pmy2 = 4
-
+// CHECK: int Q;
+// CHECK: int P;
OpenPOWER on IntegriCloud