[clang] [clang][modules] Strip LLVM options (PR #75405)

Juergen Ributzka via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 13 16:17:58 PST 2023


https://github.com/ributzka updated https://github.com/llvm/llvm-project/pull/75405

>From ef0b260488d1de1cc89ead90d35cc6abf189fd6c Mon Sep 17 00:00:00 2001
From: Juergen Ributzka <juergen at ributzka.de>
Date: Wed, 13 Dec 2023 15:44:54 -0800
Subject: [PATCH 1/2] [clang][modules] Strip LLVM options

Currently, the dep scanner does not remove LLVM options from the argument list.
Since LLVM options shouldn't affect the AST, it is safe to remove them all.
---
 .../DependencyScanning/ModuleDepCollector.cpp |  2 +
 clang/test/ClangScanDeps/strip-llvm-args.m    | 49 +++++++++++++++++++
 2 files changed, 51 insertions(+)
 create mode 100644 clang/test/ClangScanDeps/strip-llvm-args.m

diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index 4a3cd054f23d92..bfaa897851041d 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -119,6 +119,8 @@ makeCommonInvocationForModuleBuild(CompilerInvocation CI) {
   // units.
   CI.getFrontendOpts().Inputs.clear();
   CI.getFrontendOpts().OutputFile.clear();
+  // LLVM options are not going to affect the AST
+  CI.getFrontendOpts().LLVMArgs.clear();
 
   // TODO: Figure out better way to set options to their default value.
   CI.getCodeGenOpts().MainFileName.clear();
diff --git a/clang/test/ClangScanDeps/strip-llvm-args.m b/clang/test/ClangScanDeps/strip-llvm-args.m
new file mode 100644
index 00000000000000..a2ab1b4ab5c767
--- /dev/null
+++ b/clang/test/ClangScanDeps/strip-llvm-args.m
@@ -0,0 +1,49 @@
+// RUN: rm -rf %t
+// RUN: split-file %s %t
+// RUN: sed -e "s|DIR|%/t|g" %t/cdb1.json.template > %t/cdb1.json
+
+// RUN: clang-scan-deps -compilation-database %t/cdb1.json -format experimental-full > %t/result1.txt
+// RUN: FileCheck %s -input-file %t/result1.txt
+
+// Verify that secondary actions get stripped, and that there's a single version
+// of module A.
+
+// CHECK:        "modules": [
+// CHECK-NEXT:     {
+// CHECK:            "command-line": [
+// CHECK-NOT:          "-treat-scalable-fixed-error-as-warning"
+// CHECK:            ]
+// CHECK:            "name": "A"
+// CHECK:          }
+// CHECK-NOT:        "name": "A"
+// CHECK:        "translation-units"
+
+//--- cdb1.json.template
+[
+  {
+    "directory": "DIR",
+    "command": "clang -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -fsyntax-only DIR/t1.m",
+    "file": "DIR/t1.m"
+  },
+  {
+    "directory": "DIR",
+    "command": "clang -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -mllvm -stackmap-version=2 -fsyntax-only DIR/t2.m",
+    "file": "DIR/t2.m"
+  }
+]
+
+//--- modules/A/module.modulemap
+
+module A {
+  umbrella header "A.h"
+}
+
+//--- modules/A/A.h
+
+typedef int A_t;
+
+//--- t1.m
+ at import A;
+
+//--- t2.m
+ at import A;

>From 427ec5728c06fb95836fee3f25111c873f4246a3 Mon Sep 17 00:00:00 2001
From: Juergen Ributzka <juergen at ributzka.de>
Date: Wed, 13 Dec 2023 16:16:47 -0800
Subject: [PATCH 2/2] Commit missing test changes.

---
 clang/test/ClangScanDeps/strip-llvm-args.m | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/clang/test/ClangScanDeps/strip-llvm-args.m b/clang/test/ClangScanDeps/strip-llvm-args.m
index a2ab1b4ab5c767..ca8eab7729232b 100644
--- a/clang/test/ClangScanDeps/strip-llvm-args.m
+++ b/clang/test/ClangScanDeps/strip-llvm-args.m
@@ -5,13 +5,10 @@
 // RUN: clang-scan-deps -compilation-database %t/cdb1.json -format experimental-full > %t/result1.txt
 // RUN: FileCheck %s -input-file %t/result1.txt
 
-// Verify that secondary actions get stripped, and that there's a single version
-// of module A.
-
 // CHECK:        "modules": [
 // CHECK-NEXT:     {
 // CHECK:            "command-line": [
-// CHECK-NOT:          "-treat-scalable-fixed-error-as-warning"
+// CHECK-NOT:          "-mllvm"
 // CHECK:            ]
 // CHECK:            "name": "A"
 // CHECK:          }



More information about the cfe-commits mailing list