From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 0F7EE3951874; Thu, 29 Apr 2021 07:34:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0F7EE3951874 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/100326] Crash with `#pragma GCC unroll` when calling value which can't be called in template function Date: Thu, 29 Apr 2021 07:34:43 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: ice-on-invalid-code X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: NEW 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: everconfirmed keywords bug_status cf_reconfirmed_on Message-ID: In-Reply-To: References: 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: Thu, 29 Apr 2021 07:34:44 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D100326 Richard Biener changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Keywords| |ice-on-invalid-code Status|UNCONFIRMED |NEW Last reconfirmed| |2021-04-29 --- Comment #1 from Richard Biener --- Confirmed. #0 0x0000000000d66842 in cp_parser_pragma_unroll (parser=3D0x7ffff65977b8,= =20 pragma_tok=3D0x7ffff7f2f0c8) at /home/rguenther/src/gcc3/gcc/cp/parser.c:44896 44896 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr)) (gdb) l 44891 location_t location =3D cp_lexer_peek_token (parser->lexer)->loca= tion; 44892 tree expr =3D cp_parser_constant_expression (parser); 44893 unsigned short unroll; 44894 expr =3D maybe_constant_value (expr); 44895 HOST_WIDE_INT lunroll =3D 0; 44896 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr)) 44897 || TREE_CODE (expr) !=3D INTEGER_CST 44898 || (lunroll =3D tree_to_shwi (expr)) < 0 44899 || lunroll >=3D USHRT_MAX) 44900 { (gdb) p debug_tree (expr) > used VOID t.ii:1:31 align:8 warn_if_not_align:0 context > t.ii:2:25 start: t.ii:2:24 finish: t.ii:2:26> so we parsed this to an invalid GENERIC CALL_EXPR with a NULL TREE_TYPE (gdb) p expr->typed.type $3 =3D it should have at least been error_mark_node (or void_type_node).=