[patch][pr22217] Use the most recent decl for mangling

John McCall rjmccall at apple.com
Fri Jan 23 00:25:49 PST 2015

> On Jan 22, 2015, at 4:52 PM, Rafael Espíndola <rafael.espindola at gmail.com> wrote:
> Sent the email a bit early.
>>> That is not what I am seeing with gcc. Given
>>> int pr22217_foo;
>>> int *b = &pr22217_foo;
>>> extern int pr22217_foo __attribute__((section("zed")));

This should be an error in both C and C++.  I see absolutely no reason to allow a declaration following a definition (even a tentative definition) to add a section attribute.  We should not be afraid to reject stupidly-written code when it abuses language extensions, even when they’re not “our” extensions.

There are fair arguments against our current emit-as-you-go IRGen model, but allowing us to more perfectly emulate GCC’s bugs is not one of them.  Nor is there a need to exactly copy GCC’s visibility model in every conceivable case.  One very nice incidental advantage of emit-as-you-go is that it encourages us to ensure that language decisions are made locally by the declarations involved, which — beyond simply being better language design in and of itself — also means that they’re not susceptible to random breakage by differences in module import.


More information about the cfe-commits mailing list