public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
@ 2021-02-22 14:28 jbaptistapsilva at yahoo dot com.br
  2021-02-22 14:34 ` [Bug c++/99200] " jbaptistapsilva at yahoo dot com.br
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: jbaptistapsilva at yahoo dot com.br @ 2021-02-22 14:28 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 99200
           Summary: __PRETTY_FUNCTION__ used as template parameter causes
                    internal compiler error (segmentation fault)
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jbaptistapsilva at yahoo dot com.br
  Target Milestone: ---

Created attachment 50235
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50235&action=edit
Preprocessor output

Trying to use the macro __PRETTY_FUNCTION__ as a string-literal converted type
parameter (using the new feature of literal classes as non-type template
parameters, and using the technique applied here:
https://ctrpeach.io/posts/cpp20-string-literal-template-parameters/) causes a
segmentation fault on the compiler, which is then posted as an internal
compiler error.

The version, system type and configuration options are:
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
10.2.0-5ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-10
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--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 --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-10-WJNXnb/gcc-10-10.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-WJNXnb/gcc-10-10.2.0/debian/tmp-gcn/usr,hsa
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
gcc version 10.2.0 (Ubuntu 10.2.0-5ubuntu1~20.04)
Compiler executable checksum: d716f9df9d1b12ebc8fe860554136f35

The entire command line used was this:
g++-10 -std=c++2a -O3 pretty-function-segfault-gcc-10.cpp

The compiler output for the file is:
pretty-function-segfault-gcc-10.cpp: In function ‘consteval const char*
type_name()’:
pretty-function-segfault-gcc-10.cpp:37:49: internal compiler error:
Segmentation fault
   37 |     return TypeNameConverter<__PRETTY_FUNCTION__>{};
      |                                                 ^

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
@ 2021-02-22 14:34 ` jbaptistapsilva at yahoo dot com.br
  2021-02-22 15:24 ` mpolacek at gcc dot gnu.org
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: jbaptistapsilva at yahoo dot com.br @ 2021-02-22 14:34 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from JoaoBapt <jbaptistapsilva at yahoo dot com.br> ---
I created a Godbolt snippet which also shows that the bug is still there in GCC
11. The entire output (but the .ii) is there on the command line:
https://godbolt.org/z/njMM3f

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
  2021-02-22 14:34 ` [Bug c++/99200] " jbaptistapsilva at yahoo dot com.br
@ 2021-02-22 15:24 ` mpolacek at gcc dot gnu.org
  2021-02-22 15:32 ` jakub at gcc dot gnu.org
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-02-22 15:24 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-02-22
           See Also|                            |https://gcc.gnu.org/bugzill
                   |                            |a/show_bug.cgi?id=93383
             Status|UNCONFIRMED                 |NEW
                 CC|                            |mpolacek at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Looks like a dup of 93383.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
  2021-02-22 14:34 ` [Bug c++/99200] " jbaptistapsilva at yahoo dot com.br
  2021-02-22 15:24 ` mpolacek at gcc dot gnu.org
@ 2021-02-22 15:32 ` jakub at gcc dot gnu.org
  2021-02-22 17:09 ` jbaptistapsilva at yahoo dot com.br
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-22 15:32 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly reduced:

template <int N>
struct A
{
  constexpr A (const char (&s)[N]) { for (int i = 0; i < N; i++) v[i] = s[i];
v[N] = 0; }
  char v[N + 1];
};

template <A s>
struct B
{
  constexpr operator const char *() { return s.v; }
};

template <typename T>
const char *
foo ()
{ 
  return B<__PRETTY_FUNCTION__>{};
}

template <typename T>
const char *
bar ()
{ 
  return B<__FUNCTION__>{};
}

int
main ()
{
  auto a = foo <int> ();
  auto b = bar <double> ();
}

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (2 preceding siblings ...)
  2021-02-22 15:32 ` jakub at gcc dot gnu.org
@ 2021-02-22 17:09 ` jbaptistapsilva at yahoo dot com.br
  2021-02-23 11:07 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: jbaptistapsilva at yahoo dot com.br @ 2021-02-22 17:09 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from JoaoBapt <jbaptistapsilva at yahoo dot com.br> ---
(In reply to Marek Polacek from comment #2)
> Looks like a dup of 93383.

No, because it works perfectly when I substitute __PRETTY_FUNCTION__ for any
other string literal, even as big as one that would be "returned" by
__PRETTY_FUNCTION__ (I tested with, for example, "consteval const char*
type_name<T>() [with T = double]" and it did not crash and worked perfectly).

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (3 preceding siblings ...)
  2021-02-22 17:09 ` jbaptistapsilva at yahoo dot com.br
@ 2021-02-23 11:07 ` redi at gcc dot gnu.org
  2021-03-03 21:11 ` mpolacek at gcc dot gnu.org
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: redi at gcc dot gnu.org @ 2021-02-23 11:07 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to JoaoBapt from comment #0)
> Trying to use the macro __PRETTY_FUNCTION__ as a string-literal converted

N.B.

"These identifiers are variables, not preprocessor macros"

See https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (4 preceding siblings ...)
  2021-02-23 11:07 ` redi at gcc dot gnu.org
@ 2021-03-03 21:11 ` mpolacek at gcc dot gnu.org
  2021-04-24  4:15 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-03-03 21:11 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
(In reply to JoaoBapt from comment #4)
> (In reply to Marek Polacek from comment #2)
> > Looks like a dup of 93383.
> 
> No, because it works perfectly when I substitute __PRETTY_FUNCTION__ for any
> other string literal

That doesn't really matter; the ICE is very much like the one I described in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93383#c3, only this time we don't
have a COMPONENT_REF that is type-less, it's an identifier_node.  Therefore I
suspect the fix ought to handle both issues.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (5 preceding siblings ...)
  2021-03-03 21:11 ` mpolacek at gcc dot gnu.org
@ 2021-04-24  4:15 ` cvs-commit at gcc dot gnu.org
  2021-04-27 21:24 ` cvs-commit at gcc dot gnu.org
  2021-05-01 18:46 ` ppalka at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-04-24  4:15 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:bcd77b7b9f35bd5b559ed593c3b3e346c1e6f364

commit r12-100-gbcd77b7b9f35bd5b559ed593c3b3e346c1e6f364
Author: Patrick Palka <ppalka@redhat.com>
Date:   Sat Apr 24 00:14:29 2021 -0400

    c++: do_class_deduction and dependent init [PR93383]

    Here we're crashing during CTAD with a dependent initializer (performed
    from convert_template_argument) because one of the initializer's
    elements has an empty TREE_TYPE, which ends up making resolve_args
    unhappy.

    Besides the case where we're initializing one template placeholder
    from another, which is already specifically handled earlier in
    do_class_deduction, it seems we can't in general correctly resolve a
    template placeholder using a dependent initializer, so this patch makes
    the function just punt until instantiation time instead.

    gcc/cp/ChangeLog:

            PR c++/89565
            PR c++/93383
            PR c++/95291
            PR c++/99200
            PR c++/99683
            * pt.c (do_class_deduction): Punt if the initializer is
            type-dependent.

    gcc/testsuite/ChangeLog:

            PR c++/89565
            PR c++/93383
            PR c++/95291
            PR c++/99200
            PR c++/99683
            * g++.dg/cpp2a/nontype-class39.C: Remove dg-ice directive.
            * g++.dg/cpp2a/nontype-class45.C: New test.
            * g++.dg/cpp2a/nontype-class46.C: New test.
            * g++.dg/cpp2a/nontype-class47.C: New test.
            * g++.dg/cpp2a/nontype-class48.C: New test.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (6 preceding siblings ...)
  2021-04-24  4:15 ` cvs-commit at gcc dot gnu.org
@ 2021-04-27 21:24 ` cvs-commit at gcc dot gnu.org
  2021-05-01 18:46 ` ppalka at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-04-27 21:24 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:9532344edcf77c7c7b0fa5da31c1b9dd2850288e

commit r11-8309-g9532344edcf77c7c7b0fa5da31c1b9dd2850288e
Author: Patrick Palka <ppalka@redhat.com>
Date:   Sat Apr 24 00:14:29 2021 -0400

    c++: do_class_deduction and dependent init [PR93383]

    Here we're crashing during CTAD with a dependent initializer (performed
    from convert_template_argument) because one of the initializer's
    elements has an empty TREE_TYPE, which ends up making resolve_args
    unhappy.

    Besides the case where we're initializing one template placeholder
    from another, which is already specifically handled earlier in
    do_class_deduction, it seems we can't in general correctly resolve a
    template placeholder using a dependent initializer, so this patch makes
    the function just punt until instantiation time instead.

    gcc/cp/ChangeLog:

            PR c++/89565
            PR c++/93383
            PR c++/95291
            PR c++/99200
            PR c++/99683
            * pt.c (do_class_deduction): Punt if the initializer is
            type-dependent.

    gcc/testsuite/ChangeLog:

            PR c++/89565
            PR c++/93383
            PR c++/95291
            PR c++/99200
            PR c++/99683
            * g++.dg/cpp2a/nontype-class39.C: Remove dg-ice directive.
            * g++.dg/cpp2a/nontype-class45.C: New test.
            * g++.dg/cpp2a/nontype-class46.C: New test.
            * g++.dg/cpp2a/nontype-class47.C: New test.
            * g++.dg/cpp2a/nontype-class48.C: New test.

    (cherry picked from commit bcd77b7b9f35bd5b559ed593c3b3e346c1e6f364)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/99200] __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault)
  2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
                   ` (7 preceding siblings ...)
  2021-04-27 21:24 ` cvs-commit at gcc dot gnu.org
@ 2021-05-01 18:46 ` ppalka at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-05-01 18:46 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
                 CC|                            |ppalka at gcc dot gnu.org
   Target Milestone|---                         |11.2
             Status|NEW                         |RESOLVED

--- Comment #9 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed for GCC 11.2 and 12.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-05-01 18:46 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-22 14:28 [Bug c++/99200] New: __PRETTY_FUNCTION__ used as template parameter causes internal compiler error (segmentation fault) jbaptistapsilva at yahoo dot com.br
2021-02-22 14:34 ` [Bug c++/99200] " jbaptistapsilva at yahoo dot com.br
2021-02-22 15:24 ` mpolacek at gcc dot gnu.org
2021-02-22 15:32 ` jakub at gcc dot gnu.org
2021-02-22 17:09 ` jbaptistapsilva at yahoo dot com.br
2021-02-23 11:07 ` redi at gcc dot gnu.org
2021-03-03 21:11 ` mpolacek at gcc dot gnu.org
2021-04-24  4:15 ` cvs-commit at gcc dot gnu.org
2021-04-27 21:24 ` cvs-commit at gcc dot gnu.org
2021-05-01 18:46 ` ppalka at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).