Ah yes, I think I mean to specify non-Rust calling conventions. So those would still be ok.
The main issue is that they’re not properly implemented, a good number of ICEs are due to people using extern on methods. They probably could be made to work, but I’d prefer to just disallow it. On traits, their use could potentially limit the types they can be implemented on (at least without causing warnings).
Ultimately, I’m not convinced that use of a non-Rust calling convention for methods is anything other than a mistake in most cases. The only two cases for declaring a non-Rust calling convention on a function are 1) linking to a foreign library that exposes the function and 2) passing a function to a foreign function that expects a certain calling convention. The first one isn’t applicable, as you can’t expose methods like that from object files, and while the second case can apply, a regular function works equally as well and is arguably much clearer.