summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp')
-rw-r--r--clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp b/clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp
new file mode 100644
index 00000000000..7b3c2f0c5b9
--- /dev/null
+++ b/clang-tools-extra/test/cpp11-migrate/UseNullptr/macros.cpp
@@ -0,0 +1,93 @@
+// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
+// RUN: cpp11-migrate -use-nullptr %t.cpp -- -I %S
+// RUN: FileCheck -input-file=%t.cpp %s
+
+#define NULL 0
+// CHECK: #define NULL 0
+
+void dummy(int*) {}
+void side_effect() {}
+
+#define MACRO_EXPANSION_HAS_NULL \
+ void foo() { \
+ dummy(0); \
+ dummy(NULL); \
+ side_effect(); \
+ }
+ // CHECK: void foo() { \
+ // CHECK-NEXT: dummy(0); \
+ // CHECK-NEXT: dummy(NULL); \
+
+MACRO_EXPANSION_HAS_NULL;
+// CHECK: MACRO_EXPANSION_HAS_NULL;
+#undef MACRO_EXPANSION_HAS_NULL
+
+
+void test_macro_expansion1() {
+#define MACRO_EXPANSION_HAS_NULL \
+ dummy(NULL); \
+ side_effect();
+ // CHECK: dummy(NULL); \
+ // CHECK-NEXT: side_effect();
+
+ MACRO_EXPANSION_HAS_NULL;
+ // CHECK: MACRO_EXPANSION_HAS_NULL;
+
+#undef MACRO_EXPANSION_HAS_NULL
+}
+
+void test_macro_expansion2() {
+#define MACRO_EXPANSION_HAS_NULL \
+ dummy(NULL); \
+ side_effect();
+ // CHECK: dummy(NULL); \
+ // CHECK-NEXT: side_effect();
+
+#define OUTER_MACRO \
+ MACRO_EXPANSION_HAS_NULL; \
+ side_effect();
+
+ OUTER_MACRO;
+ // CHECK: OUTER_MACRO;
+
+#undef OUTER_MACRO
+#undef MACRO_EXPANSION_HAS_NULL
+}
+
+void test_macro_expansion3() {
+#define MY_NULL NULL
+ // TODO: Eventually we should fix the transform to detect cases like this so
+ // that we can replace MY_NULL with nullptr.
+ int *p = MY_NULL;
+ // CHECK: int *p = MY_NULL;
+#undef MY_NULL
+}
+
+// Test function-like macros where the parameter to the macro (expression)
+// results in a nullptr.
+void __dummy_assert_fail() {}
+
+void test_function_like_macro1() {
+ // This tests that the CastSequenceVisitor is working properly.
+#define my_assert(expr) \
+ ((expr) ? static_cast<void>(expr) : __dummy_assert_fail())
+ // CHECK: ((expr) ? static_cast<void>(expr) : __dummy_assert_fail())
+
+ int *p;
+ my_assert(p != 0);
+ // CHECK: my_assert(p != nullptr);
+#undef my_assert
+}
+
+void test_function_like_macro2() {
+ // This tests that the implicit cast is working properly.
+#define my_macro(expr) \
+ (expr)
+
+ int *p;
+ my_macro(p != 0);
+ // CHECK: my_macro(p != nullptr);
+#undef my_macro
+}
+
+
OpenPOWER on IntegriCloud