From: Ian Lance Taylor Date: Mon, 28 Jan 2008 19:43:51 +0000 (+0000) Subject: re PR c++/34862 (operator new placement variant with reference arg not accepted by... X-Git-Tag: releases/gcc-4.3.0~349 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e8b0eabccd680e52131e674430a3b14416abf233;p=thirdparty%2Fgcc.git re PR c++/34862 (operator new placement variant with reference arg not accepted by g++ 4.3) PR c++/34862 PR c++/33407 * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't coalesce pointers if they have different DECL_NO_TBAA_P values. * tree-ssa-copy.c (may_propagate_copy): Don't propagate copies between variables with different DECL_NO_TBAA_P values. From-SVN: r131916 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 753539e56633..33a2c0b95c39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-01-28 Ian Lance Taylor + + PR c++/34862 + PR c++/33407 + * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't + coalesce pointers if they have different DECL_NO_TBAA_P values. + * tree-ssa-copy.c (may_propagate_copy): Don't propagate copies + between variables with different DECL_NO_TBAA_P values. + 2008-01-28 Nathan Froyd PR 31535 diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c index 7ae6825d3e6b..2cd30c94eb05 100644 --- a/gcc/tree-ssa-copy.c +++ b/gcc/tree-ssa-copy.c @@ -1,5 +1,5 @@ /* Copy propagation and SSA_NAME replacement support routines. - Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -143,6 +143,11 @@ may_propagate_copy (tree dest, tree orig) else if (get_alias_set (TREE_TYPE (type_d)) != get_alias_set (TREE_TYPE (type_o))) return false; + else if (!MTAG_P (SSA_NAME_VAR (dest)) + && !MTAG_P (SSA_NAME_VAR (orig)) + && (DECL_NO_TBAA_P (SSA_NAME_VAR (dest)) + != DECL_NO_TBAA_P (SSA_NAME_VAR (orig)))) + return false; /* Also verify flow-sensitive information is compatible. */ if (SSA_NAME_PTR_INFO (orig) && SSA_NAME_PTR_INFO (dest)) diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c index c5526f668168..d701d4385d37 100644 --- a/gcc/tree-ssa-copyrename.c +++ b/gcc/tree-ssa-copyrename.c @@ -1,5 +1,5 @@ /* Rename SSA copies. - Copyright (C) 2004, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Andrew MacLeod This file is part of GCC. @@ -249,8 +249,11 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug) /* Don't coalesce if the aliasing sets of the types are different. */ if (POINTER_TYPE_P (TREE_TYPE (root1)) && POINTER_TYPE_P (TREE_TYPE (root2)) - && get_alias_set (TREE_TYPE (TREE_TYPE (root1))) - != get_alias_set (TREE_TYPE (TREE_TYPE (root2)))) + && ((get_alias_set (TREE_TYPE (TREE_TYPE (root1))) + != get_alias_set (TREE_TYPE (TREE_TYPE (root2)))) + || ((DECL_P (root1) && !MTAG_P (root1)) + && (DECL_P (root2) && !MTAG_P (root2)) + && DECL_NO_TBAA_P (root1) != DECL_NO_TBAA_P (root2)))) { if (debug) fprintf (debug, " : 2 different aliasing sets. No coalesce.\n");