================ @@ -2901,34 +2907,44 @@ class CallExpr : public Expr { // // * An optional of type FPOptionsOverride. // - // Note that we store the offset in bytes from the this pointer to the start - // of the trailing objects. It would be perfectly possible to compute it - // based on the dynamic kind of the CallExpr. However 1.) we have plenty of - // space in the bit-fields of Stmt. 2.) It was benchmarked to be faster to - // compute this once and then load the offset from the bit-fields of Stmt, - // instead of re-computing the offset each time the trailing objects are - // accessed. + // CallExpr subclasses are asssumed to be 32 bytes or less, and CallExpr + // itself is 24 bytes. To avoid having to recompute or store the offset of the + // trailing objects, we put it at 32 bytes (such that it is suitable for all + // subclasses) We use the 8 bytes gap left for instances of CallExpr to store + // the begin and end source locations. Caching the begin source location in + // particular as a significant impact on perf as getBeginLoc is assumed to be + // cheap. + // The layourt is as follow: + // CallExpr | Begin | End | Trailing Objects + // CXXMemberCallExpr | Trailing Objects + // A bit in CallExprBitfields indicates if source locations are presents. +protected: + static constexpr unsigned offsetToTrailingObjects = 32; ---------------- AaronBallman wrote:
```suggestion static constexpr unsigned OffsetToTrailingObjects = 32; ``` https://github.com/llvm/llvm-project/pull/141058 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits