Fix emission of exception dispatch (PR middle-end/82154).
2017-09-13 Martin Liska <mliska@suse.cz> PR middle-end/82154 * stmt.c (expand_sjlj_dispatch_table): Use CASE_LOW when CASE_HIGH is NULL_TREE. 2017-09-13 Martin Liska <mliska@suse.cz> PR middle-end/82154 * g++.dg/torture/pr82154.C: New test. From-SVN: r252728
This commit is contained in:
parent
97e63e1272
commit
c7885b8524
@ -1,3 +1,9 @@
|
||||
2017-09-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/82154
|
||||
* stmt.c (expand_sjlj_dispatch_table): Use CASE_LOW when
|
||||
CASE_HIGH is NULL_TREE.
|
||||
|
||||
2017-09-13 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
@ -1063,8 +1063,10 @@ expand_sjlj_dispatch_table (rtx dispatch_index,
|
||||
for (int i = ncases - 1; i >= 0; --i)
|
||||
{
|
||||
tree elt = dispatch_table[i];
|
||||
case_list.safe_push (simple_case_node (CASE_LOW (elt),
|
||||
CASE_HIGH (elt),
|
||||
tree high = CASE_HIGH (elt);
|
||||
if (high == NULL_TREE)
|
||||
high = CASE_LOW (elt);
|
||||
case_list.safe_push (simple_case_node (CASE_LOW (elt), high,
|
||||
CASE_LABEL (elt)));
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-09-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/82154
|
||||
* g++.dg/torture/pr82154.C: New test.
|
||||
|
||||
2017-09-13 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/61362
|
||||
|
50
gcc/testsuite/g++.dg/torture/pr82154.C
Normal file
50
gcc/testsuite/g++.dg/torture/pr82154.C
Normal file
@ -0,0 +1,50 @@
|
||||
// { dg-do compile }
|
||||
// { dg-additional-options "-Wno-deprecated" }
|
||||
|
||||
namespace a {
|
||||
int b;
|
||||
class c
|
||||
{
|
||||
};
|
||||
}
|
||||
class g
|
||||
{
|
||||
public:
|
||||
g ();
|
||||
};
|
||||
using a::b;
|
||||
class d
|
||||
{
|
||||
public:
|
||||
d ();
|
||||
void e ();
|
||||
};
|
||||
class f
|
||||
{
|
||||
d
|
||||
i ()
|
||||
{
|
||||
static d j;
|
||||
}
|
||||
int *k () throw (a::c);
|
||||
};
|
||||
|
||||
|
||||
int *f::k () throw (a::c)
|
||||
{
|
||||
static g h;
|
||||
i ();
|
||||
int l = 2;
|
||||
while (l)
|
||||
{
|
||||
--l;
|
||||
try
|
||||
{
|
||||
operator new (b);
|
||||
}
|
||||
catch (a::c)
|
||||
{
|
||||
}
|
||||
}
|
||||
i ().e ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user