Don't split call from its call arg location.
gcc/ 2017-11-21 Claudiu Zissulescu <claziss@synopsys.com> * cfgrtl.c (force_nonfallthru_and_redirect): Don't split a call and its corresponding call arg location note. testsuite/ 2017-11-21 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/loop-5.cpp: New test. From-SVN: r254998
This commit is contained in:
parent
6fe5e235f9
commit
13f5d5e082
@ -1,3 +1,8 @@
|
||||
2017-11-21 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* cfgrtl.c (force_nonfallthru_and_redirect): Don't split a call
|
||||
and its corresponding call arg location note.
|
||||
|
||||
2017-11-21 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
|
@ -1626,6 +1626,11 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
|
||||
else
|
||||
new_head = BB_END (e->src);
|
||||
new_head = NEXT_INSN (new_head);
|
||||
/* Make sure we don't split a call and its corresponding
|
||||
CALL_ARG_LOCATION note. */
|
||||
if (new_head && NOTE_P (new_head)
|
||||
&& NOTE_KIND (new_head) == NOTE_INSN_CALL_ARG_LOCATION)
|
||||
new_head = NEXT_INSN (new_head);
|
||||
|
||||
jump_block = create_basic_block (new_head, NULL, e->src);
|
||||
jump_block->count = count;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2017-11-21 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* gcc.target/arc/loop-5.cpp: New test.
|
||||
|
||||
2017-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/83047
|
||||
|
20
gcc/testsuite/gcc.target/arc/loop-5.cpp
Normal file
20
gcc/testsuite/gcc.target/arc/loop-5.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -g" } */
|
||||
|
||||
/* Check if gcc splits a call from its CALL_ARG_LOCATION note. If so,
|
||||
we get an ICE in dwarf2out_var_location. */
|
||||
|
||||
typedef void Trans_NS_std_new_handler();
|
||||
void *operator new(unsigned)
|
||||
{
|
||||
void *p;
|
||||
while (__builtin_expect(p == 0, false))
|
||||
{
|
||||
Trans_NS_std_new_handler handler;
|
||||
try {
|
||||
handler();
|
||||
} catch (int) {
|
||||
}
|
||||
}
|
||||
return (void*) 0xdead;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user