[PATCH] D109372: [RISCV][RFC] Add Clang support for RISC-V overlay system
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 8 06:38:37 PDT 2021
aaron.ballman added inline comments.
================
Comment at: clang/include/clang/Basic/Attr.td:1796
+// trigger an error.
+def RISCVOverlayCall : InheritableAttr {
+ let Spellings = [GCC<"overlaycall">];
----------------
jrtc27 wrote:
> aaron.ballman wrote:
> > edward-jones wrote:
> > > jrtc27 wrote:
> > > > If you want this to be portable to non-GNU compilers you should consider using a keyword instead (which can still map to an attribute internally). That also tends to get you better errors (there are places where type attributes can get silently ignored currently).
> > > I don't think much consideration has been given to other compilers, but would it be unreasonable for the interface to this feature to not necessarily be identical between GNU and non-GNU compilers?
> > >
> > > That said, I'm happy to switch to a keyword, especially if as you mention there are cases where an attribute can silently go missing without error. I'm not sure on the distinction of when to use a keyword vs attribute though, given that keywords are used pretty sparingly in comparison.
> > This isn't a type attribute, so I don't think there's a risk of the attribute getting lost.
> This one isn't, but the data one is
Oh, derp, thank you for catching that, somehow I completely missed it! I was thrown off by there being a lot of problems with it, but all the problems made it look like a declaration attribute.
Type attributes come with their own fun set of questions, like: does the attribute impact the type for overloading? SFINAE? Name mangling?
================
Comment at: clang/include/clang/Basic/Attr.td:1805
+ let Spellings = [GCC<"overlaydata">];
+ let Subjects = SubjectList<[GlobalConst]>;
+ let Documentation = [RISCVOverlayDocs];
----------------
This subject list is incorrect -- the subject is a `VarDecl`, but that's not a type.
================
Comment at: clang/include/clang/Basic/AttrDocs.td:2153
+
+``__attribute__((overlaydata))`` is used to mark global constants and signifies
+that the global is in an overlay and can only be accessed using the overlay
----------------
This description is wrong if this is intended to be a type attribute. A global constant is not a type.
================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:8512-8517
+ if (!S.getLangOpts().RISCVOverlayFunctions) {
+ AL.setInvalid();
+ S.Diag(AL.getLoc(), diag::err_overlaydata_unsupported);
+ break;
+ }
+ D->addAttr(::new (S.Context) RISCVOverlayDataAttr(S.Context, AL));
----------------
aaron.ballman wrote:
> Please write a `handle` function for this as with all the other attributes (we have hopes to someday do more tablegen in this area, so sticking with the same pattern in this `switch` is strongly preferred).
Oops, this is entirely wrong -- if this is a type attribute, it should be handled from `processTypeAttrs()` in `SemaType.cpp`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109372/new/
https://reviews.llvm.org/D109372
More information about the cfe-commits
mailing list