[flang-commits] [flang] c4a89f1 - [flang][OpenMP] Fix use-after-free in OMPFunctionFiltering (#84373)

via flang-commits flang-commits at lists.llvm.org
Fri Mar 8 07:16:02 PST 2024


Author: Krzysztof Parzyszek
Date: 2024-03-08T09:15:59-06:00
New Revision: c4a89f1538bbcac19628570b6b489cd9ce4265e2

URL: https://github.com/llvm/llvm-project/commit/c4a89f1538bbcac19628570b6b489cd9ce4265e2
DIFF: https://github.com/llvm/llvm-project/commit/c4a89f1538bbcac19628570b6b489cd9ce4265e2.diff

LOG: [flang][OpenMP] Fix use-after-free in OMPFunctionFiltering (#84373)

When walking over functions (in pre-order), if the function being
visited needs to be erased, skip visiting its regions.

This was detected by address sanitizer.

Added: 
    

Modified: 
    flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp b/flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp
index 466bf53e8dbd60..959099d039a5e6 100644
--- a/flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp
+++ b/flang/lib/Optimizer/Transforms/OMPFunctionFiltering.cpp
@@ -79,12 +79,15 @@ class OMPFunctionFilteringPass
           // Remove the callOp
           callOp->erase();
         }
-        if (!hasTargetRegion)
+        if (!hasTargetRegion) {
           funcOp.erase();
-        else if (declareTargetOp)
+          return WalkResult::skip();
+        }
+        if (declareTargetOp)
           declareTargetOp.setDeclareTarget(declareType,
                                            omp::DeclareTargetCaptureClause::to);
       }
+      return WalkResult::advance();
     });
   }
 };


        


More information about the flang-commits mailing list