re PR debug/30898 (ICE with anonymous union and -g)
./: PR debug/30898 * dwarf2out.c (concatn_mem_loc_descriptor): New static function. (mem_loc_descriptor): Call it. testsuite/: * g++.dg/debug/pr30898.C: New test. From-SVN: r122228
This commit is contained in:
parent
d1789dc25a
commit
0c5c188f07
4 changed files with 54 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-02-22 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR debug/30898
|
||||
* dwarf2out.c (concatn_mem_loc_descriptor): New static function.
|
||||
(mem_loc_descriptor): Call it.
|
||||
|
||||
2007-02-22 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
|
|
|
@ -8811,6 +8811,32 @@ is_based_loc (rtx rtl)
|
|||
&& GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
|
||||
}
|
||||
|
||||
/* Return a descriptor that describes the concatenation of N locations
|
||||
used to form the address of a memory location. */
|
||||
|
||||
static dw_loc_descr_ref
|
||||
concatn_mem_loc_descriptor (rtx concatn, enum machine_mode mode)
|
||||
{
|
||||
unsigned int i;
|
||||
dw_loc_descr_ref cc_loc_result = NULL;
|
||||
unsigned int n = XVECLEN (concatn, 0);
|
||||
|
||||
for (i = 0; i < n; ++i)
|
||||
{
|
||||
dw_loc_descr_ref ref;
|
||||
rtx x = XVECEXP (concatn, 0, i);
|
||||
|
||||
ref = mem_loc_descriptor (x, mode);
|
||||
if (ref == NULL)
|
||||
return NULL;
|
||||
|
||||
add_loc_descr (&cc_loc_result, ref);
|
||||
add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
|
||||
}
|
||||
|
||||
return cc_loc_result;
|
||||
}
|
||||
|
||||
/* The following routine converts the RTL for a variable or parameter
|
||||
(resident in memory) into an equivalent Dwarf representation of a
|
||||
mechanism for getting the address of that same variable onto the top of a
|
||||
|
@ -9006,6 +9032,10 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode)
|
|||
mem_loc_result = int_loc_descriptor (INTVAL (rtl));
|
||||
break;
|
||||
|
||||
case CONCATN:
|
||||
mem_loc_result = concatn_mem_loc_descriptor (rtl, mode);
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-02-22 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR debug/30898
|
||||
* g++.dg/debug/pr30898.C: New test.
|
||||
|
||||
2007-02-22 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
* gcc.dg/vect/vect-106.c: New test.
|
||||
|
|
13
gcc/testsuite/g++.dg/debug/pr30898.C
Normal file
13
gcc/testsuite/g++.dg/debug/pr30898.C
Normal file
|
@ -0,0 +1,13 @@
|
|||
// { dg-do compile }
|
||||
|
||||
double foo()
|
||||
{
|
||||
union
|
||||
{
|
||||
int i;
|
||||
double d;
|
||||
};
|
||||
|
||||
i = 0;
|
||||
return d;
|
||||
}
|
Loading…
Add table
Reference in a new issue