llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Juergen Ributzka (ributzka) <details> <summary>Changes</summary> 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. --- Full diff: https://github.com/llvm/llvm-project/pull/71985.diff 2 Files Affected: - (modified) clang/include/clang/Basic/LangOptions.def (+2-2) - (added) clang/test/ClangScanDeps/strip-visibility.c (+59) ``````````diff 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" `````````` </details> https://github.com/llvm/llvm-project/pull/71985 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits