https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119474

--- Comment #10 from rguenther at suse dot de <rguenther at suse dot de> ---
On Mon, 31 Mar 2025, ams at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119474
> 
> --- Comment #9 from Andrew Stubbs <ams at gcc dot gnu.org> ---
> This patch fixes the -O1 failure, for *this* testcase:
> 
> diff --git a/gcc/tree.cc b/gcc/tree.cc
> index eccfcc89da40..4bfdb7a938e7 100644
> --- a/gcc/tree.cc
> +++ b/gcc/tree.cc
> @@ -7085,11 +7085,8 @@ build_pointer_type_for_mode (tree to_type, machine_mode
> mode,
>    if (to_type == error_mark_node)
>      return error_mark_node;
> 
> -  if (mode == VOIDmode)
> -    {
> -      addr_space_t as = TYPE_ADDR_SPACE (to_type);
> -      mode = targetm.addr_space.pointer_mode (as);
> -    }
> +  addr_space_t as = TYPE_ADDR_SPACE (to_type);
> +  mode = targetm.addr_space.pointer_mode (as);
> 
>    /* If the pointed-to type has the may_alias attribute set, force
>       a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
> @@ -7121,6 +7118,7 @@ build_pointer_type_for_mode (tree to_type, machine_mode
> mode,
>    TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
>    TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
>    TYPE_POINTER_TO (to_type) = t;
> +  TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (to_type);
> 
>    /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
>    if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
> 
> 
> This is clearly wrong though, because the address space that the pointer is
> *in* doesn't have to be the same as the one it *points to*, so I need a better
> solution.
> 
> Any suggestions where to start?

Well, you have to fixup the oacc lowering process to more "properly"
move objects from one address-space to another.  Your earlier patch
was a good first step in principle.

Reply via email to