summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp
diff options
context:
space:
mode:
authorJonas Toth <jonas.toth@gmail.com>2018-10-22 19:20:01 +0000
committerJonas Toth <jonas.toth@gmail.com>2018-10-22 19:20:01 +0000
commit552b62ed1f24dfbed4b5ee733415572ead5b228e (patch)
treef389feaa5b77a8c10caef76cc0c923be21a00d6e /clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp
parentc2e58e726525943ffa6eef3392de42dc0a769470 (diff)
downloadbcm5719-llvm-552b62ed1f24dfbed4b5ee733415572ead5b228e.tar.gz
bcm5719-llvm-552b62ed1f24dfbed4b5ee733415572ead5b228e.zip
[clang-tidy] implement cppcoreguidelines macro rules
Summary: In short macros are discouraged by multiple rules (and sometimes reference randomly). [Enum.1], [ES.30], [ES.31] This check allows only headerguards and empty macros for annotation. Reviewers: aaron.ballman, hokein Reviewed By: aaron.ballman Subscribers: jbcoe, Eugene.Zelenko, klimek, nemanjai, mgorny, xazax.hun, kbarton, cfe-commits Differential Revision: https://reviews.llvm.org/D41648 llvm-svn: 344940
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp')
-rw-r--r--clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp b/clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp
new file mode 100644
index 00000000000..ea92e19f7ee
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/cppcoreguidelines-macro-usage.cpp
@@ -0,0 +1,18 @@
+// RUN: %check_clang_tidy %s cppcoreguidelines-macro-usage %t
+
+#ifndef INCLUDE_GUARD
+#define INCLUDE_GUARD
+
+#define PROBLEMATIC_CONSTANT 0
+// CHECK-MESSAGES: [[@LINE-1]]:9: warning: macro used to declare a constant; consider using a 'constexpr' constant
+
+#define PROBLEMATIC_FUNCTION(x, y) ((a) > (b) ? (a) : (b))
+// CHECK-MESSAGES: [[@LINE-1]]:9: warning: function-like macro used; consider a 'constexpr' template function
+
+#define PROBLEMATIC_VARIADIC(...) (__VA_ARGS__)
+// CHECK-MESSAGES: [[@LINE-1]]:9: warning: variadic macro used; consider using a 'constexpr' variadic template function
+
+#define PROBLEMATIC_VARIADIC2(x, ...) (__VA_ARGS__)
+// CHECK-MESSAGES: [[@LINE-1]]:9: warning: variadic macro used; consider using a 'constexpr' variadic template function
+
+#endif
OpenPOWER on IntegriCloud