[PATCH] D58304: [WebAssembly] Warn but don't error on conflicting uses of prototype-less functions

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 20 14:40:37 PST 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL354523: [WebAssembly] Don't error on conflicting uses of prototype-less functions (authored by sbc, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D58304?vs=187103&id=187681#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58304/new/

https://reviews.llvm.org/D58304

Files:
  llvm/trunk/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
  llvm/trunk/test/CodeGen/WebAssembly/add-prototypes-conflit.ll


Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
===================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
@@ -89,22 +89,24 @@
     Function *NewF = nullptr;
     for (Use &U : F.uses()) {
       LLVM_DEBUG(dbgs() << "prototype-less use: " << F.getName() << "\n");
+      LLVM_DEBUG(dbgs() << *U.getUser() << "\n");
       if (auto *BC = dyn_cast<BitCastOperator>(U.getUser())) {
         if (auto *DestType = dyn_cast<FunctionType>(
                 BC->getDestTy()->getPointerElementType())) {
           if (!NewType) {
             // Create a new function with the correct type
             NewType = DestType;
+            LLVM_DEBUG(dbgs() << "found function type: " << *NewType << "\n");
             NewF = Function::Create(NewType, F.getLinkage(), F.getName() + ".fixed_sig");
             NewF->setAttributes(F.getAttributes());
             NewF->removeFnAttr("no-prototype");
             Replacements.emplace_back(&F, NewF);
-          } else {
-            if (NewType != DestType) {
-              report_fatal_error("Prototypeless function used with "
-                                 "conflicting signatures: " +
-                                 F.getName());
-            }
+          } else if (NewType != DestType) {
+            errs() << "warning: prototype-less function used with "
+                      "conflicting signatures: "
+                   << F.getName() << "\n";
+            LLVM_DEBUG(dbgs() << "  " << *DestType << "\n");
+            LLVM_DEBUG(dbgs() << "  "<<  *NewType << "\n");
           }
         }
       }
Index: llvm/trunk/test/CodeGen/WebAssembly/add-prototypes-conflit.ll
===================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/add-prototypes-conflit.ll
+++ llvm/trunk/test/CodeGen/WebAssembly/add-prototypes-conflit.ll
@@ -0,0 +1,22 @@
+; RUN: opt -S -wasm-add-missing-prototypes -o %t.ll %s 2>&1 | FileCheck %s -check-prefix=WARNING
+; RUN: cat %t.ll | FileCheck %s
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm32-unknown-unknown"
+
+; WARNING: warning: prototype-less function used with conflicting signatures: foo
+
+; CHECK-LABEL: @call_with_conflicting_prototypes
+; CHECK: %call1 = call i64 bitcast (i64 (i32, i32)* @foo to i64 (i32)*)(i32 42)
+; CHECK: %call2 = call i64 @foo(i32 42, i32 43)
+define void @call_with_conflicting_prototypes() {
+  %call1 = call i64 bitcast (i64 (...)* @foo to i64 (i32)*)(i32 42)
+  %call2 = call i64 bitcast (i64 (...)* @foo to i64 (i32, i32)*)(i32 42, i32 43)
+  ret void
+}
+
+; CHECK: declare extern_weak i64 @foo(i32, i32)
+declare extern_weak i64 @foo(...) #1
+
+; CHECK-NOT: attributes {{.*}} = { {{.*}}"no-prototype"{{.*}} }
+attributes #1 = { "no-prototype" }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58304.187681.patch
Type: text/x-patch
Size: 2938 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190220/93c4d164/attachment.bin>


More information about the llvm-commits mailing list