[clang] [Clang] Optimize some `getBeginLoc` implementations (PR #141058)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Wed May 28 07:05:34 PDT 2025


================
@@ -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
----------------
erichkeane wrote:

I want a static-assert here on the `sizeof` `SourceLocation`, plus a comment capturing some of the above.  That way this doesn't get 'missed' and end up with some strange bugs for whoever is doing 64 bit work.

https://github.com/llvm/llvm-project/pull/141058


More information about the cfe-commits mailing list