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

            Bug ID: 79650
           Summary: ICE on invalid c++ code with -std=c++1z in
                    convert_nontype_argument (pt.c:6515)
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---

Moved from clang++ test-suite:

$ g++
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp

/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:9:24:
error: ‘"test"’ is not a valid template argument for type ‘const char*’ because
string literals can never be used in this context
   A<const char*, "test"> a; // expected-error {{does not refer to any
declaration}}
                        ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:10:30:
error: ‘"test"’ is not a valid template argument for type ‘const char (&)[5]’
because string literals can never be used in this context
   A<const char (&)[5], "test"> b; // expected-error {{does not refer to any
declaration}}
                              ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:18:25:
error: template argument 2 is invalid
   A<const char*, &arr[0]> c;
                         ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:19:25:
error: template argument 2 is invalid
   A<const char*, &arr[1]> d; // expected-error {{refers to subobject
'&arr[1]'}}
                         ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:20:26:
error: the value of ‘Array::arr’ is not usable in a constant expression
   A<const char*, (&arr)[0]> e;
                          ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:14:8:
note: ‘Array::arr’ was not declared ‘constexpr’
   char arr[3];
        ^~~
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:22:26:
error: template argument 2 is invalid
   A<const char*, &(&x)[0]> g;
                          ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:23:26:
error: template argument 2 is invalid
   A<const char*, &(&x)[1]> h; // expected-error {{refers to subobject '&x +
1'}}
                          ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:24:19:
error: could not convert template argument ‘0’ from ‘int’ to ‘const char*’
   A<const char*, 0> i; // expected-error {{not allowed in a converted
constant}}
                   ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:43:30:
error: could not convert template argument ‘i<int>’ from ‘<unresolved
overloaded function type>’ to ‘void (*)()’
   typedef A<void (*)(), i<int>> e; // expected-error {{is not implicitly
convertible}}
                              ^~
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:45:26:
error: could not convert template argument ‘0’ from ‘int’ to ‘void (*)()’
   typedef A<void (*)(), 0> x; // expected-error {{not allowed in a converted
constant}}
                          ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:
In function ‘void Func()’:
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:50:18:
error: the value of ‘__func__’ is not usable in a constant expression
   A<const char*, __func__> a; // expected-error {{does not refer to any
declaration}}
                  ^~~~~~~~
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:50:18:
note: ‘__func__’ was not declared ‘constexpr’
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:50:26:
error: ‘__func__’ is not a valid template argument of type ‘const char*’
because ‘__func__’ has no linkage
   A<const char*, __func__> a; // expected-error {{does not refer to any
declaration}}
                          ^
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:
In function ‘void LabelAddrDiff::f()’:
/home/marxin/BIG/Programming/llvm-project/llvm/tools/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:55:94:
internal compiler error: in convert_nontype_argument, at cp/pt.c:6515
     a: b: A<int, __builtin_constant_p(true) ? (__INTPTR_TYPE__)&&b -
(__INTPTR_TYPE__)&&a : 0> s; // expected-error {{label address difference}}
                                                                               
              ^
0x8b0d6a convert_nontype_argument
        ../../gcc/cp/pt.c:6515
0x8b526c convert_template_argument
        ../../gcc/cp/pt.c:7657
0x8b6d20 coerce_template_parms
        ../../gcc/cp/pt.c:8117
0x8b72a6 coerce_innermost_template_parms
        ../../gcc/cp/pt.c:8222
0x8b99b0 lookup_template_class_1
        ../../gcc/cp/pt.c:8641
0x8bc5c8 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
        ../../gcc/cp/pt.c:8987
0xa57c75 finish_template_type(tree_node*, tree_node*, int)
        ../../gcc/cp/semantics.c:3151
0x9a14f7 cp_parser_template_id
        ../../gcc/cp/parser.c:15513
0x9adbe0 cp_parser_class_name
        ../../gcc/cp/parser.c:21971
0x98eaa2 cp_parser_qualifying_entity
        ../../gcc/cp/parser.c:6285
0x98d97d cp_parser_nested_name_specifier_opt
        ../../gcc/cp/parser.c:5971
0x9a3990 cp_parser_simple_type_specifier
        ../../gcc/cp/parser.c:16844
0x9a304b cp_parser_type_specifier
        ../../gcc/cp/parser.c:16519
0x99dd17 cp_parser_decl_specifier_seq
        ../../gcc/cp/parser.c:13352
0x99c73a cp_parser_simple_declaration
        ../../gcc/cp/parser.c:12676
0x99c6c2 cp_parser_block_declaration
        ../../gcc/cp/parser.c:12621
0x99bb3a cp_parser_declaration_statement
        ../../gcc/cp/parser.c:12230
0x998250 cp_parser_statement
        ../../gcc/cp/parser.c:10717
0x998e6e cp_parser_statement_seq_opt
        ../../gcc/cp/parser.c:11049
0x998d6b cp_parser_compound_statement
        ../../gcc/cp/parser.c:11003

Reply via email to