56 lines
796 B
Diff
56 lines
796 B
Diff
2012-04-10 Jason Merrill <jason@redhat.com>
|
|
|
|
Red Hat BZ 750545
|
|
* method.c (locate_dtor): Lazily declare the destructor.
|
|
|
|
--- gcc/cp/method.c
|
|
+++ gcc/cp/method.c
|
|
@@ -870,6 +870,8 @@ synthesize_exception_spec (tree type, tr
|
|
tree
|
|
locate_dtor (tree type, void *client ATTRIBUTE_UNUSED)
|
|
{
|
|
+ if (CLASSTYPE_LAZY_DESTRUCTOR (type))
|
|
+ lazily_declare_fn (sfk_destructor, type);
|
|
return CLASSTYPE_DESTRUCTORS (type);
|
|
}
|
|
|
|
--- gcc/testsuite/g++.dg/eh/dtor3.C
|
|
+++ gcc/testsuite/g++.dg/eh/dtor3.C
|
|
@@ -0,0 +1,36 @@
|
|
+// Red Hat bug 750545
|
|
+// { dg-do run }
|
|
+
|
|
+class excep {};
|
|
+class A
|
|
+{
|
|
+public:
|
|
+ ~A() { throw excep(); }
|
|
+};
|
|
+
|
|
+class B
|
|
+{
|
|
+ A a;
|
|
+};
|
|
+
|
|
+class C
|
|
+{
|
|
+ B b;
|
|
+};
|
|
+
|
|
+void f()
|
|
+{
|
|
+ C* c = new C();
|
|
+
|
|
+ try
|
|
+ {
|
|
+ delete c;
|
|
+ }
|
|
+ catch(...)
|
|
+ {}
|
|
+}
|
|
+
|
|
+int main()
|
|
+{
|
|
+ f();
|
|
+}
|