[llvm] [ControlFlowHub] Add support for switch-based guards (PR #213549)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 2 08:16:04 PDT 2026


github-actions[bot] wrote:

<!--PREMERGE ADVISOR COMMENT: Windows-->
# :window: Windows x64 Test Results

The build failed before running any tests. Click on a failure below to see the details.

<details>
<summary>[code=1] lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/ControlFlowUtils.cpp.obj</summary>

```
FAILED: [code=1] lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/ControlFlowUtils.cpp.obj
sccache C:\clang\clang-msvc\bin\clang-cl.exe  /nologo -TP -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_GLIBCXX_ASSERTIONS -D_HAS_EXCEPTIONS=0 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -IC:\_work\llvm-project\llvm-project\build\lib\Transforms\Utils -IC:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils -IC:\_work\llvm-project\llvm-project\build\include -IC:\_work\llvm-project\llvm-project\llvm\include /DWIN32 /D_WINDOWS   /Zc:inline /Zc:__cplusplus /Oi /Brepro /bigobj /permissive- -Werror=unguarded-availability-new /W4  -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported /Gw /O2 /Ob2  -std:c++17 -MD -UNDEBUG /EHs-c- /GR- /showIncludes /Folib\Transforms\Utils\CMakeFiles\LLVMTransformUtils.dir\ControlFlowUtils.cpp.obj /Fdlib\Transforms\Utils\CMakeFiles\LLVMTransformUtils.dir\LLVMTransformUtils.pdb -c -- C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp
In file included from C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp:13:
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(139,32): error: no template named 'SetVector'; did you mean 'detail::detector'?
139 |                                SetVector<BasicBlock *> &Outgoing);
|                                ^~~~~~~~~
|                                detail::detector
C:\_work\llvm-project\llvm-project\llvm\include\llvm/ADT/STLForwardCompat.h(105,70): note: 'detail::detector' declared here
105 | template <class, template <class...> class Op, class... Args> struct detector {
|                                                                      ^
In file included from C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp:13:
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(139,32): error: too few template arguments for class template 'detector'
139 |                                SetVector<BasicBlock *> &Outgoing);
|                                ^
C:\_work\llvm-project\llvm-project\llvm\include\llvm/ADT/STLForwardCompat.h(105,70): note: template is declared here
105 | template <class, template <class...> class Op, class... Args> struct detector {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        ^
In file included from C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp:13:
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(143,32): error: no template named 'SetVector'; did you mean 'detail::detector'?
143 |                                SetVector<BasicBlock *> &Outgoing);
|                                ^~~~~~~~~
|                                detail::detector
C:\_work\llvm-project\llvm-project\llvm\include\llvm/ADT/STLForwardCompat.h(105,70): note: 'detail::detector' declared here
105 | template <class, template <class...> class Op, class... Args> struct detector {
|                                                                      ^
In file included from C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp:13:
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(143,32): error: too few template arguments for class template 'detector'
143 |                                SetVector<BasicBlock *> &Outgoing);
|                                ^
C:\_work\llvm-project\llvm-project\llvm\include\llvm/ADT/STLForwardCompat.h(105,70): note: template is declared here
105 | template <class, template <class...> class Op, class... Args> struct detector {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        ^
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(316,29): error: out-of-line definition of 'finalizeAsBrSled' does not match any declaration in 'llvm::ControlFlowHub'
316 | BasicBlock *ControlFlowHub::finalizeAsBrSled(
|                             ^~~~~~~~~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(107,8): note: ControlFlowHub defined here
107 | struct ControlFlowHub {
|        ^~~~~~~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(371,29): error: out-of-line definition of 'finalizeAsSwitch' does not match any declaration in 'llvm::ControlFlowHub'
371 | BasicBlock *ControlFlowHub::finalizeAsSwitch(
|                             ^~~~~~~~~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/ControlFlowUtils.h(107,8): note: ControlFlowHub defined here
107 | struct ControlFlowHub {
|        ^~~~~~~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(390,3): error: use of undeclared identifier 'IRBuilder'; did you mean 'DIBuilder'?
390 |   IRBuilder<> Builder(Guard);
|   ^~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\include\llvm/Transforms/Utils/Local.h(40,7): note: 'DIBuilder' declared here
40 | class DIBuilder;
|       ^
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(391,15): error: use of undeclared identifier 'Builder'
391 |   auto *Phi = Builder.CreatePHI(Int32Ty, Branches.size(), "merged.bb.idx");
|               ^~~~~~~
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(414,3): error: use of undeclared identifier 'IRBuilder'
414 |   IRBuilder<>(DefaultDest).CreateUnreachable();
|   ^~~~~~~~~
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(415,20): error: use of undeclared identifier 'Builder'
415 |   SwitchInst *SI = Builder.CreateSwitch(Phi, DefaultDest, Outgoing.size());
|                    ^~~~~~~
C:\_work\llvm-project\llvm-project\llvm\lib\Transforms\Utils\ControlFlowUtils.cpp(417,17): error: use of undeclared identifier 'Builder'
417 |     SI->addCase(Builder.getInt32(I), Outgoing[I]);
|                 ^~~~~~~
11 errors generated.
```
</details>

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.

https://github.com/llvm/llvm-project/pull/213549


More information about the llvm-commits mailing list