re PR debug/54831 (ICE: in vt_add_function_parameter, at var-tracking.c:9412 with -O -fno-split-wide-types -g)

PR54831.

From-SVN: r192218
This commit is contained in:
Marek Polacek 2012-10-08 17:38:13 +00:00 committed by Marek Polacek
parent da3202a857
commit ee84cd3713
3 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2012-10-08 Marek Polacek <polacek@redhat.com>
PR debug/54831
* var-tracking.c (vt_add_function_parameter): Use condition instead
of gcc_assert.
* testsuite/g++.dg/debug/pr54831.C: New test.
2012-10-08 Dehao Chen <dehao@google.com>
* predict.c (predict_loops): Predict for short-circuit conditions.

View File

@ -0,0 +1,20 @@
// PR debug/54831
// { dg-do compile }
// { dg-options "-O -fno-split-wide-types -g" }
struct S
{
int m1();
int m2();
};
typedef void (S::*mptr) ();
mptr gmp;
void bar (mptr f);
void foo (mptr f)
{
f = gmp;
bar (f);
}

View File

@ -9404,12 +9404,13 @@ vt_add_function_parameter (tree parm)
if (parm != decl)
{
/* Assume that DECL_RTL was a pseudo that got spilled to
memory. The spill slot sharing code will force the
memory to reference spill_slot_decl (%sfp), so we don't
match above. That's ok, the pseudo must have referenced
the entire parameter, so just reset OFFSET. */
gcc_assert (decl == get_spill_slot_decl (false));
/* If that DECL_RTL wasn't a pseudo that got spilled to
memory, bail out. Otherwise, the spill slot sharing code
will force the memory to reference spill_slot_decl (%sfp),
so we don't match above. That's ok, the pseudo must have
referenced the entire parameter, so just reset OFFSET. */
if (decl != get_spill_slot_decl (false))
return;
offset = 0;
}