sbc100 created this revision.
Herald added subscribers: wingo, sunfish, dschuff.
sbc100 requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang.

Emscripten wants `-fvisibility=default` by default.  See:
https://github.com/emscripten-core/emscripten/pull/15413

For more disussion around what the default should be see
https://github.com/WebAssembly/tool-conventions/issues/176.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113435

Files:
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/wasm-toolchain.c


Index: clang/test/Driver/wasm-toolchain.c
===================================================================
--- clang/test/Driver/wasm-toolchain.c
+++ clang/test/Driver/wasm-toolchain.c
@@ -12,6 +12,10 @@
 // RUN:   | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
 // FVISIBILITY_DEFAULT-NOT: hidden
 
+// Emscripten is different in that it defaults to default, like other 
non-WebAssembly targets.
+// RUN: %clang %s -### -target wasm32-unknown-emscripten 2>&1 \
+// RUN:   | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
+
 // A basic C link command-line with unknown OS.
 
 // RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown 
--sysroot=/foo %s 2>&1 \
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2288,8 +2288,12 @@
 
 void Clang::AddWebAssemblyTargetArgs(const ArgList &Args,
                                      ArgStringList &CmdArgs) const {
-  // Default to "hidden" visibility.
-  if (!Args.hasArg(options::OPT_fvisibility_EQ,
+  const llvm::Triple &T = getToolChain().getTriple();
+  // Default to "hidden" visibility for WebAssembly targets except
+  // for emscripten which uses the default for compatibility with
+  // existing code.
+  if (T.getOS() != llvm::Triple::Emscripten &&
+      !Args.hasArg(options::OPT_fvisibility_EQ,
                    options::OPT_fvisibility_ms_compat)) {
     CmdArgs.push_back("-fvisibility");
     CmdArgs.push_back("hidden");


Index: clang/test/Driver/wasm-toolchain.c
===================================================================
--- clang/test/Driver/wasm-toolchain.c
+++ clang/test/Driver/wasm-toolchain.c
@@ -12,6 +12,10 @@
 // RUN:   | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
 // FVISIBILITY_DEFAULT-NOT: hidden
 
+// Emscripten is different in that it defaults to default, like other non-WebAssembly targets.
+// RUN: %clang %s -### -target wasm32-unknown-emscripten 2>&1 \
+// RUN:   | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
+
 // A basic C link command-line with unknown OS.
 
 // RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s 2>&1 \
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2288,8 +2288,12 @@
 
 void Clang::AddWebAssemblyTargetArgs(const ArgList &Args,
                                      ArgStringList &CmdArgs) const {
-  // Default to "hidden" visibility.
-  if (!Args.hasArg(options::OPT_fvisibility_EQ,
+  const llvm::Triple &T = getToolChain().getTriple();
+  // Default to "hidden" visibility for WebAssembly targets except
+  // for emscripten which uses the default for compatibility with
+  // existing code.
+  if (T.getOS() != llvm::Triple::Emscripten &&
+      !Args.hasArg(options::OPT_fvisibility_EQ,
                    options::OPT_fvisibility_ms_compat)) {
     CmdArgs.push_back("-fvisibility");
     CmdArgs.push_back("hidden");
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to