re PR c++/80297 (Compiler time crash: type mismatch in binary expression)
PR c++/80297 * genmatch.c (capture::gen_transform): For GENERIC unshare_expr captures used multiple times, except for the last use. * generic-match-head.c: Include gimplify.h. * g++.dg/torture/pr80297.C: New test. Co-Authored-By: Richard Biener <rguenther@suse.de> From-SVN: r246693
This commit is contained in:
parent
d16e2ddd26
commit
e1201dff2f
5 changed files with 36 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
|||
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||
Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c++/80297
|
||||
* genmatch.c (capture::gen_transform): For GENERIC unshare_expr
|
||||
captures used multiple times, except for the last use.
|
||||
* generic-match-head.c: Include gimplify.h.
|
||||
|
||||
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/79390
|
||||
|
|
|
@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "builtins.h"
|
||||
#include "dumpfile.h"
|
||||
#include "case-cfn-macros.h"
|
||||
#include "gimplify.h"
|
||||
|
||||
|
||||
/* Routine to determine if the types T1 and T2 are effectively
|
||||
|
|
|
@ -2525,7 +2525,18 @@ capture::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
|
|||
}
|
||||
}
|
||||
|
||||
fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where);
|
||||
/* If in GENERIC some capture is used multiple times, unshare it except
|
||||
when emitting the last use. */
|
||||
if (!gimple
|
||||
&& cinfo->info.exists ()
|
||||
&& cinfo->info[cinfo->info[where].same_as].result_use_count > 1)
|
||||
{
|
||||
fprintf_indent (f, indent, "%s = unshare_expr (captures[%u]);\n",
|
||||
dest, where);
|
||||
cinfo->info[cinfo->info[where].same_as].result_use_count--;
|
||||
}
|
||||
else
|
||||
fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where);
|
||||
|
||||
/* ??? Stupid tcc_comparison GENERIC trees in COND_EXPRs. Deal
|
||||
with substituting a capture of that. */
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/80297
|
||||
* g++.dg/torture/pr80297.C: New test.
|
||||
|
||||
PR tree-optimization/79390
|
||||
* gcc.target/i386/pr79390.c: New test.
|
||||
* gcc.dg/ifcvt-4.c: Use -mtune-ctrl=^one_if_conv_insn for i?86/x86_64.
|
||||
|
|
12
gcc/testsuite/g++.dg/torture/pr80297.C
Normal file
12
gcc/testsuite/g++.dg/torture/pr80297.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// PR c++/80297
|
||||
// { dg-do compile }
|
||||
|
||||
extern const unsigned long int b;
|
||||
extern const long long int c;
|
||||
|
||||
int
|
||||
foo ()
|
||||
{
|
||||
int a = 809 >> -(b & !c) + b - (long long)(b & !c);
|
||||
return a;
|
||||
}
|
Loading…
Add table
Reference in a new issue