re PR c++/84661 (internal compiler error: Segmentation fault (strip_array_types()))
/cp 2019-03-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84661 PR c++/85013 * parser.c (cp_parser_binary_expression): Don't call cp_fully_fold to undo the disabling of warnings. /testsuite 2019-03-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84661 PR c++/85013 * g++.dg/concepts/pr84661.C: New. * g++.dg/torture/pr85013.C: Likewise. From-SVN: r269923
This commit is contained in:
parent
b25e675d7d
commit
0abbc99c02
5 changed files with 38 additions and 12 deletions
|
@ -1,3 +1,10 @@
|
|||
2019-03-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84661
|
||||
PR c++/85013
|
||||
* parser.c (cp_parser_binary_expression): Don't call cp_fully_fold
|
||||
to undo the disabling of warnings.
|
||||
|
||||
2019-03-25 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/87748 - substitution failure error with decltype.
|
||||
|
|
|
@ -9443,6 +9443,7 @@ cp_parser_binary_expression (cp_parser* parser, bool cast_p,
|
|||
{
|
||||
cp_parser_expression_stack stack;
|
||||
cp_parser_expression_stack_entry *sp = &stack[0];
|
||||
cp_parser_expression_stack_entry *disable_warnings_sp = NULL;
|
||||
cp_parser_expression_stack_entry current;
|
||||
cp_expr rhs;
|
||||
cp_token *token;
|
||||
|
@ -9506,12 +9507,14 @@ cp_parser_binary_expression (cp_parser* parser, bool cast_p,
|
|||
|
||||
/* For "false && x" or "true || x", x will never be executed;
|
||||
disable warnings while evaluating it. */
|
||||
if (current.tree_type == TRUTH_ANDIF_EXPR)
|
||||
c_inhibit_evaluation_warnings +=
|
||||
cp_fully_fold (current.lhs) == truthvalue_false_node;
|
||||
else if (current.tree_type == TRUTH_ORIF_EXPR)
|
||||
c_inhibit_evaluation_warnings +=
|
||||
cp_fully_fold (current.lhs) == truthvalue_true_node;
|
||||
if ((current.tree_type == TRUTH_ANDIF_EXPR
|
||||
&& cp_fully_fold (current.lhs) == truthvalue_false_node)
|
||||
|| (current.tree_type == TRUTH_ORIF_EXPR
|
||||
&& cp_fully_fold (current.lhs) == truthvalue_true_node))
|
||||
{
|
||||
disable_warnings_sp = sp;
|
||||
++c_inhibit_evaluation_warnings;
|
||||
}
|
||||
|
||||
/* Extract another operand. It may be the RHS of this expression
|
||||
or the LHS of a new, higher priority expression. */
|
||||
|
@ -9557,12 +9560,11 @@ cp_parser_binary_expression (cp_parser* parser, bool cast_p,
|
|||
}
|
||||
|
||||
/* Undo the disabling of warnings done above. */
|
||||
if (current.tree_type == TRUTH_ANDIF_EXPR)
|
||||
c_inhibit_evaluation_warnings -=
|
||||
cp_fully_fold (current.lhs) == truthvalue_false_node;
|
||||
else if (current.tree_type == TRUTH_ORIF_EXPR)
|
||||
c_inhibit_evaluation_warnings -=
|
||||
cp_fully_fold (current.lhs) == truthvalue_true_node;
|
||||
if (sp == disable_warnings_sp)
|
||||
{
|
||||
disable_warnings_sp = NULL;
|
||||
--c_inhibit_evaluation_warnings;
|
||||
}
|
||||
|
||||
if (warn_logical_not_paren
|
||||
&& TREE_CODE_CLASS (current.tree_type) == tcc_comparison
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2019-03-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84661
|
||||
PR c++/85013
|
||||
* g++.dg/concepts/pr84661.C: New.
|
||||
* g++.dg/torture/pr85013.C: Likewise.
|
||||
|
||||
2019-03-25 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/89214 - ICE when initializing aggregates with bases.
|
||||
|
|
7
gcc/testsuite/g++.dg/concepts/pr84661.C
Normal file
7
gcc/testsuite/g++.dg/concepts/pr84661.C
Normal file
|
@ -0,0 +1,7 @@
|
|||
// { dg-do compile { target c++14 } }
|
||||
// { dg-additional-options "-fconcepts" }
|
||||
|
||||
struct S {
|
||||
int &a;
|
||||
void foo (decltype(((a = 0) || ((auto))))); // { dg-error "expected" }
|
||||
};
|
3
gcc/testsuite/g++.dg/torture/pr85013.C
Normal file
3
gcc/testsuite/g++.dg/torture/pr85013.C
Normal file
|
@ -0,0 +1,3 @@
|
|||
// { dg-additional-options "-std=c++14 -fconcepts" }
|
||||
|
||||
a(decltype((0 > 1e91 && 1e31 && (auto)))); // { dg-error "expected" }
|
Loading…
Add table
Reference in a new issue