aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-09-10 11:42:20 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-09-10 09:42:20 +0000
commiteafedef3836563374ab1c4509e2a386c8156af7f (patch)
treecc03f40c9dd200f078a8f820d2b736f5fd7ae542 /gcc/cp
parent292beb8fdadb4b8846c87ddd51e91e0427a583fa (diff)
downloadgcc-eafedef3836563374ab1c4509e2a386c8156af7f.zip
gcc-eafedef3836563374ab1c4509e2a386c8156af7f.tar.gz
gcc-eafedef3836563374ab1c4509e2a386c8156af7f.tar.bz2
re PR tree-optimization/45605 (Missed devirtualization)
PR tree-optimization/45605 * cp/class.c (build_vtbl_initializer): Avoid wrong type conversion in ADDR_EXPR From-SVN: r164148
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f2c7faa..54d0ef6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-10 Jan Hubicka <jh@suse.cz>
+
+ PR tree-optimization/45605
+ * cp/class.c (build_vtbl_initializer): Avoid wrong type conversion in ADDR_EXPR
+
2010-09-08 Jakub Jelinek <jakub@redhat.com>
PR c++/45588
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 35b6db13..4823fa2 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -7797,7 +7797,7 @@ build_vtbl_initializer (tree binfo,
{
fn = abort_fndecl;
if (abort_fndecl_addr == NULL)
- abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
+ abort_fndecl_addr = fold_convert (vfunc_ptr_type_node, build_fold_addr_expr (fn));
init = abort_fndecl_addr;
}
else
@@ -7810,7 +7810,7 @@ build_vtbl_initializer (tree binfo,
}
/* Take the address of the function, considering it to be of an
appropriate generic type. */
- init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
+ init = fold_convert (vfunc_ptr_type_node, build_fold_addr_expr (fn));
}
}