Comment 32 for bug 1488254

Revision history for this message
In , Renato Golin (rengolin) wrote :

(In reply to comment #28)
> The incompatibility was introduced by gcc's "automatic tagging of functions
> and variables with tagged types where the tags are not already reflected in
> the mangled name".

So, the original patch would allow the tagging, but this patch made it automatic and compulsory?

I think one of the issues from the original patch is that we didn't need it until it was made compulsory, and that decision was taken and there was little discussion on the effects for Clang until this week, when all release tests started failing.

This was a major cock-up from all of us (me included). I'm not trying to blame people, just understand who should have what responsibility, so that we make sure this doesn't happen again.

> Now every library function with e.g a std::string return type causes linker
> errors.

On AArch64, we don't always get linker errors, but we do get segmentation fault on:

#include <iostream>
int main() { std::cout << "Hello World" << std::endl; }

On Debian unstable and I think the unreleased version of Ubuntu. RedHat, Suse and others may have the same trouble. I was told this was related to the same ABI tag problem, and reading that they've also changed the object layout (not just mangling), this makes a lot of sense. I haven't investigated more than that, I'm afraid.

> To solve this issue, Clang only would have to implement the return type ABI
> tagging. All other ABI tags are irrelevant AFAIK.

If I read correctly, one of the emails says this is only temporary, and wouldn't show in the final object, since C++ doesn't distinguish return types, that's most useful.

That seems to imply that we'd need IR representations, in addition to mangling, and that the back-ends will have to carry it all the way to assembly (but not object) output, which doesn't seem like a small change. If this needs to stay until emission, we can't use metadata, it needs to be a full-fledged IR construct.