efriedma-quic wrote: > > And ideally, the recursive visit should list those expressions explicitly, > > instead aborting on ones we know are bad. > > I'm sorry, I don't understand what you're talking about here. The whole point > of the recursive visit is to find a suitable base pointer. If we run across > any undesirable expressions (e.g. pointer arithmetic) then we return > `nullptr` to signify this. What do you mean we should list those expressions > explicitly?
I mean, the base case should be "return nullptr", and you should only explicitly list out expressions you know we need to handle. We shouldn't need to explicitly mention VisitUnaryPostDec etc. > > So you don't recurse; you just look for that exact AST structure. > > The information about what LValue was generated for that base pointer is no > longer available to us. No, I mean, you do the check before you emit the lvalue for the base. So in `ArraySubscriptExpr(MemberExpr(StructBase), ArrayIndex)`, instead of calling EmitLValue on `MemberExpr(StructBase)` like we normally would, you call EmitLValue on StructBase. So we have the LValue. Then we do the indexing corresponding to the MemberExpr explicitly. So you don't care what `StructBase` refers to, and you don't need a map to look up expressions. For __builtin_dynamic_object_size, my understanding is that this approach doesn't work because the argument isn't actually supposed to be evaluated. So we need a different approach that looks for specific constructs we want to allow. And then we need a mini-codegen that specifically handles those constructs (or a mini-verifier that ensures when we call generic codegen, we don't have side-effects, but that's harder to get right). And this is where you need the full recursive visit. https://github.com/llvm/llvm-project/pull/73730 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits