From 8c34dbe749ca58fb6e7fc7c7a3fc0767b97a07cf Mon Sep 17 00:00:00 2001 From: "Garbowski, Mateusz" Date: Wed, 24 Jun 2026 15:19:05 +0200 Subject: [PATCH] Fix clang build with GCC 7.5 GCC 7.5 rejects two newer C++ idioms: - LifetimeSafety/FactsGenerator: replace ArrayRef CTAD with an explicit ArrayRef to avoid GCC 7's broken brace-init deduction. - ScalableStaticAnalysisFramework: add explicit std::move() on unique_ptr returns (pre-P1825, GCC 7 won't implicitly move). No behavior change; restores compatibility with GCC 7.5. --- clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp | 2 +- .../Analyses/PointerFlow/PointerFlowAnalysis.cpp | 2 +- .../Analyses/UnsafeBufferUsage/UnsafeBufferUsageAnalysis.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp index 633f9ae57930b..c03e46ccb11b8 100644 --- a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp +++ b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp @@ -544,7 +544,7 @@ void FactsGenerator::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *OCE) { } } - ArrayRef Args = {OCE->getArgs(), OCE->getNumArgs()}; + ArrayRef Args(OCE->getArgs(), OCE->getNumArgs()); // For `static operator()`, the first argument is the object argument, // remove it from the argument list to avoid off-by-one errors. if (OCE->getOperator() == OO_Call && OCE->getDirectCallee()->isStatic()) diff --git a/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowAnalysis.cpp b/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowAnalysis.cpp index de8490601cccc..1db5fff1fdf7f 100644 --- a/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowAnalysis.cpp +++ b/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowAnalysis.cpp @@ -91,7 +91,7 @@ Expected> deserializePointerFlowAnalysisResult( auto Ret = std::make_unique(); Ret->Edges = std::move(Edges); - return Ret; + return std::move(Ret); } JSONFormat::AnalysisResultRegistry::Add diff --git a/clang/lib/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageAnalysis.cpp b/clang/lib/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageAnalysis.cpp index 6ca8c5176d21b..42dc6aec5820a 100644 --- a/clang/lib/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageAnalysis.cpp +++ b/clang/lib/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageAnalysis.cpp @@ -57,7 +57,7 @@ deserializeUnsafeBufferUsageAnalysisResult( auto Ret = std::make_unique(); Ret->UnsafeBuffers = std::move(*UnsafeBuffers); - return Ret; + return std::move(Ret); } JSONFormat::AnalysisResultRegistry::Add @@ -116,7 +116,7 @@ deserializeUnsafeBufferReachableAnalysisResult( auto Ret = std::make_unique(); Ret->Reachables = std::move(*Reachables); - return Ret; + return std::move(Ret); } JSONFormat::AnalysisResultRegistry::Add