Earl Chew wrote:
I can't make up my mind whether the new behaviour is incorrect,
or whether the old behaviour should never have been supported.

I'm pretty certain this is a defect because I can construct a
program that should work, but doesn't.

In any case, I've discovered that this was an aberration of
4.1.0, and does not appear in later versions.



Consider foo.cpp:

    namespace { extern const char f[]; }
    namespace { const char f[] = "abc"; }

    const char* g = f;





Expect variable g to be global, but f to have non-global scope.

3.4.2 Pass
4.1.0 Fail
4.1.1 Pass
4.1.2 Fail


************************ 4.1.2 ***************************************
************************ PASS  ***************************************

        .file   "foo.cpp"
.globl g
        .data
        .align 8
        .type   g, @object
        .size   g, 8
g:
        .quad   _ZN36_GLOBAL__N_foo.cpp_00000000_2B2B2FAE1fE
        .section        .rodata
        .type   _ZN36_GLOBAL__N_foo.cpp_00000000_2B2B2FAE1fE, @object
        .size   _ZN36_GLOBAL__N_foo.cpp_00000000_2B2B2FAE1fE, 4
_ZN36_GLOBAL__N_foo.cpp_00000000_2B2B2FAE1fE:
        .string "abc"
        .ident  "GCC: (GNU) 4.1.2 20070626 (Red Hat 4.1.2-14)"
        .section        .note.GNU-stack,"",@progbits


************************ 4.1.1 ***************************************
************************ PASS  ***************************************

        .file   "foo.cpp"
.globl g
        .data
        .align 4
        .type   g, @object
        .size   g, 4
g:
        .long   _ZN36_GLOBAL__N_foo.cpp_00000000_8E53D9441fE
        .section        .rodata
        .type   _ZN36_GLOBAL__N_foo.cpp_00000000_8E53D9441fE, @object
        .size   _ZN36_GLOBAL__N_foo.cpp_00000000_8E53D9441fE, 4
_ZN36_GLOBAL__N_foo.cpp_00000000_8E53D9441fE:
        .string "abc"
        .ident  "GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-51)"
        .section        .note.GNU-stack,"",@progbits


************************ 4.1.0 ***************************************
************************ FAIL  ***************************************

        .file   "foo.cpp"
.globl _ZN36_GLOBAL__N_foo.cpp_00000000_54D6CB4D1fE
        .section        .rodata
        .type   _ZN36_GLOBAL__N_foo.cpp_00000000_54D6CB4D1fE, @object
        .size   _ZN36_GLOBAL__N_foo.cpp_00000000_54D6CB4D1fE, 4
_ZN36_GLOBAL__N_foo.cpp_00000000_54D6CB4D1fE:
        .string "abc"
.globl g
        .data
        .align 4
        .type   g, @object
        .size   g, 4
g:
        .long   _ZN36_GLOBAL__N_foo.cpp_00000000_54D6CB4D1fE
        .ident  "GCC: (GNU) 4.1.0"
        .section        .note.GNU-stack,"",@progbits


************************ 3.4.2 ***************************************
************************ PASS  ***************************************

        .file   "foo.cpp"
        .globl _ZN36_GLOBAL__N_foo_cpp_00000000_4C2300AC1fE
        .section        .rodata
        .align 2
        .type   _ZN36_GLOBAL__N_foo_cpp_00000000_4C2300AC1fE, @object
        .size   _ZN36_GLOBAL__N_foo_cpp_00000000_4C2300AC1fE, 4
_ZN36_GLOBAL__N_foo_cpp_00000000_4C2300AC1fE:
        .string "abc"
        .globl g
        .section        ".data"
        .align 2
        .type   g, @object
        .size   g, 4
g:
        .long   _ZN36_GLOBAL__N_foo_cpp_00000000_4C2300AC1fE
        .ident  "GCC: (GNU) 3.4.2 (mingw-special)"


Reply via email to