From 48c74bb2e2a72830f1068823bfc2f6fd4b53d427 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 8 Mar 2022 14:34:53 -0800 Subject: [PATCH] [SampleProfileInference] Work around odr-use of const non-inline static data member to fix -O0 builds after D120508 MinBaseDistance may be odr-used by std::max, leading to an undefined symbol linker error: ``` ld.lld: error: undefined symbol: (anonymous namespace)::MinCostMaxFlow::MinBaseDistance >>> referenced by SampleProfileInference.cpp:744 (/home/ray/llvm-project/llvm/lib/Transforms/Utils/SampleProfileInference.cpp:744) >>> lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/SampleProfileInference.cpp.o:((anonymous namespace)::FlowAdjuster::jumpDistance(llvm::FlowJump*) const) ``` Since llvm-project is still using C++ 14, workaround it with a cast. --- llvm/lib/Transforms/Utils/SampleProfileInference.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Utils/SampleProfileInference.cpp b/llvm/lib/Transforms/Utils/SampleProfileInference.cpp index 298c36b..6f56f1c 100644 --- a/llvm/lib/Transforms/Utils/SampleProfileInference.cpp +++ b/llvm/lib/Transforms/Utils/SampleProfileInference.cpp @@ -741,7 +741,7 @@ private: /// parts to a multiple of 1 / BaseDistance. int64_t jumpDistance(FlowJump *Jump) const { uint64_t BaseDistance = - std::max(MinCostMaxFlow::MinBaseDistance, + std::max(static_cast(MinCostMaxFlow::MinBaseDistance), std::min(Func.Blocks[Func.Entry].Flow, MinCostMaxFlow::AuxCostUnlikely / NumBlocks())); if (Jump->IsUnlikely) -- 2.7.4