https://github.com/ributzka created https://github.com/llvm/llvm-project/pull/71985
Both options do not affect the AST content that is serialized into the PCM. This commit includes the following changes: 1.) Mark `-fvisibility={}` and `-ftype-visibility={}` as benign options. That means they are no longer considered part of the module hash, which can reduce the number of module variants. 2.) Add a test to clang-scan-deps to ensure only one module is build, even if the above mentioned options are used. This fixes rdar://118246054. >From f6aa9a9e2e7e98bebec82a7b1ed2c11a5ed3d2a6 Mon Sep 17 00:00:00 2001 From: Juergen Ributzka <juer...@ributzka.de> Date: Fri, 10 Nov 2023 12:39:16 -0800 Subject: [PATCH] [clang] Make `-fvisibility={}` and `-ftype-visibility={}` benign options. Both options do not affect the AST content that is serialized into the PCM. This commit includes the following changes: 1.) Mark `-fvisibility={}` and `-ftype-visibility={}` as benign options. That means they are no longer considered part of the module hash, which can reduce the number of module variants. 2.) Add a test to clang-scan-deps to ensure only one module is build, even if the above mentioned options are used. This fixes rdar://118246054. --- clang/include/clang/Basic/LangOptions.def | 4 +- clang/test/ClangScanDeps/strip-visibility.c | 59 +++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 clang/test/ClangScanDeps/strip-visibility.c diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index c541ccefdd5fbe1..6ad6ccbe4a78c5f 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -349,9 +349,9 @@ LANGOPT( "type's inheritance model would be determined under the Microsoft ABI") ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode") -ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility, +BENIGN_ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility, "default visibility for functions and variables [-fvisibility]") -ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility, +BENIGN_ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility, "default visibility for types [-ftype-visibility]") LANGOPT(SetVisibilityForExternDecls, 1, 0, "apply global symbol visibility to external declarations without an explicit visibility") diff --git a/clang/test/ClangScanDeps/strip-visibility.c b/clang/test/ClangScanDeps/strip-visibility.c new file mode 100644 index 000000000000000..3c8de700b12bab1 --- /dev/null +++ b/clang/test/ClangScanDeps/strip-visibility.c @@ -0,0 +1,59 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json + +// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full -mode preprocess-dependency-directives > %t/result.txt + +// RUN: FileCheck %s -input-file %t/result.txt + +// Verify that there's a single version of module A. + +// CHECK: "modules": [ +// CHECK-NEXT: { +// CHECK: "command-line": [ +// CHECK-NOT: "-fvisibility=" +// CHECK-NOT: "-ftype-visibility=" +// CHECK: ] +// CHECK: "name": "A" +// CHECK: } +// CHECK-NOT: "name": "A" +// CHECK: "translation-units" + +//--- cdb.json.template +[ + { + "directory": "DIR", + "command": "clang -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -fsyntax-only DIR/t1.c", + "file": "DIR/t1.c" + }, + { + "directory": "DIR", + "command": "clang -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -fvisibility=hidden -fsyntax-only DIR/t2.c", + "file": "DIR/t2.c" + }, + { + "directory": "DIR", + "command": "clang -Imodules/A -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -fvisibility=hidden -fvisibility-ms-compat -fsyntax-only DIR/t3.c", + "file": "DIR/t3.c" + } +] + +//--- modules/A/module.modulemap + +module A { + umbrella header "A.h" +} + +//--- modules/A/A.h + +typedef int A_t; +extern int a(void); + +//--- t1.c +#include "A.h" + +//--- t2.c +#include "A.h" + +//--- t3.c +#include "A.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits