[PATCH] D134057: [clang][Interp] Start implementing record types
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Sep 17 15:29:16 PDT 2022
shafik added inline comments.
================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:316
+ // Base above gives us a pointer on the stack.
+ const auto *FD = dyn_cast<FieldDecl>(Member);
+ assert(FD);
----------------
tbaeder wrote:
> erichkeane wrote:
> > I THINK Member is a ValueDecl because it could be a member function, right? So forcing it to be a FieldDecl here is likely not valid. Perhaps in the 'non-FieldDecl' case we could jsut return false for now?
> >
> > ALSO, don't do a dyn_cast followed by an assert, `cast` will do the assert for you.
> Right, I was just trying to limit the code to the subset I've implemented for now. I can try to make it more defensive.
Also I believe this can also be an `IndirectFieldDecl` (anonymous union members) or a `ValueDecl` for static data members.
Maybe outline what is left to fill in a comment?
================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:673
+ if (Optional<PrimType> T = classify(Init->getType())) {
+ if (!this->emitDupPtr(Initializer))
+ return false;
----------------
This section of code looks duplicated w/ the above, can it be factored out or will they diverge as you fill in more details?
================
Comment at: clang/test/AST/Interp/records.cpp:7
+
+struct Ints {
+ int a = 20;
----------------
How about also have a field that is a struct and initializing that.
Also using initializer lists in in class member initializers and also designated initializers as well.
I am not sure if unions works yet but anon union members as well.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134057/new/
https://reviews.llvm.org/D134057
More information about the cfe-commits
mailing list