jdoerfert added inline comments.

================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:2134-2151
+    Sema::DeclareTargetContextInfo *DTCI =
+        new Sema::DeclareTargetContextInfo(DKind, DTLoc);
+    if (HasClauses)
+      ParseOMPDeclareTargetClauses(*DTCI);
 
     // Skip the last annot_pragma_openmp_end.
     ConsumeAnyToken();
----------------
ABataev wrote:
> jdoerfert wrote:
> > ABataev wrote:
> > > Add a RAII to control these new/delete or just create local var
> > Local variable and RAII do not always work, there is a delete in the 
> > `end_declare_target` below as well.
> > 
> > 
> But here you have new/delete pair within a single block. Either you can put 
> the ar into stack/RAII or some extra checks are missing. Maybe must be 
> something like this:
> ```
> if (DKind == OMPD_declare_target)
>   delete DTCI;
> ```
> ?
If this is a directive without implicit mappings, the DTCI will be deleted 
right away. It is just used to collect the clauses (which include explicit 
mappings). If this is a directive with implicit mappings, which we cannot tell 
from the DKind alone, the DTCI will be stored in Sema until we reach the 
corresponding end directive. For the former case we could do stack/RAII, but 
not for the latter case, the scope is left and DTCI survives. I'll look into 
this again and try to avoid new/delete, feel free to look at the rest of the 
patch.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D101030

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

Reply via email to