Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@Endilll
Copy link
Contributor

@Endilll Endilll commented May 1, 2025

std::underlying_type is not SFINAE-friendly in Clang and GCC before 9, and it's too much of a hassle to make it work. Instead, I'm inlining the implementation in the only place it's needed. Fixes buildbot failure https://lab.llvm.org/buildbot/#/builders/134/builds/17904 caused by #138089. Demo: https://godbolt.org/z/9qo3csP98

...in old compilers where `std::underlying_type` is not SFINAE-friendly. Fixes buildbot failure https://lab.llvm.org/buildbot/#/builders/134/builds/17904 caused by llvm#138089
@Endilll Endilll requested a review from erichkeane May 1, 2025 13:52
@llvmbot
Copy link
Member

llvmbot commented May 1, 2025

@llvm/pr-subscribers-clang

@llvm/pr-subscribers-llvm-adt

Author: Vlad Serebrennikov (Endilll)

Changes

...in old compilers where std::underlying_type is not SFINAE-friendly. Fixes buildbot failure https://lab.llvm.org/buildbot/#/builders/134/builds/17904 caused by #138089. Demo: https://godbolt.org/z/1dj5Ysn8E


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

1 Files Affected:

  • (modified) llvm/include/llvm/ADT/STLForwardCompat.h (+2-1)
diff --git a/llvm/include/llvm/ADT/STLForwardCompat.h b/llvm/include/llvm/ADT/STLForwardCompat.h
index b8d4babc95fea..c70f4dc29aee0 100644
--- a/llvm/include/llvm/ADT/STLForwardCompat.h
+++ b/llvm/include/llvm/ADT/STLForwardCompat.h
@@ -73,7 +73,8 @@ struct from_range_t {
 };
 inline constexpr from_range_t from_range{};
 
-template <typename T, typename UnderlyingT = std::underlying_type_t<T>>
+template <typename T, typename UnderlyingT = typename std::enable_if_t<
+                          std::is_enum_v<T>, std::underlying_type<T>>::type>
 constexpr bool is_scoped_enum_v =
     std::is_enum_v<T> && !std::is_convertible_v<T, UnderlyingT>;
 

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels May 1, 2025
@Endilll Endilll changed the title [ADT] Make is_scoped_enum_v SFINAE-able [ADT] Remove is_scoped_enum_v May 1, 2025
@Endilll Endilll merged commit b877cfa into llvm:main May 1, 2025
8 of 12 checks passed
@Endilll Endilll deleted the sfinaeable-is-scoped-enum branch May 1, 2025 14:37
@llvm-ci
Copy link
Collaborator

llvm-ci commented May 1, 2025

LLVM Buildbot has detected a new failure on builder premerge-monolithic-linux running on premerge-linux-1 while building clang,llvm at step 7 "test-build-unified-tree-check-all".

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

Here is the relevant piece of the build log for the reference
Step 7 (test-build-unified-tree-check-all) failure: test (failure)
...
8.680 [3/6/34] Building CXX object flang-rt/unittests/Runtime/CMakeFiles/RuntimeTests.dir/Transformational.cpp.o
8.995 [3/5/35] Building CXX object flang-rt/unittests/Runtime/CMakeFiles/RuntimeTests.dir/NumericalFormatTest.cpp.o
10.543 [3/4/36] Building CXX object flang-rt/unittests/Runtime/CMakeFiles/RuntimeTests.dir/Reduction.cpp.o
11.052 [3/3/37] Building CXX object flang-rt/unittests/Runtime/CMakeFiles/RuntimeTests.dir/CharacterTest.cpp.o
17.011 [3/2/38] Building CXX object flang-rt/unittests/third-party/unittest/CMakeFiles/llvm_gtest.dir/googletest/src/gtest-all.cc.o
17.133 [2/2/39] Linking CXX static library /build/buildbot/premerge-monolithic-linux/build/lib/libllvm_gtest.a
17.196 [1/2/40] Linking CXX static library /build/buildbot/premerge-monolithic-linux/build/lib/libllvm_gtest_main.a
17.436 [0/2/41] Linking CXX executable flang-rt/unittests/Runtime/RuntimeTests
18.992 [0/1/42] Checking TSan Go runtime...
213.523 [370/58/998] Linking CXX executable unittests/DebugInfo/GSYM/DebugInfoGSYMTests
FAILED: unittests/DebugInfo/GSYM/DebugInfoGSYMTests 
: && /usr/bin/clang++ -gmlt -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -fuse-ld=lld -Wl,--color-diagnostics    -Wl,--gc-sections unittests/DebugInfo/GSYM/CMakeFiles/DebugInfoGSYMTests.dir/GSYMTest.cpp.o -o unittests/DebugInfo/GSYM/DebugInfoGSYMTests  lib/libLLVMDebugInfoDWARF.a  lib/libLLVMDebugInfoGSYM.a  lib/libLLVMMC.a  lib/libLLVMSupport.a  lib/libLLVMObjectYAML.a  lib/libLLVMSupport.a  lib/libllvm_gtest_main.a  lib/libllvm_gtest.a  lib/libLLVMTestingSupport.a  lib/libLLVMDebugInfoDWARF.a  lib/libLLVMObject.a  lib/libLLVMIRReader.a  lib/libLLVMBitReader.a  lib/libLLVMAsmParser.a  lib/libLLVMCore.a  lib/libLLVMRemarks.a  lib/libLLVMBitstreamReader.a  lib/libLLVMMCParser.a  lib/libLLVMMC.a  lib/libLLVMTextAPI.a  lib/libLLVMBinaryFormat.a  lib/libLLVMTargetParser.a  lib/libLLVMDebugInfoCodeView.a  lib/libllvm_gtest.a  lib/libLLVMSupport.a  -lrt  -ldl  -lm  /usr/lib/x86_64-linux-gnu/libz.so  lib/libLLVMDemangle.a  -lpthread && :
ld.lld: error: cannot open lib/libllvm_gtest.a: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
215.369 [370/38/1018] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DebugTypeODRUniquingTest.cpp.o
215.452 [370/36/1020] Building CXX object unittests/FuzzMutate/CMakeFiles/FuzzMutateTests.dir/RandomIRBuilderTest.cpp.o
215.688 [370/35/1021] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ConstantFPRangeTest.cpp.o
215.705 [370/34/1022] Building CXX object unittests/FuzzMutate/CMakeFiles/FuzzMutateTests.dir/StrategiesTest.cpp.o
215.801 [370/33/1023] Building CXX object unittests/ExecutionEngine/Orc/CMakeFiles/OrcJITTests.dir/ResourceTrackerTest.cpp.o
215.909 [370/32/1024] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/MemoryModelRelaxationAnnotationsTest.cpp.o
215.967 [370/31/1025] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ManglerTest.cpp.o
216.269 [370/30/1026] Building CXX object unittests/ExecutionEngine/Orc/CMakeFiles/OrcJITTests.dir/JITLinkRedirectionManagerTest.cpp.o
216.275 [370/29/1027] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/BasicBlockTest.cpp.o
216.453 [370/28/1028] Building CXX object tools/flang/unittests/Frontend/CMakeFiles/FlangFrontendTests.dir/CompilerInstanceTest.cpp.o
216.549 [370/27/1029] Building CXX object unittests/ExecutionEngine/Orc/CMakeFiles/OrcJITTests.dir/ReOptimizeLayerTest.cpp.o
216.595 [370/26/1030] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/LegacyPassManagerTest.cpp.o
216.616 [370/25/1031] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ConstantsTest.cpp.o
216.641 [370/24/1032] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ShuffleVectorInstTest.cpp.o
216.883 [370/23/1033] Building CXX object tools/flang/unittests/Frontend/CMakeFiles/FlangFrontendTests.dir/FrontendActionTest.cpp.o
216.985 [370/22/1034] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/MDBuilderTest.cpp.o
217.192 [370/21/1035] Building CXX object unittests/FuzzMutate/CMakeFiles/FuzzMutateTests.dir/OperationsTest.cpp.o
217.206 [370/20/1036] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ModuleSummaryIndexTest.cpp.o
217.294 [370/19/1037] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DominatorTreeBatchUpdatesTest.cpp.o
217.497 [370/18/1038] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/BasicBlockDbgInfoTest.cpp.o
217.593 [370/17/1039] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/IntrinsicsTest.cpp.o
217.771 [370/16/1040] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DroppedVariableStatsIRTest.cpp.o
218.043 [370/15/1041] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DominatorTreeTest.cpp.o
218.110 [370/14/1042] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ModuleTest.cpp.o
218.551 [370/13/1043] Building CXX object tools/flang/unittests/Frontend/CMakeFiles/FlangFrontendTests.dir/CodeGenActionTest.cpp.o
219.290 [370/12/1044] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DataLayoutTest.cpp.o
219.534 [370/11/1045] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/DebugInfoTest.cpp.o
219.832 [370/10/1046] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/IRBuilderTest.cpp.o
220.732 [370/9/1047] Building CXX object unittests/ExecutionEngine/Orc/CMakeFiles/OrcJITTests.dir/CoreAPIsTest.cpp.o
221.331 [370/8/1048] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/InstructionsTest.cpp.o
222.165 [370/7/1049] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/ConstantRangeTest.cpp.o
222.482 [370/6/1050] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/PassManagerTest.cpp.o
224.036 [370/5/1051] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/PatternMatch.cpp.o
225.592 [370/4/1052] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/MetadataTest.cpp.o
231.735 [370/3/1053] Building CXX object unittests/IR/CMakeFiles/IRTests.dir/PassBuilderCallbacksTest.cpp.o

IanWood1 pushed a commit to IanWood1/llvm-project that referenced this pull request May 6, 2025
`std::underlying_type` is not SFINAE-friendly in Clang and GCC before 9,
and it's too much of a hassle to make it work. Instead, I'm inlining the
implementation in the only place it's needed. Fixes buildbot failure
https://lab.llvm.org/buildbot/#/builders/134/builds/17904 caused by
llvm#138089. Demo: https://godbolt.org/z/9qo3csP98
GeorgeARM pushed a commit to GeorgeARM/llvm-project that referenced this pull request May 7, 2025
`std::underlying_type` is not SFINAE-friendly in Clang and GCC before 9,
and it's too much of a hassle to make it work. Instead, I'm inlining the
implementation in the only place it's needed. Fixes buildbot failure
https://lab.llvm.org/buildbot/#/builders/134/builds/17904 caused by
llvm#138089. Demo: https://godbolt.org/z/9qo3csP98
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category llvm:adt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants