]> granicus.if.org Git - clang/commitdiff
[BPF] do not generate predefined macro bpf
authorYonghong Song <yhs@fb.com>
Fri, 26 Apr 2019 15:35:51 +0000 (15:35 +0000)
committerYonghong Song <yhs@fb.com>
Fri, 26 Apr 2019 15:35:51 +0000 (15:35 +0000)
"DefineStd(Builder, "bpf", Opts)" generates the following three
macros:
  bpf
  __bpf
  __bpf__
and the macro "bpf" is due to the fact that the target language
is C which allows GNU extensions.

The name "bpf" could be easily used as variable name or type
field name. For example, in current linux kernel, there are
four places where bpf is used as a field name. If the corresponding
types are included in bpf program, the compilation error will
occur.

This patch removed predefined macro "bpf" as well as "__bpf" which
is rarely used if used at all.

Signed-off-by: Yonghong Song <yhs@fb.com>
Differential Revision: https://reviews.llvm.org/D61173

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@359310 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets/BPF.cpp
test/Preprocessor/bpf-predefined-macros.c [new file with mode: 0644]

index e0527db59c979606068452d08b4029d1edaa769f..0cf55a58a951264faa657a68eb1e63e91fae83cc 100644 (file)
@@ -20,7 +20,7 @@ using namespace clang::targets;
 
 void BPFTargetInfo::getTargetDefines(const LangOptions &Opts,
                                      MacroBuilder &Builder) const {
-  DefineStd(Builder, "bpf", Opts);
+  Builder.defineMacro("__bpf__");
   Builder.defineMacro("__BPF__");
 }
 
diff --git a/test/Preprocessor/bpf-predefined-macros.c b/test/Preprocessor/bpf-predefined-macros.c
new file mode 100644 (file)
index 0000000..bcb985f
--- /dev/null
@@ -0,0 +1,16 @@
+// RUN: %clang -E -target bpfel -x c -o - %s | FileCheck %s
+// RUN: %clang -E -target bpfeb -x c -o - %s | FileCheck %s
+
+#ifdef __bpf__
+int b;
+#endif
+#ifdef __BPF__
+int c;
+#endif
+#ifdef bpf
+int d;
+#endif
+
+// CHECK: int b;
+// CHECK: int c;
+// CHECK-NOT: int d;