Public bug reported:

Environment
-----------

* GCC version:
  * gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)
* Target:
  * x86_64-linux-gnu
* Configure options (from g++ -v):
  * Configured with: ../src/configure -v --with-pkgversion='Ubuntu 
13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs 
--enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr 
--with-gcc-major-version-only --program-suffix=-13 
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id 
--libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix 
--libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu 
--enable-libstdcxx-debug --enable-libstdcxx-time=yes 
--with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace 
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin 
--enable-default-pie --with-system-zlib --enable-libphobos-checking=release 
--with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch 
--disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic 
--enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr
 --enable-offload-defaulted --without-cuda-driver --enable-checking=release 
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2

System type
-----------

* x86_64-linux-gnu on Ubuntu 24.04.

Minimal reproducer (gcc_ice_min7.cpp)
-------------------------------------

It is reduced to what appears to be the smallest form that still crashes
GCC. Removing any piece tends to avoid the ICE.

template <int* Ptr>
struct StaticIntPtr {};

template <typename P>
struct S {
    union { P payload; };
    S() {}
};

S<int> n{};
S<StaticIntPtr<&n.payload>> m;

int main() { return 0; }

Command line to reproduce
-------------------------

* g++ -std=c++20 -O2 -Wall -Wextra -pedantic -v -o gcc_ice_min7.gcc
gcc_ice_min7.cpp

Compiler output
---------------

* Excerpt from a failing build (segmentation fault/ICE):

$ g++ -std=c++20 -O2 -Wall -Wextra -pedantic -o gcc_ice_min7 gcc_ice_min7.cpp
gcc_ice_min7.cpp: In instantiation of ‘S<P>::S() [with P = StaticIntPtr<(& 
n.S<int>::<anonymous>.S<int>::<unnamed union>::payload)>]’:
gcc_ice_min7.cpp:7:10:   required from ‘S<P>::S() [with P = StaticIntPtr<(& 
n.S<int>::<anonymous>.S<int>::<unnamed union>::payload)>]’
gcc_ice_min7.cpp:11:29:   required from here
gcc_ice_min7.cpp:7:5: internal compiler error: Нарушение на 
разделянето(segfault)
    7 |     S() {}
      |     ^
0x70b3b6a4532f ???
        ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x70b3b6a2a1c9 __libc_start_call_main
        ../sysdeps/nptl/libc_start_call_main.h:58
0x70b3b6a2a28a __libc_start_main_impl
        ../csu/libc-start.c:360
Please submit a full bug report, with preprocessed source (by using 
-freport-bug).
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-13/README.Bugs> for instructions.

Observed behavior
-----------------

* GCC 13.3.0 crashes with an ICE (segmentation fault) when compiling the above 
code.
* Clang (tested with libc++) compiles similar patterns without error.

Expected behavior
-----------------

* The code should either compile or be rejected with a diagnostic, but
it should not cause an internal compiler error.

Notes
-----

* The reproducer uses:
  * A single NTTP overall (pointer to subobject &n.payload embedded in the type 
parameter P = StaticIntPtr<&n.payload>).
  * A simple anonymous union { P payload; } inside S.
  * Static objects n and m in the same translation unit.
* The ICE seems tied to using the address of an anonymous union/struct 
subobject as an NTTP.  The program compiles if instead of the anonymous union, 
a named union is used.

Attachment
----------

Preprocessed source produced by:
* g++ -std=c++20 -E gcc_ice_min7.cpp -o gcc_ice_min7.ii

** Affects: gcc-13 (Ubuntu)
     Importance: Undecided
         Status: New

** Attachment added: "Preprocessed source"
   
https://bugs.launchpad.net/bugs/2122360/+attachment/5907855/+files/gcc_ice_min7.ii

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2122360

Title:
  GCC 13.3.0 ICE: pointer to subobject used as non-type template
  parameter in minimal template instantiation (anonymous union member)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-13/+bug/2122360/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to