Patchwork incorrect composite_type result for pointers with mode

login
register
mail settings
Submitter Tristan Gingold
Date Jan. 25, 2012, 9:15 a.m.
Message ID <C162EAD4-E969-4E80-A9B5-4C578D296FCB@adacore.com>
Download mbox | patch
Permalink /patch/137723/
State New
Headers show

Comments

Tristan Gingold - Jan. 25, 2012, 9:15 a.m.
Hi,

composite_type doesn't consider the pointer mode when creating a pointer.
As a consequence:

type char *p32 __attribute__((mode (SI));
type char *p32 __attribute__((mode (SI));

creates a 64-bit pointers (on ia64-hp-openvms and certainly some other configuration).
This breaks some compiler builds (depending on the build options).

As far as I know, this is not a regression, so it may not qualify for a stage 4 submission.

Tristan.

2012-01-25  Tristan Gingold  <gingold@adacore.com>

	* c-typeck.c (composite_type): Keep mode for pointers.
Joseph S. Myers - Jan. 25, 2012, 4:32 p.m.
On Wed, 25 Jan 2012, Tristan Gingold wrote:

> 2012-01-25  Tristan Gingold  <gingold@adacore.com>
> 
> 	* c-typeck.c (composite_type): Keep mode for pointers.

OK.

Patch

diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index b696e5e..2e33763 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -394,7 +394,7 @@  composite_type (tree t1, tree t2)
        tree pointed_to_1 = TREE_TYPE (t1);
        tree pointed_to_2 = TREE_TYPE (t2);
        tree target = composite_type (pointed_to_1, pointed_to_2);
-       t1 = build_pointer_type (target);
+       t1 = build_pointer_type_for_mode (target, TYPE_MODE (t1), false);
        t1 = build_type_attribute_variant (t1, attributes);
        return qualify_type (t1, t2);
       }