I think this may still be necessary (for now). For example, this is the output of `pub extern fn foo() {}`

```
target datalayout = "e-i64:64-f80:128-n8:16:32:64"
target triple = "x86_64-apple-darwin"

define void @_ZN3foo20h2f9dbd5552bebf99daa4v0.0E() unnamed_addr #0 {
"the block":
  call void @_ZN3foo10__rust_abiE()
  ret void
}

; Function Attrs: uwtable
define internal void @_ZN3foo10__rust_abiE() unnamed_addr #1 {
entry-block:
  ret void
}

attributes #0 = { "split-stack" }
attributes #1 = { uwtable "split-stack" }
```

You'll notice that the name of the wrapper is `_ZN3foo10__rust_abiE`, and if we remove the clownshoe abi the name would be `_ZN3fooE`. I believe that this would clash with any C++ function named `foo`.

Until this is fixed, I don't think that we should remove the clownshoe abi (or at least not the symbol associated with it). Others may be more familiar with why this is here than I.