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:
Claudiu Zissulescu 2017-11-21 12:37:42 +01:00 committed by Claudiu Zissulescu
parent 6fe5e235f9
commit 13f5d5e082
4 changed files with 34 additions and 0 deletions

View File

@ -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>

View File

@ -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;

View File

@ -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

View 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;
}