[PATCH] D113435: [Clang][Emscripten]: Don't default to -fvisibility=hidden

Sam Clegg via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 8 14:02:45 PST 2021


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");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113435.385628.patch
Type: text/x-patch
Size: 1558 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211108/e46e52ba/attachment-0001.bin>


More information about the cfe-commits mailing list