From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C3063385803D; Fri, 7 Jan 2022 16:28:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C3063385803D From: "cbcode at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/103943] New: ICE building qualified name inside class with variadic CTAD Date: Fri, 07 Jan 2022 16:28:18 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 11.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: cbcode at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Jan 2022 16:28:18 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D103943 Bug ID: 103943 Summary: ICE building qualified name inside class with variadic CTAD Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: cbcode at gmail dot com Target Milestone: --- // gcc has known problems with variadic CTAD, not sure if this is related. // regression (was fine in v8.3.0). template struct F0 { //OK R(*fun_ptr)(AA...); }; template struct F1 { //OK R(*fun_ptr)(AA...); F1(R(*fun_ptr)(AA...)) : fun_ptr(fun_ptr) {} }; template struct F2 { //OK R(*fun_ptr)(AA...); using fun_ptr_t =3D decltype(fun_ptr); F2(fun_ptr_t fun_ptr) : fun_ptr(fun_ptr) {} }; template struct F3 { R(*fun_ptr)(AA...); // using fun_ptr_t =3D decltype(fun_ptr); //OK as in F2 using fun_ptr_t =3D decltype(F3::fun_ptr); //ICE: Segmentation fault // using fun_ptr_t =3D decltype(F3::fun_ptr); //ICE: Segmentation fault F3(fun_ptr_t fun_ptr) : fun_ptr(fun_ptr) {} }; template struct F4 { static R fun_not_implemented(AA...); // using fun_ptr_t =3D decltype(&fun_not_implemented); //OK using fun_ptr_t =3D decltype(&F4::fun_not_implemented); //OK with aggre= gate initialization (no ctor) // using fun_ptr_t =3D decltype(&F4::fun_not_implemented); //OK = with aggregate initialization (no ctor) fun_ptr_t fun_ptr; }; template struct F5 { //OK static R fun_not_implemented(AA...); using fun_ptr_t =3D decltype(&fun_not_implemented); fun_ptr_t fun_ptr; F5(fun_ptr_t fun_ptr) : fun_ptr(fun_ptr) {} }; template struct F6 { static R fun_not_implemented(AA...); // using fun_ptr_t =3D decltype(&fun_not_implemented); //OK as in F5 using fun_ptr_t =3D decltype(&F6::fun_not_implemented); //ICE: in build_qualified_name, at cp/tree.c:2238 // using fun_ptr_t =3D decltype(&F6::fun_not_implemented); //ICE= : in build_qualified_name, at cp/tree.c:2238 fun_ptr_t fun_ptr; F6(fun_ptr_t fun_ptr) : fun_ptr(fun_ptr) {} }; template F0(R(*fun_ptr)(AA...)) -> F0; template F1(R(*fun_ptr)(AA...)) -> F1; template F2(R(*fun_ptr)(AA...)) -> F2; template F3(R(*fun_ptr)(AA...)) -> F3; template F4(R(*fun_ptr)(AA...)) -> F4; template F5(R(*fun_ptr)(AA...)) -> F5; template F6(R(*fun_ptr)(AA...)) -> F6; int fun(int a) { return a + 1; } #pragma GCC diagnostic ignored "-Wunused-but-set-variable" void test() { auto f0 =3D F0{&fun}; //OK auto f1 =3D F1{&fun}; //OK auto f2 =3D F2{&fun}; //OK auto f3 =3D F3{&fun}; //ICE: Segmentation fault auto f4 =3D F4{&fun}; //OK auto f5 =3D F5{&fun}; //OK auto f6 =3D F6{&fun}; //ICE: in build_qualified_name, at cp/tree.c:2238 }=