public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* named address space problem
@ 2019-02-13  9:22 Marc Poulhies
  0 siblings, 0 replies; only message in thread
From: Marc Poulhies @ 2019-02-13  9:22 UTC (permalink / raw)
  To: gcc

Hi !

While porting a GCC 4.9 private port to GCC 7, I've encountered an issue with named address space support.

I have defined the following target macros:

#define K1_ADDR_SPACE_UNCACHED 1
#define K1_ADDR_SPACE_CONVERT 2

 TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (returns false for CONVERT, regular legitimate hook for other as)
 TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (raises an error if using CONVERT as or calls regular legitimize_address hook)
 TARGET_ADDR_SPACE_SUBSET_P (always true)
 TARGET_ADDR_SPACE_CONVERT (emits a warning if not to/from CONVERT as and always returns first operand)

#define REGISTER_TARGET_PRAGMAS() do {                               \
   c_register_addr_space ("__uncached", K1_ADDR_SPACE_UNCACHED); \
   c_register_addr_space ("__convert", K1_ADDR_SPACE_CONVERT); \
 } while (0)

The usage is very basic and is used to drive the insn selection to use cached/uncached variants for load/store.
Pointers are declared with `__uncached` to use uncached variants and `__convert` is used when converting pointers to/from this uncached space.
It works as expected on GCC 4.9.

On our current port on GCC 7 (using latest gcc-7-branch branch), we have an issue with simple code:

```
typedef struct {
 unsigned long count;
} foo_t;  

unsigned long foobar(foo_t *cond, int bar)
{
  if (bar == 1 ) {
  }
  __uncached foo_t *ucond = cond;
  return ucond->count;
}
```

Raises the following error:

```
<source>: In function 'foobar':
<source>:9:3: error: unknown type name '__uncached'
   __uncached foo_t *ucond = cond;
   ^~~~~~~~~~

<source>:9:20: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
   __uncached foo_t *ucond = cond;
                    ^
<source>:10:10: error: 'ucond' undeclared (first use in this function); did you mean 'cond'?
   return ucond->count;
          ^~~~~
          cond
<source>:10:10: note: each undeclared identifier is reported only once for each function it appears in
Compiler returned: 1
```

The following changes make the code compile as expected:

 - moving the variable declaration at the beginning of the block
 - opening a block before the declaration and closing it after the return stmt.

I could not find a matching PR in bugzilla.
Do you know of any issue with this ? Maybe this has been fixed in later versions.

Thanks,
Marc

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-13  9:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-13  9:22 named address space problem Marc Poulhies

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).