re PR c++/68184 (Exception from a virtual function does not get caught)
PR ipa/68184 * g++.dg/torture/pr68184.C: New testcase. * cgraphunit.c (cgraph_node::analyze): Set can_throw_external. From-SVN: r231217
This commit is contained in:
parent
eaa728e3a2
commit
89bbe9ba36
@ -1,3 +1,8 @@
|
||||
2015-12-02 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/68184
|
||||
* cgraphunit.c (cgraph_node::analyze): Set can_throw_external.
|
||||
|
||||
2015-12-02 Aditya Kumar <aditya.k7@samsung.com>
|
||||
Sebastian Pop <s.pop@samsung.com>
|
||||
|
||||
|
@ -575,6 +575,7 @@ cgraph_node::analyze (void)
|
||||
cgraph_node *t = cgraph_node::get (thunk.alias);
|
||||
|
||||
create_edge (t, NULL, 0, CGRAPH_FREQ_BASE);
|
||||
callees->can_throw_external = !TREE_NOTHROW (t->decl);
|
||||
/* Target code in expand_thunk may need the thunk's target
|
||||
to be analyzed, so recurse here. */
|
||||
if (!t->analyzed)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-12-02 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/68184
|
||||
* g++.dg/torture/pr68184.C: New testcase.
|
||||
|
||||
2015-12-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/57580
|
||||
|
31
gcc/testsuite/g++.dg/torture/pr68184.C
Normal file
31
gcc/testsuite/g++.dg/torture/pr68184.C
Normal file
@ -0,0 +1,31 @@
|
||||
// { dg-do run }
|
||||
namespace {
|
||||
struct IFoo { virtual void foo() = 0; };
|
||||
struct IBar { virtual void bar() = 0; };
|
||||
|
||||
struct FooBar : private IBar, private IFoo
|
||||
{
|
||||
void call_foo()
|
||||
{
|
||||
try
|
||||
{
|
||||
static_cast<IFoo*>(this)->foo();
|
||||
}
|
||||
catch( ... ) {}
|
||||
}
|
||||
void foo() { throw 1; }
|
||||
void bar() {}
|
||||
};
|
||||
|
||||
void test()
|
||||
{
|
||||
FooBar foobar;
|
||||
foobar.call_foo();
|
||||
}
|
||||
}
|
||||
int main()
|
||||
{
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user