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
|
@ -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>
|
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/79390
|
PR tree-optimization/79390
|
||||||
|
|
|
@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#include "builtins.h"
|
#include "builtins.h"
|
||||||
#include "dumpfile.h"
|
#include "dumpfile.h"
|
||||||
#include "case-cfn-macros.h"
|
#include "case-cfn-macros.h"
|
||||||
|
#include "gimplify.h"
|
||||||
|
|
||||||
|
|
||||||
/* Routine to determine if the types T1 and T2 are effectively
|
/* 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
|
/* ??? Stupid tcc_comparison GENERIC trees in COND_EXPRs. Deal
|
||||||
with substituting a capture of that. */
|
with substituting a capture of that. */
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
2017-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/80297
|
||||||
|
* g++.dg/torture/pr80297.C: New test.
|
||||||
|
|
||||||
PR tree-optimization/79390
|
PR tree-optimization/79390
|
||||||
* gcc.target/i386/pr79390.c: New test.
|
* gcc.target/i386/pr79390.c: New test.
|
||||||
* gcc.dg/ifcvt-4.c: Use -mtune-ctrl=^one_if_conv_insn for i?86/x86_64.
|
* gcc.dg/ifcvt-4.c: Use -mtune-ctrl=^one_if_conv_insn for i?86/x86_64.
|
||||||
|
|
|
@ -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…
Reference in New Issue