[PATCH] D133361: [BPF] Attribute preserve_static_offset for structs

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 28 13:40:22 PDT 2023


erichkeane added a comment.

The CFE stuff is pretty innocuous and I don't see a reason to stop this on our accord, but would like someone familiar with the LLVM stuff to review this at one point.



================
Comment at: clang/lib/CodeGen/CGExpr.cpp:3694
+static bool hasBPFPreserveStaticOffset(const RecordDecl *D) {
+  return D->getAttr<BPFPreserveStaticOffsetAttr>();
+}
----------------



================
Comment at: clang/lib/CodeGen/CGExpr.cpp:3698
+static bool hasBPFPreserveStaticOffset(const Expr *E) {
+  if (auto *PtrType = dyn_cast<PointerType>(E->getType()))
+    if (auto *BaseDecl = PtrType->getPointeeType()->getAsRecordDecl())
----------------
You can use `E->getType()->getPointeeType()` here instead, unless you REALLY care that this is only a normal-pointer deref (and not a PMF or reference type).


================
Comment at: clang/lib/CodeGen/CGExpr.cpp:3778
 
+  if (Base && hasBPFPreserveStaticOffset(Base))
+    addr = wrapWithBPFPreserveStaticOffset(CGF, addr);
----------------
I'd suggest just making `hasBPFPreserveStaticOffset` be `nullptr` tolerant and remove the 1st half of this.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:7601
+  auto *Rec = cast<RecordDecl>(D);
+  Rec->addAttr(::new (S.Context) BPFPreserveStaticOffsetAttr(S.Context, AL));
+}
----------------
This should use `BPFPreserveStaticOffsetAttr::Create` instead of using placement `new`.  We've been meaning to translate these all at one point, but never got around to it.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:8871
+  case ParsedAttr::AT_BPFPreserveStaticOffset:
+    handleBPFPreserveStaticOffsetAttr(S, D, AL);
+    break;
----------------
aaron.ballman wrote:
> 
Or this, this is probably better.


================
Comment at: llvm/test/CodeGen/BPF/preserve-static-offset/load-align.ll:61
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{!"clang version 18.0.0 (/home/eddy/work/llvm-project/clang c899a1ca75d0f1b559204eff79a2578d2cafc7ab)"}
+!2 = !{!3, !4, i64 128}
----------------
Are we sure we want to do something like this?  It seems this both depends on YOUR computer AND us never releasing Clang 18.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133361/new/

https://reviews.llvm.org/D133361



More information about the cfe-commits mailing list