From: rguenth Date: Tue, 14 Mar 2006 09:53:36 +0000 (+0000) Subject: 2006-03-14 Richard Guenther X-Git-Tag: upstream/4.9.2~55379 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3c15318ed8088f874c8422f101910acf91ce9a22;p=platform%2Fupstream%2Flinaro-gcc.git 2006-03-14 Richard Guenther PR middle-end/26659 * builtins.c (get_pointer_alignment): Prefer alignment information from decls over that from types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112048 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da4cb3d..58b6eee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-03-14 Richard Guenther + + PR middle-end/26659 + * builtins.c (get_pointer_alignment): Prefer alignment + information from decls over that from types. + 2006-03-14 Andrew Pinski PR target/26657 diff --git a/gcc/builtins.c b/gcc/builtins.c index 1ce6083..a628342 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -275,21 +275,24 @@ get_pointer_alignment (tree exp, unsigned int max_align) case ADDR_EXPR: /* See what we are pointing at and look at its alignment. */ exp = TREE_OPERAND (exp, 0); + inner = max_align; while (handled_component_p (exp)) { if (TREE_CODE (exp) == COMPONENT_REF) - align = MIN (align, DECL_ALIGN (TREE_OPERAND (exp, 1))); + inner = MIN (inner, DECL_ALIGN (TREE_OPERAND (exp, 1))); exp = TREE_OPERAND (exp, 0); } if (TREE_CODE (exp) == FUNCTION_DECL) - align = MIN (align, FUNCTION_BOUNDARY); + align = FUNCTION_BOUNDARY; else if (DECL_P (exp)) - align = MIN (align, DECL_ALIGN (exp)); + align = MIN (inner, DECL_ALIGN (exp)); #ifdef CONSTANT_ALIGNMENT else if (CONSTANT_CLASS_P (exp)) - align = MIN (align, (unsigned)CONSTANT_ALIGNMENT (exp, align)); + align = CONSTANT_ALIGNMENT (exp, align); #endif - return align; + else + align = MIN (align, inner); + return MIN (align, max_align); default: return align;