[PATCH] D43540: [WebAssembly] Enable -Werror=strict-prototypes by default

Dan Gohman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 17:21:35 PST 2018


sunfish created this revision.
sunfish added a reviewer: sbc100.
Herald added subscribers: llvm-commits, aheejin, jfb.

WebAssembly, the architecture, is not designed to support unprototyped calling conventions. For example, clang tends to assume that it can use varargs to implement parts of the unprototyped function rules, which works on most other architectures, however WebAssembly has no straightforward way of allowing functions to be callable as both varargs and non-varargs. LLVM's backend does find ways to make things work in some cases, however the support is incomplete. To protect users from accidentally trying to compile such code and encountering bugs, this patch enables -Werror=strict-prototypes by default for the WebAssembly target.


Repository:
  rL LLVM

https://reviews.llvm.org/D43540

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


Index: test/Driver/wasm-toolchain.c
===================================================================
--- test/Driver/wasm-toolchain.c
+++ test/Driver/wasm-toolchain.c
@@ -1,15 +1,21 @@
 // A basic clang -cc1 command-line. WebAssembly is somewhat special in
-// enabling -fvisibility=hidden by default.
+// enabling -fvisibility=hidden and -Werror-strict-prototypes by default.
 
 // RUN: %clang %s -### -no-canonical-prefixes -target wasm32-unknown-unknown 2>&1 | FileCheck -check-prefix=CC1 %s
-// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-fvisibility" "hidden" {{.*}}
+// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-Werror=strict-prototypes" "-fvisibility" "hidden" {{.*}}
 
 // Ditto, but ensure that a user -fvisibility=default disables the default
 // -fvisibility=hidden.
 
 // RUN: %clang %s -### -target wasm32-unknown-unknown -fvisibility=default 2>&1 | FileCheck -check-prefix=FVISIBILITY_DEFAULT %s
 // FVISIBILITY_DEFAULT-NOT: hidden
 
+// Ensure that a user -Wno-strict-prototypes disabled the default
+// -Werror=strict-prototypes.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -Wno-strict-prototypes 2>&1 | FileCheck -check-prefix=WNO_STRICT_PROTOTYPES %s
+// WNO_STRICT_PROTOTYPES: "-Werror=strict-prototypes" {{.*}} "-Wno-strict-prototypes"
+
 // A basic C link command-line.
 
 // RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s 2>&1 | FileCheck -check-prefix=LINK %s
Index: lib/Driver/ToolChains/Clang.cpp
===================================================================
--- lib/Driver/ToolChains/Clang.cpp
+++ lib/Driver/ToolChains/Clang.cpp
@@ -1820,6 +1820,9 @@
 
 void Clang::AddWebAssemblyTargetArgs(const ArgList &Args,
                                      ArgStringList &CmdArgs) const {
+  // WebAssembly doesn't fully support code without prototypes.
+  CmdArgs.push_back("-Werror=strict-prototypes");
+
   // Default to "hidden" visibility.
   if (!Args.hasArg(options::OPT_fvisibility_EQ,
                    options::OPT_fvisibility_ms_compat)) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43540.135175.patch
Type: text/x-patch
Size: 2087 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180221/b28e0727/attachment.bin>


More information about the llvm-commits mailing list