aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-04-21 00:28:25 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-04-21 00:28:25 -0400
commitf70292772476f1ccc341a69bfb0ab264bc9954bf (patch)
tree3997386648fb82d975dbfaaef3e0e2ee7e135014 /gcc
parent31603723a0c32e9540b963298e8c95c294eb36dc (diff)
downloadgcc-f70292772476f1ccc341a69bfb0ab264bc9954bf.zip
gcc-f70292772476f1ccc341a69bfb0ab264bc9954bf.tar.gz
gcc-f70292772476f1ccc341a69bfb0ab264bc9954bf.tar.bz2
* call.c (build_over_call): Handle trivial dtor.
From-SVN: r172809
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/call.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/init/dtor4.C9
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 879f863..dcfa7e6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
2011-04-20 Jason Merrill <jason@redhat.com>
+ * call.c (build_over_call): Handle trivial dtor.
+
* search.c (lookup_fnfields_slot): Call complete_type.
PR c++/48594
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 78104b1..cf8e1a5 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6411,7 +6411,11 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
return val;
}
- /* FIXME handle trivial default constructor and destructor, too. */
+ else if (DECL_DESTRUCTOR_P (fn)
+ && trivial_fn_p (fn)
+ && !DECL_DELETED_FN (fn))
+ return fold_convert (void_type_node, argarray[0]);
+ /* FIXME handle trivial default constructor, too. */
if (!already_used)
mark_used (fn);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index becce40..8fd0216 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-04-20 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/init/dtor4.C: New.
+
2011-04-20 Uros Bizjak <ubizjak@gmail.com>
PR target/48678
diff --git a/gcc/testsuite/g++.dg/init/dtor4.C b/gcc/testsuite/g++.dg/init/dtor4.C
new file mode 100644
index 0000000..4bca69e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/dtor4.C
@@ -0,0 +1,9 @@
+// { dg-final { scan-assembler-not "_ZN1AD2Ev" } }
+
+struct A { };
+
+int main()
+{
+ A a;
+ a.~A();
+}