Skip to content

Conversation

@usx95
Copy link
Contributor

@usx95 usx95 commented Nov 24, 2025

This PR enhances the CFG builder to properly handle function parameters in lifetime analysis:

  1. Added code to include parameters in the initial scope during CFG construction for both FunctionDecl and BlockDecl types
  2. Added a special case to skip reference parameters, as they don't need automatic destruction
  3. Fixed several test cases that were previously marked as "FIXME" due to missing parameter lifetime tracking

Previously, Clang's lifetime analysis was not properly tracking the lifetime of function parameters, causing it to miss important use-after-return bugs when parameter values were returned by reference or address. This change ensures that parameters are properly tracked in the CFG, allowing the analyzer to correctly identify when stack memory associated with parameters is returned.

Fixes #169014

Copy link
Contributor Author

usx95 commented Nov 24, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@usx95 usx95 changed the title fix-missing-lifetimeends-for-params [LifetimeSafety] Add parameter lifetime tracking in CFG Nov 24, 2025
@usx95 usx95 force-pushed the users/usx95/11-24-fix-missing-lifetimeends-for-params branch from d64278c to c9e98f4 Compare November 24, 2025 12:17
@usx95 usx95 marked this pull request as ready for review November 24, 2025 12:18
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:static analyzer clang:analysis clang:temporal-safety Issue/FR relating to the lifetime analysis in Clang (-Wdangling, -Wreturn-local-addr) labels Nov 24, 2025
@llvmbot
Copy link
Member

llvmbot commented Nov 24, 2025

@llvm/pr-subscribers-clang-analysis

@llvm/pr-subscribers-clang-temporal-safety

Author: Utkarsh Saxena (usx95)

Changes

This PR enhances the CFG builder to properly handle function parameters in lifetime analysis:

  1. Added code to include parameters in the initial scope during CFG construction for both FunctionDecl and BlockDecl types
  2. Added a special case to skip reference parameters, as they don't need automatic destruction
  3. Fixed several test cases that were previously marked as "FIXME" due to missing parameter lifetime tracking

Previously, Clang's lifetime analysis was not properly tracking the lifetime of function parameters, causing it to miss important use-after-return bugs when parameter values were returned by reference or address. This change ensures that parameters are properly tracked in the CFG, allowing the analyzer to correctly identify when stack memory associated with parameters is returned.

Fixes #169014


Full diff: https://github.com/llvm/llvm-project/pull/169320.diff

3 Files Affected:

  • (modified) clang/lib/Analysis/CFG.cpp (+10)
  • (modified) clang/test/Analysis/scopes-cfg-output.cpp (+2)
  • (modified) clang/test/Sema/warn-lifetime-safety.cpp (+14-6)
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index cdde849b0e026..c052af5e96b21 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -1666,6 +1666,13 @@ std::unique_ptr<CFG> CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
   assert(Succ == &cfg->getExit());
   Block = nullptr;  // the EXIT block is empty.  Create all other blocks lazily.
 
+  // Add parameters to the initial scope so to handle their dtos and lifetime
+  // ends.
+  LocalScope *paramScope = nullptr;
+  if (const auto *FD = dyn_cast_or_null<FunctionDecl>(D))
+    for (ParmVarDecl *PD : FD->parameters())
+      paramScope = addLocalScopeForVarDecl(PD, paramScope);
+
   if (BuildOpts.AddImplicitDtors)
     if (const CXXDestructorDecl *DD = dyn_cast_or_null<CXXDestructorDecl>(D))
       addImplicitDtorsForDestructor(DD);
@@ -2246,6 +2253,9 @@ LocalScope* CFGBuilder::addLocalScopeForVarDecl(VarDecl *VD,
   if (!VD->hasLocalStorage())
     return Scope;
 
+  if (isa<ParmVarDecl>(VD) && VD->getType()->isReferenceType())
+    return Scope;
+
   if (!BuildOpts.AddLifetime && !BuildOpts.AddScopes &&
       !needsAutomaticDestruction(VD)) {
     assert(BuildOpts.AddImplicitDtors);
diff --git a/clang/test/Analysis/scopes-cfg-output.cpp b/clang/test/Analysis/scopes-cfg-output.cpp
index 6ed6f3638f75b..9c75492c33a42 100644
--- a/clang/test/Analysis/scopes-cfg-output.cpp
+++ b/clang/test/Analysis/scopes-cfg-output.cpp
@@ -1437,12 +1437,14 @@ void test_cleanup_functions() {
 // CHECK-NEXT:    4: return;
 // CHECK-NEXT:    5: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    6: CFGScopeEnd(i)
+// CHECK-NEXT:    7: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B2]
 // CHECK-NEXT:    1: return;
 // CHECK-NEXT:    2: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    3: CFGScopeEnd(i)
+// CHECK-NEXT:    4: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B3]
diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp
index e80a05860389c..c08543c27778f 100644
--- a/clang/test/Sema/warn-lifetime-safety.cpp
+++ b/clang/test/Sema/warn-lifetime-safety.cpp
@@ -529,14 +529,14 @@ TriviallyDestructedClass* trivial_class_uar () {
   return ptr;     // expected-note {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 const int& return_parameter(int a) { 
-  return a; 
+  return a; // expected-warning {{address of stack memory is returned later}}
+            // expected-note@-1 {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 int* return_pointer_to_parameter(int a) {
-    return &a;
+    return &a;  // expected-warning {{address of stack memory is returned later}}
+                // expected-note@-1 {{returned here}}
 }
 
 const int& return_reference_to_parameter(int a)
@@ -788,9 +788,17 @@ const MyObj& lifetimebound_return_ref_to_local() {
                              // expected-note@-1 {{returned here}}
 }
 
-// FIXME: Fails to diagnose UAR when a reference to a by-value param escapes via the return value.
 View lifetimebound_return_of_by_value_param(MyObj stack_param) {
-  return Identity(stack_param); 
+  return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                // expected-note@-1 {{returned here}}
+}
+
+void LambdaUARParam() {
+  auto lambda = [](MyObj stack_param) {
+    return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                  // expected-note@-1 {{returned here}}
+  };
+  lambda(MyObj{});
 }
 
 // FIXME: Fails to diagnose UAF when a reference to a by-value param escapes via an out-param.

@llvmbot
Copy link
Member

llvmbot commented Nov 24, 2025

@llvm/pr-subscribers-clang

Author: Utkarsh Saxena (usx95)

Changes

This PR enhances the CFG builder to properly handle function parameters in lifetime analysis:

  1. Added code to include parameters in the initial scope during CFG construction for both FunctionDecl and BlockDecl types
  2. Added a special case to skip reference parameters, as they don't need automatic destruction
  3. Fixed several test cases that were previously marked as "FIXME" due to missing parameter lifetime tracking

Previously, Clang's lifetime analysis was not properly tracking the lifetime of function parameters, causing it to miss important use-after-return bugs when parameter values were returned by reference or address. This change ensures that parameters are properly tracked in the CFG, allowing the analyzer to correctly identify when stack memory associated with parameters is returned.

Fixes #169014


Full diff: https://github.com/llvm/llvm-project/pull/169320.diff

3 Files Affected:

  • (modified) clang/lib/Analysis/CFG.cpp (+10)
  • (modified) clang/test/Analysis/scopes-cfg-output.cpp (+2)
  • (modified) clang/test/Sema/warn-lifetime-safety.cpp (+14-6)
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index cdde849b0e026..c052af5e96b21 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -1666,6 +1666,13 @@ std::unique_ptr<CFG> CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
   assert(Succ == &cfg->getExit());
   Block = nullptr;  // the EXIT block is empty.  Create all other blocks lazily.
 
+  // Add parameters to the initial scope so to handle their dtos and lifetime
+  // ends.
+  LocalScope *paramScope = nullptr;
+  if (const auto *FD = dyn_cast_or_null<FunctionDecl>(D))
+    for (ParmVarDecl *PD : FD->parameters())
+      paramScope = addLocalScopeForVarDecl(PD, paramScope);
+
   if (BuildOpts.AddImplicitDtors)
     if (const CXXDestructorDecl *DD = dyn_cast_or_null<CXXDestructorDecl>(D))
       addImplicitDtorsForDestructor(DD);
@@ -2246,6 +2253,9 @@ LocalScope* CFGBuilder::addLocalScopeForVarDecl(VarDecl *VD,
   if (!VD->hasLocalStorage())
     return Scope;
 
+  if (isa<ParmVarDecl>(VD) && VD->getType()->isReferenceType())
+    return Scope;
+
   if (!BuildOpts.AddLifetime && !BuildOpts.AddScopes &&
       !needsAutomaticDestruction(VD)) {
     assert(BuildOpts.AddImplicitDtors);
diff --git a/clang/test/Analysis/scopes-cfg-output.cpp b/clang/test/Analysis/scopes-cfg-output.cpp
index 6ed6f3638f75b..9c75492c33a42 100644
--- a/clang/test/Analysis/scopes-cfg-output.cpp
+++ b/clang/test/Analysis/scopes-cfg-output.cpp
@@ -1437,12 +1437,14 @@ void test_cleanup_functions() {
 // CHECK-NEXT:    4: return;
 // CHECK-NEXT:    5: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    6: CFGScopeEnd(i)
+// CHECK-NEXT:    7: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B2]
 // CHECK-NEXT:    1: return;
 // CHECK-NEXT:    2: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    3: CFGScopeEnd(i)
+// CHECK-NEXT:    4: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B3]
diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp
index e80a05860389c..c08543c27778f 100644
--- a/clang/test/Sema/warn-lifetime-safety.cpp
+++ b/clang/test/Sema/warn-lifetime-safety.cpp
@@ -529,14 +529,14 @@ TriviallyDestructedClass* trivial_class_uar () {
   return ptr;     // expected-note {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 const int& return_parameter(int a) { 
-  return a; 
+  return a; // expected-warning {{address of stack memory is returned later}}
+            // expected-note@-1 {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 int* return_pointer_to_parameter(int a) {
-    return &a;
+    return &a;  // expected-warning {{address of stack memory is returned later}}
+                // expected-note@-1 {{returned here}}
 }
 
 const int& return_reference_to_parameter(int a)
@@ -788,9 +788,17 @@ const MyObj& lifetimebound_return_ref_to_local() {
                              // expected-note@-1 {{returned here}}
 }
 
-// FIXME: Fails to diagnose UAR when a reference to a by-value param escapes via the return value.
 View lifetimebound_return_of_by_value_param(MyObj stack_param) {
-  return Identity(stack_param); 
+  return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                // expected-note@-1 {{returned here}}
+}
+
+void LambdaUARParam() {
+  auto lambda = [](MyObj stack_param) {
+    return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                  // expected-note@-1 {{returned here}}
+  };
+  lambda(MyObj{});
 }
 
 // FIXME: Fails to diagnose UAF when a reference to a by-value param escapes via an out-param.

@llvmbot
Copy link
Member

llvmbot commented Nov 24, 2025

@llvm/pr-subscribers-clang-static-analyzer-1

Author: Utkarsh Saxena (usx95)

Changes

This PR enhances the CFG builder to properly handle function parameters in lifetime analysis:

  1. Added code to include parameters in the initial scope during CFG construction for both FunctionDecl and BlockDecl types
  2. Added a special case to skip reference parameters, as they don't need automatic destruction
  3. Fixed several test cases that were previously marked as "FIXME" due to missing parameter lifetime tracking

Previously, Clang's lifetime analysis was not properly tracking the lifetime of function parameters, causing it to miss important use-after-return bugs when parameter values were returned by reference or address. This change ensures that parameters are properly tracked in the CFG, allowing the analyzer to correctly identify when stack memory associated with parameters is returned.

Fixes #169014


Full diff: https://github.com/llvm/llvm-project/pull/169320.diff

3 Files Affected:

  • (modified) clang/lib/Analysis/CFG.cpp (+10)
  • (modified) clang/test/Analysis/scopes-cfg-output.cpp (+2)
  • (modified) clang/test/Sema/warn-lifetime-safety.cpp (+14-6)
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index cdde849b0e026..c052af5e96b21 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -1666,6 +1666,13 @@ std::unique_ptr<CFG> CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
   assert(Succ == &cfg->getExit());
   Block = nullptr;  // the EXIT block is empty.  Create all other blocks lazily.
 
+  // Add parameters to the initial scope so to handle their dtos and lifetime
+  // ends.
+  LocalScope *paramScope = nullptr;
+  if (const auto *FD = dyn_cast_or_null<FunctionDecl>(D))
+    for (ParmVarDecl *PD : FD->parameters())
+      paramScope = addLocalScopeForVarDecl(PD, paramScope);
+
   if (BuildOpts.AddImplicitDtors)
     if (const CXXDestructorDecl *DD = dyn_cast_or_null<CXXDestructorDecl>(D))
       addImplicitDtorsForDestructor(DD);
@@ -2246,6 +2253,9 @@ LocalScope* CFGBuilder::addLocalScopeForVarDecl(VarDecl *VD,
   if (!VD->hasLocalStorage())
     return Scope;
 
+  if (isa<ParmVarDecl>(VD) && VD->getType()->isReferenceType())
+    return Scope;
+
   if (!BuildOpts.AddLifetime && !BuildOpts.AddScopes &&
       !needsAutomaticDestruction(VD)) {
     assert(BuildOpts.AddImplicitDtors);
diff --git a/clang/test/Analysis/scopes-cfg-output.cpp b/clang/test/Analysis/scopes-cfg-output.cpp
index 6ed6f3638f75b..9c75492c33a42 100644
--- a/clang/test/Analysis/scopes-cfg-output.cpp
+++ b/clang/test/Analysis/scopes-cfg-output.cpp
@@ -1437,12 +1437,14 @@ void test_cleanup_functions() {
 // CHECK-NEXT:    4: return;
 // CHECK-NEXT:    5: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    6: CFGScopeEnd(i)
+// CHECK-NEXT:    7: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B2]
 // CHECK-NEXT:    1: return;
 // CHECK-NEXT:    2: CleanupFunction (cleanup_int)
 // CHECK-NEXT:    3: CFGScopeEnd(i)
+// CHECK-NEXT:    4: CFGScopeEnd(m)
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:      [B3]
diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp
index e80a05860389c..c08543c27778f 100644
--- a/clang/test/Sema/warn-lifetime-safety.cpp
+++ b/clang/test/Sema/warn-lifetime-safety.cpp
@@ -529,14 +529,14 @@ TriviallyDestructedClass* trivial_class_uar () {
   return ptr;     // expected-note {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 const int& return_parameter(int a) { 
-  return a; 
+  return a; // expected-warning {{address of stack memory is returned later}}
+            // expected-note@-1 {{returned here}}
 }
 
-// FIXME: No lifetime warning for this as no expire facts are generated for parameters
 int* return_pointer_to_parameter(int a) {
-    return &a;
+    return &a;  // expected-warning {{address of stack memory is returned later}}
+                // expected-note@-1 {{returned here}}
 }
 
 const int& return_reference_to_parameter(int a)
@@ -788,9 +788,17 @@ const MyObj& lifetimebound_return_ref_to_local() {
                              // expected-note@-1 {{returned here}}
 }
 
-// FIXME: Fails to diagnose UAR when a reference to a by-value param escapes via the return value.
 View lifetimebound_return_of_by_value_param(MyObj stack_param) {
-  return Identity(stack_param); 
+  return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                // expected-note@-1 {{returned here}}
+}
+
+void LambdaUARParam() {
+  auto lambda = [](MyObj stack_param) {
+    return Identity(stack_param); // expected-warning {{address of stack memory is returned later}}
+                                  // expected-note@-1 {{returned here}}
+  };
+  lambda(MyObj{});
 }
 
 // FIXME: Fails to diagnose UAF when a reference to a by-value param escapes via an out-param.

@usx95 usx95 self-assigned this Nov 24, 2025
@usx95 usx95 force-pushed the users/usx95/11-24-fix-missing-lifetimeends-for-params branch from c9e98f4 to 8b25d76 Compare November 24, 2025 12:27
@llvmbot llvmbot added the clang:dataflow Clang Dataflow Analysis framework - https://clang.llvm.org/docs/DataFlowAnalysisIntro.html label Nov 24, 2025
Copy link
Collaborator

@Xazax-hun Xazax-hun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a test demonstrating in what order are the parameters' lifetime end when there are multiple parameters and double check if that is correct? Interestingly, I see different results across clang and gcc so I wonder if this one is not specified. But I think we should make an effort to analyze the same order that we use for execution.

@usx95 usx95 force-pushed the users/usx95/11-24-fix-missing-lifetimeends-for-params branch from 8b25d76 to 6a25dab Compare November 24, 2025 14:16
Copy link
Contributor Author

usx95 commented Nov 24, 2025

Right. This is unspecified and implementation dependent. GCC and Clang diverge here: https://godbolt.org/z/5qhz5cWjd
Clang destructs in the reverse order of parameters. Added a test to capture the same.

@github-actions
Copy link

github-actions bot commented Nov 24, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@usx95 usx95 force-pushed the users/usx95/11-24-fix-missing-lifetimeends-for-params branch from 6a25dab to 9b1dbaf Compare November 24, 2025 14:19
Copy link
Collaborator

@Xazax-hun Xazax-hun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG, thanks!

@usx95 usx95 requested review from martinboehme and removed request for martinboehme November 24, 2025 17:26
@usx95 usx95 force-pushed the users/usx95/11-24-fix-missing-lifetimeends-for-params branch from 9b1dbaf to 8187592 Compare November 25, 2025 17:38
Copy link
Contributor Author

usx95 commented Nov 25, 2025

Happy to address any more comments post-commit. I will land this now.

@usx95 usx95 enabled auto-merge (squash) November 25, 2025 17:41
@usx95 usx95 merged commit 4822f49 into main Nov 25, 2025
7 of 9 checks passed
@usx95 usx95 deleted the users/usx95/11-24-fix-missing-lifetimeends-for-params branch November 25, 2025 18:06
@llvm-ci
Copy link
Collaborator

llvm-ci commented Nov 25, 2025

LLVM Buildbot has detected a new failure on builder hip-third-party-libs-test running on ext_buildbot_hw_05-hip-docker while building clang at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/206/builds/9589

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/hip-tpl.py --jobs=32' (failure)
...
[7672/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/AssumedRankOpConversion.cpp.o
[7673/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/SimdOnly.cpp.o
[7674/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/MapsForPrivatizedSymbols.cpp.o
[7675/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/type.cpp.o
[7676/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFComputeSharedMemoryOffsetsAndSize.cpp.o
[7677/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/program-parsers.cpp.o
[7678/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/unparse.cpp.o
[7679/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFOpConversion.cpp.o
[7680/8217] Building CXX object tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o
[7681/8217] Linking CXX shared library lib/libMLIRGPUPipelines.so.22.0git
FAILED: lib/libMLIRGPUPipelines.so.22.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-array-bounds -Wno-stringop-overread -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/hip-third-party-libs-test/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRGPUPipelines.so.22.0git -o lib/libMLIRGPUPipelines.so.22.0git tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToNVVMPipeline.cpp.o tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/hip-third-party-libs-test/build/lib:"  lib/libMLIRLinalgTransforms.so.22.0git  lib/libMLIRAffineToStandard.so.22.0git  lib/libMLIRGPUToLLVMSPV.so.22.0git  lib/libMLIRGPUToNVVMTransforms.so.22.0git  lib/libMLIRIndexToLLVM.so.22.0git  lib/libMLIRMathToLLVM.so.22.0git  lib/libMLIRMathToXeVM.so.22.0git  lib/libMLIRNVGPUToNVVM.so.22.0git  lib/libMLIRNVVMToLLVM.so.22.0git  lib/libMLIRReconcileUnrealizedCasts.so.22.0git  lib/libMLIRSCFToControlFlow.so.22.0git  lib/libMLIRVectorToSCF.so.22.0git  lib/libMLIRXeGPUTransforms.so.22.0git  lib/libMLIRXeGPUToXeVM.so.22.0git  lib/libMLIRXeVMToLLVM.so.22.0git  lib/libMLIRShardTransforms.so.22.0git  lib/libMLIRTosaShardingInterfaceImpl.so.22.0git  lib/libMLIRTosaDialect.so.22.0git  lib/libMLIRQuantUtils.so.22.0git  lib/libMLIRQuantDialect.so.22.0git  lib/libMLIRTensorTilingInterfaceImpl.so.22.0git  lib/libMLIRLinalgUtils.so.22.0git  lib/libMLIRSPIRVAttrToLLVMConversion.so.22.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.22.0git  lib/libMLIRMemRefToLLVM.so.22.0git  lib/libMLIRAsyncToLLVM.so.22.0git  lib/libMLIRFuncToLLVM.so.22.0git  lib/libMLIRArithToLLVM.so.22.0git  lib/libMLIRControlFlowToLLVM.so.22.0git  lib/libMLIRConvertToLLVMPass.so.22.0git  lib/libMLIRConvertToLLVMInterface.so.22.0git  lib/libMLIRGPUTransforms.so.22.0git  lib/libMLIRAsyncDialect.so.22.0git  lib/libMLIRAMDGPUDialect.so.22.0git  lib/libMLIRNVVMTarget.so.22.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.22.0git  lib/libMLIRROCDLTarget.so.22.0git  lib/libMLIRTargetLLVM.so.22.0git  lib/libMLIRExecutionEngineUtils.so.22.0git  lib/libMLIRROCDLToLLVMIRTranslation.so.22.0git  lib/libMLIRROCDLDialect.so.22.0git  lib/libLLVMAMDGPUAsmParser.so.22.0git  lib/libMLIRSPIRVTarget.so.22.0git  lib/libMLIRSPIRVSerialization.so.22.0git  lib/libMLIRSPIRVDialect.so.22.0git  lib/libMLIRSPIRVImageInterfaces.so.22.0git  lib/libMLIRSPIRVBinaryUtils.so.22.0git  lib/libMLIRVectorToLLVM.so.22.0git  lib/libMLIRArithAttrToLLVMConversion.so.22.0git  lib/libMLIRTargetLLVMIRExport.so.22.0git  lib/libMLIRLLVMIRTransforms.so.22.0git  lib/libMLIROpenMPDialect.so.22.0git  lib/libMLIROpenACCMPCommon.so.22.0git  lib/libMLIRTranslateLib.so.22.0git  lib/libLLVMAMDGPUCodeGen.so.22.0git  lib/libLLVMPasses.so.22.0git  lib/libLLVMipo.so.22.0git  lib/libLLVMFrontendOpenMP.so.22.0git  lib/libLLVMFrontendOffloading.so.22.0git  lib/libLLVMLinker.so.22.0git  lib/libLLVMTarget.so.22.0git  lib/libLLVMBitWriter.so.22.0git  lib/libLLVMTransformUtils.so.22.0git  lib/libLLVMAMDGPUDesc.so.22.0git  lib/libLLVMAnalysis.so.22.0git  lib/libLLVMMCParser.so.22.0git  lib/libLLVMIRReader.so.22.0git  lib/libLLVMAMDGPUInfo.so.22.0git  lib/libLLVMMC.so.22.0git  lib/libMLIRNVVMDialect.so.22.0git  lib/libMLIRVectorTransforms.so.22.0git  lib/libMLIRMemRefTransforms.so.22.0git  lib/libMLIRArithTransforms.so.22.0git  lib/libMLIRFuncTransforms.so.22.0git  lib/libMLIRShardingInterface.so.22.0git  li
Utils.so.22.0git  lib/libMLIRXeGPUUtils.so.22.0git  lib/libMLIRSCFTransforms.so.22.0git  lib/libMLIRBufferizationTransforms.so.22.0git  lib/libMLIRTensorTransforms.so.22.0git  lib/libMLIRAffineTransforms.so.22.0git  lib/libMLIRSCFUtils.so.22.0git  lib/libMLIRLinalgDialect.so.22.0git  lib/libMLIRBufferizationDialect.so.22.0git  lib/libMLIRSparseTensorDialect.so.22.0git  lib/libMLIRParser.so.22.0git  lib/libMLIRBytecodeReader.so.22.0git  lib/libMLIRAsmParser.so.22.0git  lib/libMLIRVectorUtils.so.22.0git  lib/libMLIRTensorUtils.so.22.0git  lib/libMLIRTilingInterface.so.22.0git  lib/libMLIRXeGPUDialect.so.22.0git  lib/libMLIRAffineUtils.so.22.0git  lib/libMLIRAffineAnalysis.so.22.0git  lib/libMLIRSCFDialect.so.22.0git  lib/libMLIRControlFlowDialect.so.22.0git  lib/libMLIRVectorDialect.so.22.0git  lib/libMLIRTensorDialect.so.22.0git  lib/libMLIRParallelCombiningOpInterface.so.22.0git  lib/libMLIRAffineDialect.so.22.0git  lib/libMLIRIndexingMapOpInterface.so.22.0git  lib/libMLIRMaskableOpInterface.so.22.0git  lib/libMLIRMaskingOpInterface.so.22.0git  lib/libMLIRVectorInterfaces.so.22.0git  lib/libMLIRIndexDialect.so.22.0git  lib/libMLIRFuncDialect.so.22.0git  lib/libMLIRGPUDialect.so.22.0git  lib/libMLIRMemRefDialect.so.22.0git  lib/libMLIRArithUtils.so.22.0git  lib/libMLIRComplexDialect.so.22.0git  lib/libMLIRMathDialect.so.22.0git  lib/libMLIRArithDialect.so.22.0git  lib/libMLIRCastInterfaces.so.22.0git  lib/libMLIRInferIntRangeCommon.so.22.0git  lib/libMLIRShapedOpInterfaces.so.22.0git  lib/libMLIRDialect.so.22.0git  lib/libMLIRUBDialect.so.22.0git  lib/libMLIRDLTIDialect.so.22.0git  lib/libMLIRLLVMCommonConversion.so.22.0git  lib/libMLIRTransforms.so.22.0git  lib/libMLIRMemOpInterfaces.so.22.0git  lib/libMLIRRuntimeVerifiableOpInterface.so.22.0git  lib/libMLIRTransformUtils.so.22.0git  lib/libMLIRSubsetOpInterface.so.22.0git  lib/libMLIRValueBoundsOpInterface.so.22.0git  lib/libMLIRDestinationStyleOpInterface.so.22.0git  lib/libMLIRRewrite.so.22.0git  lib/libMLIRRewritePDL.so.22.0git  lib/libMLIRPDLToPDLInterp.so.22.0git  lib/libMLIRPass.so.22.0git  lib/libMLIRAnalysis.so.22.0git  lib/libMLIRLoopLikeInterface.so.22.0git  lib/libMLIRViewLikeInterface.so.22.0git  lib/libMLIRInferStridedMetadataInterface.so.22.0git  lib/libMLIRPresburger.so.22.0git  lib/libMLIRPDLInterpDialect.so.22.0git  lib/libMLIRPDLDialect.so.22.0git  lib/libMLIRXeVMDialect.so.22.0git  lib/libMLIRDialectUtils.so.22.0git  lib/libMLIRLLVMDialect.so.22.0git  lib/libMLIRInferTypeOpInterface.so.22.0git  lib/libMLIRControlFlowInterfaces.so.22.0git  lib/libMLIRFunctionInterfaces.so.22.0git  lib/libMLIRCallInterfaces.so.22.0git  lib/libMLIRSideEffectInterfaces.so.22.0git  lib/libMLIRMemorySlotInterfaces.so.22.0git  lib/libMLIRInferIntRangeInterface.so.22.0git  lib/libMLIRDataLayoutInterfaces.so.22.0git  lib/libMLIRPtrMemorySpaceInterfaces.so.22.0git  lib/libMLIRIR.so.22.0git  lib/libMLIRSupport.so.22.0git  lib/libLLVMAsmParser.so.22.0git  lib/libLLVMCore.so.22.0git  lib/libLLVMBinaryFormat.so.22.0git  lib/libLLVMTargetParser.so.22.0git  lib/libLLVMSupport.so.22.0git  -Wl,-rpath-link,/home/botworker/bbot/hip-third-party-libs-test/build/lib && :
/usr/bin/ld: tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o: in function `(anonymous namespace)::buildPostGPUCommonPassPipeline(mlir::OpPassManager&, mlir::gpu::GPUToXeVMPipelineOptions const&)':
GPUToXeVMPipeline.cpp:(.text._ZN12_GLOBAL__N_130buildPostGPUCommonPassPipelineERN4mlir13OpPassManagerERKNS0_3gpu24GPUToXeVMPipelineOptionsE+0xdc): undefined reference to `mlir::createConvertVectorToLLVMPass()'
collect2: error: ld returned 1 exit status
[7682/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/ArrayValueCopy.cpp.o
[7683/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/variable.cpp.o
[7684/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/initial-image.cpp.o
[7685/8217] Building CXX object tools/flang/lib/Optimizer/Support/CMakeFiles/FIRSupport.dir/InitFIR.cpp.o
[7686/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFGPUToLLVMConversion.cpp.o
[7687/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/executable-parsers.cpp.o
[7688/8217] Building CXX object tools/flang/tools/fir-lsp-server/CMakeFiles/fir-lsp-server.dir/fir-lsp-server.cpp.o
[7689/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-designator.cpp.o
[7690/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/expression.cpp.o
[7691/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-reduction.cpp.o
[7692/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/intrinsics.cpp.o
[7693/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/formatting.cpp.o
[7694/8217] Building CXX object tools/flang/tools/f18-parse-demo/CMakeFiles/f18-parse-demo.dir/f18-parse-demo.cpp.o
[7695/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/intrinsics-library.cpp.o
[7696/8217] Building CXX object tools/flang/tools/fir-opt/CMakeFiles/fir-opt.dir/fir-opt.cpp.o
[7697/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/attr.cpp.o
[7698/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-arithmeticif.cpp.o
[7699/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/DoConcurrentConversion.cpp.o
[7700/8217] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7701/8217] Building CXX object tools/flang/tools/tco/CMakeFiles/tco.dir/tco.cpp.o
[7702/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-if-stmt.cpp.o
[7703/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-nullify.cpp.o
[7704/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-namelist.cpp.o
[7705/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/characteristics.cpp.o
[7706/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-purity.cpp.o
[7707/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-return.cpp.o
[7708/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/shape.cpp.o
[7709/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-stop.cpp.o
[7710/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/compute-offsets.cpp.o
[7711/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-omp-metadirective.cpp.o
[7712/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/assignment.cpp.o
[7713/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-deallocate.cpp.o
[7714/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-character.cpp.o
Step 7 (build cmake config) failure: build cmake config (failure)
...
[7672/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/AssumedRankOpConversion.cpp.o
[7673/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/SimdOnly.cpp.o
[7674/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/MapsForPrivatizedSymbols.cpp.o
[7675/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/type.cpp.o
[7676/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFComputeSharedMemoryOffsetsAndSize.cpp.o
[7677/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/program-parsers.cpp.o
[7678/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/unparse.cpp.o
[7679/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFOpConversion.cpp.o
[7680/8217] Building CXX object tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o
[7681/8217] Linking CXX shared library lib/libMLIRGPUPipelines.so.22.0git
FAILED: lib/libMLIRGPUPipelines.so.22.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-array-bounds -Wno-stringop-overread -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/hip-third-party-libs-test/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRGPUPipelines.so.22.0git -o lib/libMLIRGPUPipelines.so.22.0git tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToNVVMPipeline.cpp.o tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/hip-third-party-libs-test/build/lib:"  lib/libMLIRLinalgTransforms.so.22.0git  lib/libMLIRAffineToStandard.so.22.0git  lib/libMLIRGPUToLLVMSPV.so.22.0git  lib/libMLIRGPUToNVVMTransforms.so.22.0git  lib/libMLIRIndexToLLVM.so.22.0git  lib/libMLIRMathToLLVM.so.22.0git  lib/libMLIRMathToXeVM.so.22.0git  lib/libMLIRNVGPUToNVVM.so.22.0git  lib/libMLIRNVVMToLLVM.so.22.0git  lib/libMLIRReconcileUnrealizedCasts.so.22.0git  lib/libMLIRSCFToControlFlow.so.22.0git  lib/libMLIRVectorToSCF.so.22.0git  lib/libMLIRXeGPUTransforms.so.22.0git  lib/libMLIRXeGPUToXeVM.so.22.0git  lib/libMLIRXeVMToLLVM.so.22.0git  lib/libMLIRShardTransforms.so.22.0git  lib/libMLIRTosaShardingInterfaceImpl.so.22.0git  lib/libMLIRTosaDialect.so.22.0git  lib/libMLIRQuantUtils.so.22.0git  lib/libMLIRQuantDialect.so.22.0git  lib/libMLIRTensorTilingInterfaceImpl.so.22.0git  lib/libMLIRLinalgUtils.so.22.0git  lib/libMLIRSPIRVAttrToLLVMConversion.so.22.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.22.0git  lib/libMLIRMemRefToLLVM.so.22.0git  lib/libMLIRAsyncToLLVM.so.22.0git  lib/libMLIRFuncToLLVM.so.22.0git  lib/libMLIRArithToLLVM.so.22.0git  lib/libMLIRControlFlowToLLVM.so.22.0git  lib/libMLIRConvertToLLVMPass.so.22.0git  lib/libMLIRConvertToLLVMInterface.so.22.0git  lib/libMLIRGPUTransforms.so.22.0git  lib/libMLIRAsyncDialect.so.22.0git  lib/libMLIRAMDGPUDialect.so.22.0git  lib/libMLIRNVVMTarget.so.22.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.22.0git  lib/libMLIRROCDLTarget.so.22.0git  lib/libMLIRTargetLLVM.so.22.0git  lib/libMLIRExecutionEngineUtils.so.22.0git  lib/libMLIRROCDLToLLVMIRTranslation.so.22.0git  lib/libMLIRROCDLDialect.so.22.0git  lib/libLLVMAMDGPUAsmParser.so.22.0git  lib/libMLIRSPIRVTarget.so.22.0git  lib/libMLIRSPIRVSerialization.so.22.0git  lib/libMLIRSPIRVDialect.so.22.0git  lib/libMLIRSPIRVImageInterfaces.so.22.0git  lib/libMLIRSPIRVBinaryUtils.so.22.0git  lib/libMLIRVectorToLLVM.so.22.0git  lib/libMLIRArithAttrToLLVMConversion.so.22.0git  lib/libMLIRTargetLLVMIRExport.so.22.0git  lib/libMLIRLLVMIRTransforms.so.22.0git  lib/libMLIROpenMPDialect.so.22.0git  lib/libMLIROpenACCMPCommon.so.22.0git  lib/libMLIRTranslateLib.so.22.0git  lib/libLLVMAMDGPUCodeGen.so.22.0git  lib/libLLVMPasses.so.22.0git  lib/libLLVMipo.so.22.0git  lib/libLLVMFrontendOpenMP.so.22.0git  lib/libLLVMFrontendOffloading.so.22.0git  lib/libLLVMLinker.so.22.0git  lib/libLLVMTarget.so.22.0git  lib/libLLVMBitWriter.so.22.0git  lib/libLLVMTransformUtils.so.22.0git  lib/libLLVMAMDGPUDesc.so.22.0git  lib/libLLVMAnalysis.so.22.0git  lib/libLLVMMCParser.so.22.0git  lib/libLLVMIRReader.so.22.0git  lib/libLLVMAMDGPUInfo.so.22.0git  lib/libLLVMMC.so.22.0git  lib/libMLIRNVVMDialect.so.22.0git  lib/libMLIRVectorTransforms.so.22.0git  lib/libMLIRMemRefTransforms.so.22.0git  lib/libMLIRArithTransforms.so.22.0git  lib/libMLIRFuncTransforms.so.22.0git  lib/libMLIRShardingInterface.so.22.0git  li
Utils.so.22.0git  lib/libMLIRXeGPUUtils.so.22.0git  lib/libMLIRSCFTransforms.so.22.0git  lib/libMLIRBufferizationTransforms.so.22.0git  lib/libMLIRTensorTransforms.so.22.0git  lib/libMLIRAffineTransforms.so.22.0git  lib/libMLIRSCFUtils.so.22.0git  lib/libMLIRLinalgDialect.so.22.0git  lib/libMLIRBufferizationDialect.so.22.0git  lib/libMLIRSparseTensorDialect.so.22.0git  lib/libMLIRParser.so.22.0git  lib/libMLIRBytecodeReader.so.22.0git  lib/libMLIRAsmParser.so.22.0git  lib/libMLIRVectorUtils.so.22.0git  lib/libMLIRTensorUtils.so.22.0git  lib/libMLIRTilingInterface.so.22.0git  lib/libMLIRXeGPUDialect.so.22.0git  lib/libMLIRAffineUtils.so.22.0git  lib/libMLIRAffineAnalysis.so.22.0git  lib/libMLIRSCFDialect.so.22.0git  lib/libMLIRControlFlowDialect.so.22.0git  lib/libMLIRVectorDialect.so.22.0git  lib/libMLIRTensorDialect.so.22.0git  lib/libMLIRParallelCombiningOpInterface.so.22.0git  lib/libMLIRAffineDialect.so.22.0git  lib/libMLIRIndexingMapOpInterface.so.22.0git  lib/libMLIRMaskableOpInterface.so.22.0git  lib/libMLIRMaskingOpInterface.so.22.0git  lib/libMLIRVectorInterfaces.so.22.0git  lib/libMLIRIndexDialect.so.22.0git  lib/libMLIRFuncDialect.so.22.0git  lib/libMLIRGPUDialect.so.22.0git  lib/libMLIRMemRefDialect.so.22.0git  lib/libMLIRArithUtils.so.22.0git  lib/libMLIRComplexDialect.so.22.0git  lib/libMLIRMathDialect.so.22.0git  lib/libMLIRArithDialect.so.22.0git  lib/libMLIRCastInterfaces.so.22.0git  lib/libMLIRInferIntRangeCommon.so.22.0git  lib/libMLIRShapedOpInterfaces.so.22.0git  lib/libMLIRDialect.so.22.0git  lib/libMLIRUBDialect.so.22.0git  lib/libMLIRDLTIDialect.so.22.0git  lib/libMLIRLLVMCommonConversion.so.22.0git  lib/libMLIRTransforms.so.22.0git  lib/libMLIRMemOpInterfaces.so.22.0git  lib/libMLIRRuntimeVerifiableOpInterface.so.22.0git  lib/libMLIRTransformUtils.so.22.0git  lib/libMLIRSubsetOpInterface.so.22.0git  lib/libMLIRValueBoundsOpInterface.so.22.0git  lib/libMLIRDestinationStyleOpInterface.so.22.0git  lib/libMLIRRewrite.so.22.0git  lib/libMLIRRewritePDL.so.22.0git  lib/libMLIRPDLToPDLInterp.so.22.0git  lib/libMLIRPass.so.22.0git  lib/libMLIRAnalysis.so.22.0git  lib/libMLIRLoopLikeInterface.so.22.0git  lib/libMLIRViewLikeInterface.so.22.0git  lib/libMLIRInferStridedMetadataInterface.so.22.0git  lib/libMLIRPresburger.so.22.0git  lib/libMLIRPDLInterpDialect.so.22.0git  lib/libMLIRPDLDialect.so.22.0git  lib/libMLIRXeVMDialect.so.22.0git  lib/libMLIRDialectUtils.so.22.0git  lib/libMLIRLLVMDialect.so.22.0git  lib/libMLIRInferTypeOpInterface.so.22.0git  lib/libMLIRControlFlowInterfaces.so.22.0git  lib/libMLIRFunctionInterfaces.so.22.0git  lib/libMLIRCallInterfaces.so.22.0git  lib/libMLIRSideEffectInterfaces.so.22.0git  lib/libMLIRMemorySlotInterfaces.so.22.0git  lib/libMLIRInferIntRangeInterface.so.22.0git  lib/libMLIRDataLayoutInterfaces.so.22.0git  lib/libMLIRPtrMemorySpaceInterfaces.so.22.0git  lib/libMLIRIR.so.22.0git  lib/libMLIRSupport.so.22.0git  lib/libLLVMAsmParser.so.22.0git  lib/libLLVMCore.so.22.0git  lib/libLLVMBinaryFormat.so.22.0git  lib/libLLVMTargetParser.so.22.0git  lib/libLLVMSupport.so.22.0git  -Wl,-rpath-link,/home/botworker/bbot/hip-third-party-libs-test/build/lib && :
/usr/bin/ld: tools/mlir/lib/Dialect/GPU/Pipelines/CMakeFiles/obj.MLIRGPUPipelines.dir/GPUToXeVMPipeline.cpp.o: in function `(anonymous namespace)::buildPostGPUCommonPassPipeline(mlir::OpPassManager&, mlir::gpu::GPUToXeVMPipelineOptions const&)':
GPUToXeVMPipeline.cpp:(.text._ZN12_GLOBAL__N_130buildPostGPUCommonPassPipelineERN4mlir13OpPassManagerERKNS0_3gpu24GPUToXeVMPipelineOptionsE+0xdc): undefined reference to `mlir::createConvertVectorToLLVMPass()'
collect2: error: ld returned 1 exit status
[7682/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/ArrayValueCopy.cpp.o
[7683/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/variable.cpp.o
[7684/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/initial-image.cpp.o
[7685/8217] Building CXX object tools/flang/lib/Optimizer/Support/CMakeFiles/FIRSupport.dir/InitFIR.cpp.o
[7686/8217] Building CXX object tools/flang/lib/Optimizer/Transforms/CMakeFiles/FIRTransforms.dir/CUFGPUToLLVMConversion.cpp.o
[7687/8217] Building CXX object tools/flang/lib/Parser/CMakeFiles/FortranParser.dir/executable-parsers.cpp.o
[7688/8217] Building CXX object tools/flang/tools/fir-lsp-server/CMakeFiles/fir-lsp-server.dir/fir-lsp-server.cpp.o
[7689/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-designator.cpp.o
[7690/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/expression.cpp.o
[7691/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-reduction.cpp.o
[7692/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/intrinsics.cpp.o
[7693/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/formatting.cpp.o
[7694/8217] Building CXX object tools/flang/tools/f18-parse-demo/CMakeFiles/f18-parse-demo.dir/f18-parse-demo.cpp.o
[7695/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/intrinsics-library.cpp.o
[7696/8217] Building CXX object tools/flang/tools/fir-opt/CMakeFiles/fir-opt.dir/fir-opt.cpp.o
[7697/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/attr.cpp.o
[7698/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-arithmeticif.cpp.o
[7699/8217] Building CXX object tools/flang/lib/Optimizer/OpenMP/CMakeFiles/FlangOpenMPTransforms.dir/DoConcurrentConversion.cpp.o
[7700/8217] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7701/8217] Building CXX object tools/flang/tools/tco/CMakeFiles/tco.dir/tco.cpp.o
[7702/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-if-stmt.cpp.o
[7703/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-nullify.cpp.o
[7704/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-namelist.cpp.o
[7705/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/characteristics.cpp.o
[7706/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-purity.cpp.o
[7707/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-return.cpp.o
[7708/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/shape.cpp.o
[7709/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-stop.cpp.o
[7710/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/compute-offsets.cpp.o
[7711/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-omp-metadirective.cpp.o
[7712/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/assignment.cpp.o
[7713/8217] Building CXX object tools/flang/lib/Semantics/CMakeFiles/FortranSemantics.dir/check-deallocate.cpp.o
[7714/8217] Building CXX object tools/flang/lib/Evaluate/CMakeFiles/FortranEvaluate.dir/fold-character.cpp.o

boomanaiden154 added a commit to boomanaiden154/llvm-project that referenced this pull request Nov 26, 2025
After the landing of llvm#169320,
the clang CFG analyses are able to do slightly more analysis around
destructors. This results in thread safety also seeing slightly more
destructors. This exposed a bug in ThreadSafety, where we would call
getDestructorDecl, which can return nullptr for base class destructors,
but not do a null pointer check, resulting in a segmentation fault.

This patch fixes the issue by adding a null pointer check and adds a
regression test so this gets caught before downstream integration
testing in the future.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:analysis clang:dataflow Clang Dataflow Analysis framework - https://clang.llvm.org/docs/DataFlowAnalysisIntro.html clang:static analyzer clang:temporal-safety Issue/FR relating to the lifetime analysis in Clang (-Wdangling, -Wreturn-local-addr) clang Clang issues not falling into any other category

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[LifetimeSafety] False-negative for return of pointer to a parameter

6 participants