-
Notifications
You must be signed in to change notification settings - Fork 10.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang] Make -fvisibility={}
and -ftype-visibility={}
benign options.
#71985
Conversation
@llvm/pr-subscribers-clang-modules @llvm/pr-subscribers-clang Author: Juergen Ributzka (ributzka) ChangesBoth options do not affect the AST content that is serialized into the PCM. This 1.) Mark 2.) Add a test to clang-scan-deps to ensure only one module is build, even if This fixes rdar://118246054. Full diff: https://github.com/llvm/llvm-project/pull/71985.diff 2 Files Affected:
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"
|
f6aa9a9
to
a6a9ebe
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks.
…ons. 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 verify the generated LLVM IR is not affected by the default visibiliy mode in the module. 3.) 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.
b4db297
to
d9f5a0b
Compare
…ons. (llvm#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 verify the generated LLVM IR is not affected by the default visibiliy mode in the module. 3.) 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.
…ons. (llvm#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 verify the generated LLVM IR is not affected by the default visibiliy mode in the module. 3.) 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.
…ons. (llvm#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 verify the generated LLVM IR is not affected by the default visibiliy mode in the module. 3.) 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. (cherry picked from commit d3b75c4)
…ons. (llvm#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 verify the generated LLVM IR is not affected by the default visibiliy mode in the module. 3.) 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. (cherry picked from commit d3b75c4)
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. Thatmeans they are no longer considered part of the module hash, which can
reduce the number of module variants.
2.) Add a test to verify the generated LLVM IR is not affected by the default
visibiliy mode in the module.
3.) 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.