Public bug reported:

From the versions installed on my machine, the bug occurs in g++ 10.2.0,
g++ 10.3.0 and g++ 11.1.0, the only argument in -std=c++2a. The code
works on version 9.3.0 with -std=c++2a and -fconcepts. I have also
compiled with clang++ 12.0.0 without problems. The bug occurs when two
or more classes declare a template friend function with a requires. The
return type, number of arguments, number of template parameters, and
condition for requires does not make any difference.Example:
class Foo
    {
        template <typename T>
        friend void func() requires true;
    };
    class Bar
    {
        template <typename T>
        friend void func() requires true;
    };

This code results in the following error message:

internal compiler error: Segmentation fault
    9 |         friend void func() requires true;
      |                                     ^~~~
0xe30681 internal_error(char const*, ...)
        ???:0
0xf54144 duplicate_decls(tree_node*, tree_node*, bool, bool)
        ???:0
0xf5da9b pushdecl_namespace_level(tree_node*, bool)
        ???:0
0x109001a push_template_decl(tree_node*, bool)
        ???:0
0x151d391 do_friend(tree_node*, tree_node*, tree_node*, tree_node*, 
overload_flags, bool)
        ???:0
0xfbfc27 grokdeclarator(cp_declarator const*, cp_decl_specifier_seq*, 
decl_context, int, tree_node**)
        ???:0
0x1003fd4 grokfield(cp_declarator const*, cp_decl_specifier_seq*, tree_node*, 
bool, tree_node*, tree_node*)
        ???:0
0x1492c03 c_parse_file()
        ???:0
0x148061e c_common_parse_file()
        ???:0
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-11/README.Bugs> for instructions.

On g++-10.x the error is only

internal compiler error: Segmentation fault
    9 |         friend void func() requires true;
      |                                     ^~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.


Whether the function actually exists does not have any impact. The error 
message always points to the second definition, in this case Bar.

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

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

Title:
  Friend function with requires causes segfault

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


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to