[PATCH] D127803: Generate the capture for field when the field is used with implicit default.

Alexey Bataev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 22 06:53:47 PDT 2022


ABataev added inline comments.


================
Comment at: clang/lib/Sema/SemaExprMember.cpp:1873-1877
+    if (auto *PrivateCopy =
+            isOpenMPFDCaptureDecl(Field, Base.get(), IsArrow, OpLoc, &SS,
+                                  /*TemplateKWLoc=*/SourceLocation(), Field,
+                                  FoundDecl, /*HadMultipleCandidates=*/false,
+                                  MemberNameInfo, MemberType, VK, OK))
----------------
Why do we need this function? Implicit private rule should apply (if should) only to this-Юашдув kind of expressions, if something like parent.field expression is used, parent should be private, not private.field. Or I'm missing something?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:201
+    using ImplicitFDCapTy = std::pair<ImpilitFDLevelTy, VarDecl *>;
+    // List of captuer fields
+    llvm::SmallVector<ImplicitFDCapTy, 8> ImplicitDefaultFirstprivateFDs;
----------------
///


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1129-1130
   }
+  // get captured field from ImplicitDefaultFirstprivateFDs
+  VarDecl *getImplicitFDCapExprDecl(const FieldDecl *FD) {
+    const_iterator I = begin();
----------------
1. Use /// style of comment.
2. const member function?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1141
+      return nullptr;
+    for (auto IFD : I->ImplicitDefaultFirstprivateFDs)
+      if (IFD.first.first == FD && IFD.first.second == Sz)
----------------
`const auto &`?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1146-1147
+  }
+  // Check if capture decl is field captured in ImplicitDefaultFirstprivateFDs
+  bool isImplicitDefaultFirstprivateFD(VarDecl *VD) {
+    const_iterator I = begin();
----------------
1. Use /// style of comment.
2. const member function?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1155
+      return false;
+    for (auto IFD : I->ImplicitDefaultFirstprivateFDs)
+      if (IFD.second == VD)
----------------
`const auto &`?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1160
+  }
+  // Store capture FD info in ImplicitDefaultFirstprivateFDs
+  void addImplicitDefaultFirstprivateFD(const FieldDecl *FD, VarDecl *VD) {
----------------
/// style


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:1167-1168
+      if (I->DefaultAttr == DSA_private || I->DefaultAttr == DSA_firstprivate) {
+        I->ImplicitDefaultFirstprivateFDs.emplace_back(std::make_pair(FD, Sz),
+                                                       VD);
+        break;
----------------
just `emplace_back(FD, Sz, VD);`?


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:2410
         D,
-        [](OpenMPClauseKind C, bool AppliedToPointee) {
+        [](OpenMPClauseKind C, bool AppliedToPointee, ...) {
           return isOpenMPPrivate(C) && !AppliedToPointee;
----------------
Better to add an actual param type here but without Param name


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127803



More information about the cfe-commits mailing list