aaron.ballman added a comment.

This is missing a bunch of C++ tests that show what happens in the case of 
inheritance, template instantiations, etc.



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10068
   "__builtin_preserve_field_info argument %0 not a constant">;
+def err_preserve_access_index_wrong_type: Error<"%0 attribute only applies to 
%1">;
 
----------------
This is unnecessary.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5706
+  // Add preserve_access_index attribute to all fields and inner records.
+  for (DeclContext::decl_iterator D = RD->decls_begin(), DEnd = 
RD->decls_end();
+       D != DEnd; ++D) {
----------------
Any reason not to use a range-based for?


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5712
+
+    RecordDecl *Rec = dyn_cast<RecordDecl>(*D);
+    if (Rec) {
----------------
Can use `auto` here


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5713-5718
+    if (Rec) {
+      Rec->addAttr(::new (S.Context) BPFPreserveAccessIndexAttr(S.Context, 
AL));
+      handleBPFPreserveAIRecord(S, Rec, AL);
+    } else {
+      D->addAttr(::new (S.Context) BPFPreserveAccessIndexAttr(S.Context, AL));
+    }
----------------
These should be implicit attributes, not explicit ones, right?


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5725
+  // Add preserve_access_index attribute to all fields and inner records.
+  for (DeclContext::decl_iterator D = RD->decls_begin(), DEnd = 
RD->decls_end();
+       D != DEnd; ++D) {
----------------
Similar here.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5727
+       D != DEnd; ++D) {
+    RecordDecl *Rec = dyn_cast<RecordDecl>(*D);
+    if (Rec) {
----------------
Can use `auto` here as well.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5730-5736
+      if (!Rec->hasAttr<BPFPreserveAccessIndexAttr>()) {
+        Rec->addAttr(::new (S.Context) BPFPreserveAccessIndexAttr(S.Context, 
AL));
+        handleBPFPreserveAIRecord(S, Rec, AL);
+      }
+    } else {
+      D->addAttr(::new (S.Context) BPFPreserveAccessIndexAttr(S.Context, AL));
+    }
----------------
Implicit attributes?


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5742-5747
+  RecordDecl *Rec = dyn_cast<RecordDecl>(D);
+  if (!Rec) {
+    S.Diag(D->getLocation(), diag::err_preserve_access_index_wrong_type)
+        << "preserve_addess_index" << "struct or union type";
+    return;
+  }
----------------
This should be handled in Attr.td with an explicit subject.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5749
+
+  if (!checkAttributeNumArgs(S, AL, 0))
+    return;
----------------
This is not needed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69759



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to