On Dec 11, 2005, Alexandre Oliva <[EMAIL PROTECTED]> wrote: > On Dec 1, 2005, [EMAIL PROTECTED] (Geoffrey Keating) wrote:
>> The easiest solution to this is to require that weakrefs must be >> 'static', because the name that they define is not visible outside >> this translation unit. > While this is true, not all properties of static names hold for > weakrefs. If the name they refer to is not itself static, none of the > local-binding analysis properties will apply correctly if the wekaref > is marked as static. I felt it was safer to keep it extern. As evidenced by the following testcase: extern int i; static int j __attribute__((weakref("i"))); int f() { return j; } whose output assembly for AMD64 is: [...] movl j(%rip), %eax [...] .weakref j,i [...] So you see, j(%rip) is only valid when a symbol is known to be defined in the same loadable module, but this is definitely not known for the testcase above. I thus propose your change to be reverted, and request you to explain what you were trying to fix with this patch so that I can try to do something about it. -- Alexandre Oliva http://www.lsd.ic.unicamp.br/~oliva/ Red Hat Compiler Engineer [EMAIL PROTECTED], gcc.gnu.org} Free Software Evangelist [EMAIL PROTECTED], gnu.org}