Cope with NULL dw_cfi_cfa_loc
In def_cfa_0, we may set the 2nd operand's dw_cfi_cfa_loc to NULL, but then cfi_oprnd_equal_p calls cfa_equal_p with a NULL dw_cfa_location*. This patch aranges for us to tolerate NULL dw_cfi_cfa_loc. for gcc/ChangeLog PR middle-end/104540 * dwarf2cfi.cc (cfi_oprnd_equal_p): Cope with NULL dw_cfi_cfa_loc. for gcc/testsuite/ChangeLog PR middle-end/104540 * g++.dg/pr104540.C: New.
This commit is contained in:
parent
e53bb1965d
commit
a026b67f8f
2 changed files with 24 additions and 0 deletions
|
@ -788,6 +788,9 @@ cfi_oprnd_equal_p (enum dw_cfi_oprnd_type t, dw_cfi_oprnd *a, dw_cfi_oprnd *b)
|
|||
case dw_cfi_oprnd_loc:
|
||||
return loc_descr_equal_p (a->dw_cfi_loc, b->dw_cfi_loc);
|
||||
case dw_cfi_oprnd_cfa_loc:
|
||||
/* If any of them is NULL, don't dereference either. */
|
||||
if (!a->dw_cfi_cfa_loc || !b->dw_cfi_cfa_loc)
|
||||
return a->dw_cfi_cfa_loc == b->dw_cfi_cfa_loc;
|
||||
return cfa_equal_p (a->dw_cfi_cfa_loc, b->dw_cfi_cfa_loc);
|
||||
}
|
||||
gcc_unreachable ();
|
||||
|
|
21
gcc/testsuite/g++.dg/pr104540.C
Normal file
21
gcc/testsuite/g++.dg/pr104540.C
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fharden-conditional-branches -mforce-drap -mstackrealign --param=max-grow-copy-bb-insns=125" } */
|
||||
|
||||
char c;
|
||||
int i;
|
||||
|
||||
void bar(int);
|
||||
|
||||
struct S {
|
||||
int mi;
|
||||
long ml;
|
||||
S(int);
|
||||
};
|
||||
|
||||
|
||||
void foo() {
|
||||
int s = c == 0 ? 1 : 2;
|
||||
bar(s);
|
||||
if (i)
|
||||
S s(0);
|
||||
}
|
Loading…
Add table
Reference in a new issue