https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93630

--- Comment #3 from Rodrigo Rivas <rodrigorivascosta at gmail dot com> ---
(In reply to Jakub Jelinek from comment #1)
> Can't reproduce, neither with 9.x, nor trunk, nor various revisions in
> between, different optimization levels etc.  I get '' in all places where it
> should be.
> What exact g++ version are you using, what exact target, what exact g++
> options?

I'm using an up-to-date x64 ArchLinux:
* `g++ --version` reports 9.2.0 (packaged as gcc-9.2.0-4) [1]
* `ld --version` reports 2.33.1 (packaged as binutils-2.33.1-2)

I'm using just `g++ test.cpp`, that will be the x86_64-unknown-linux-gnu
target. I tried also with different optimizations: -O0 -O1, -O2, -O3, -Os,
-Ofast... all the same results.

I've also tried with `-m32`, no changes. I happen to have installed
mingw-w64-gcc version 9.1.0, and running the EXE with Wine, and it also
reproduces the issue.

Doing what Andrew Pinski suggests, adding `-no-pie` changes nothing either.

To discard a weird binutils, I've run the compiler with `g++ -O0 --no-pie
test.cpp -S` and it gives:

        .file   "test.cpp"
        .text
        .section        .rodata
.LC0:
        .string "AA"
.LC1:
        .string "AB"
.LC2:
        .string "BA"
.LC3:
        .string ""
.LC4:
        .string "XX"
        .align 32
        .type   _ZL5group, @object
        .size   _ZL5group, 72
_ZL5group:
        .quad   .LC0
        .quad   .LC1
        .zero   8
        .quad   .LC2
        .zero   16
        .quad   .LC3
        .quad   .LC3
        .quad   .LC4
...

Even in the assembly, you can see how the NULL pointers creep into the array.

Adding the option `-x c` to the above command to force C produces instead:

        .file   "test.cpp"
        .text
        .globl  group
        .section        .rodata
.LC0:
        .string "AA"
.LC1:
        .string "AB"
.LC2:
        .string ""
.LC3:
        .string "BA"
.LC4:
        .string "XX"
        .align 32
        .type   group, @object
        .size   group, 72
group:
        .quad   .LC0
        .quad   .LC1
        .quad   .LC2
        .quad   .LC3
        .quad   .LC2
        .quad   .LC2
        .quad   .LC2
        .quad   .LC2
        .quad   .LC4
...


1: Details at:
https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/gcc
It looks like there are no distro-specific C++ patches, only a few for D.

Reply via email to