OSDN Git Service

2006-03-14 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Mar 2006 09:53:36 +0000 (09:53 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Mar 2006 09:53:36 +0000 (09:53 +0000)
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

gcc/ChangeLog
gcc/builtins.c

index da4cb3d..58b6eee 100644 (file)
@@ -1,3 +1,9 @@
+2006-03-14  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/26659
+       * builtins.c (get_pointer_alignment): Prefer alignment
+       information from decls over that from types.
+
 2006-03-14  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR target/26657
index 1ce6083..a628342 100644 (file)
@@ -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;