[PATCH] D96853: [clang][AVR] Support variable decorator '__flash'

Anastasia Stulova via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 26 12:51:07 PDT 2021


Anastasia added a comment.

In D96853#2577172 <https://reviews.llvm.org/D96853#2577172>, @benshi001 wrote:

> In D96853#2577133 <https://reviews.llvm.org/D96853#2577133>, @aykevl wrote:
>
>> I am not very familiar with Clang so I can't say much about it. Although I wonder whether a macro is the right way to implement this? Is there something similar in other targets? (GPUs tend to have lots of address spaces, you could take a look there).
>
> A macro definition is the simplest way, an alias to `__attribute__((address_space(0)))`. I do not find any other easy way for a plain keyword `__flash`.

Ok, macro could be a reasonable direction. This is how clang implements address spaces for CUDA. Another option is adding a keyword. OpenCL implements address spaces this way. You can't add a target-specific keyword but considering that it start with "__" it should be reasonable to add this to C/C++ mode. You could for example align with gcc implementation.

I am guessing this will only be supported by 1 target in clang? Then target address spaces make sense otherwise you can also extend the language address space enum. Are you also planning to add `__flashN`?
 https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:2995
+def err_qualifier_with_address_space : Error<
+  "qualifier '%select{const|volatile}0' %select{needed|invalid}1 "
+  "for variables in address space '%2'">;
----------------
Minor wording change:
```
qualifier '%select{const|volatile}0' is %select{needed|invalid}1
```

Could you not use the same parameter in select twice i.e.

```
qualifier '%select{const|volatile}0' is %select{needed|invalid}0
```
?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96853/new/

https://reviews.llvm.org/D96853



More information about the cfe-commits mailing list