The following valid code snippet triggers an ICE since GCC 6.1.0: ========================================= template<typename> int foo() { return sizeof(int) > 1 ? : 1; } ========================================= bug.cc: In function 'int foo()': bug.cc:3:30: internal compiler error: tree check: did not expect class 'type', have 'type' (integer_type) in contains_placeholder_p, at tree.c:3743 return sizeof(int) > 1 ? : 1; ^ 0x78a86d tree_not_class_check_failed(tree_node const*, tree_code_class, char const*, int, char const*) ../../gcc/gcc/tree.c:9434 0x78dd72 non_type_check(tree_node*, char const*, int, char const*) ../../gcc/gcc/tree.h:3311 0x78dd72 contains_placeholder_p(tree_node const*) ../../gcc/gcc/tree.c:3743 0x11412a5 contains_placeholder_p(tree_node const*) ../../gcc/gcc/tree.c:3745 0x1141042 contains_placeholder_p(tree_node const*) ../../gcc/gcc/tree.c:3746 0x1141723 save_expr(tree_node*) ../../gcc/gcc/tree.c:3571 0x82af04 build_conditional_expr_1 ../../gcc/gcc/cp/call.c:4808 0x82c44a build_conditional_expr(unsigned int, tree_node*, tree_node*, tree_node*, int) ../../gcc/gcc/cp/call.c:5390 0x9d0095 build_x_conditional_expr(unsigned int, tree_node*, tree_node*, tree_node*, int) ../../gcc/gcc/cp/typeck.c:6563 0x913cc3 cp_parser_question_colon_clause ../../gcc/gcc/cp/parser.c:9441 0x913064 cp_parser_assignment_expression ../../gcc/gcc/cp/parser.c:9480 0x913708 cp_parser_expression ../../gcc/gcc/cp/parser.c:9643 0x91be8b cp_parser_jump_statement ../../gcc/gcc/cp/parser.c:12396 0x91be8b cp_parser_statement ../../gcc/gcc/cp/parser.c:10810 0x91cc30 cp_parser_statement_seq_opt ../../gcc/gcc/cp/parser.c:11255 0x91cd07 cp_parser_compound_statement ../../gcc/gcc/cp/parser.c:11209 0x933460 cp_parser_function_body ../../gcc/gcc/cp/parser.c:21747 0x933460 cp_parser_ctor_initializer_opt_and_function_body ../../gcc/gcc/cp/parser.c:21784 0x933d10 cp_parser_function_definition_after_declarator ../../gcc/gcc/cp/parser.c:26685 0x934a27 cp_parser_function_definition_from_specifiers_and_declarator ../../gcc/gcc/cp/parser.c:26601 Please submit a full bug report, [etc.]
Seems doable.
Author: paolo Date: Tue Feb 13 21:23:22 2018 New Revision: 257638 URL: https://gcc.gnu.org/viewcvs?rev=257638&root=gcc&view=rev Log: /cp 2018-02-13 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84333 * call.c (build_conditional_expr_1): Use cp_save_expr instead of save_expr for the G++ extension. /testsuite 2018-02-13 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84333 * g++.dg/template/sizeof16.C: New. * g++.dg/template/sizeof17.C: Likewise. Added: trunk/gcc/testsuite/g++.dg/template/sizeof16.C trunk/gcc/testsuite/g++.dg/template/sizeof17.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/call.c trunk/gcc/testsuite/ChangeLog
Fixed in trunk.
GCC 6 branch is being closed
Fixed in GCC 8.