[clang-tools-extra] [clang-tidy] Fix crash in `cppcoreguidelines-pro-type-member-init` with alias template in constructor initializer (PR #192786)

via cfe-commits cfe-commits at lists.llvm.org
Sat Apr 18 04:30:13 PDT 2026


github-actions[bot] wrote:

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

* 3134 tests passed
* 30 tests skipped
* 1 test failed

## Failed Tests
(click on a test name to see its output)

### Clang Tools
<details>
<summary>Clang Tools.clang-tidy/checkers/cppcoreguidelines/pro-type-member-init-no-crash.cpp</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
C:/Python312/python.exe C:/_work/llvm-project/llvm-project/clang-tools-extra/test/../test\clang-tidy\check_clang_tidy.py -expect-clang-tidy-error C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\checkers\cppcoreguidelines\pro-type-member-init-no-crash.cpp cppcoreguidelines-pro-type-member-init C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp
# executed command: C:/Python312/python.exe 'C:/_work/llvm-project/llvm-project/clang-tools-extra/test/../test\clang-tidy\check_clang_tidy.py' -expect-clang-tidy-error 'C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\checkers\cppcoreguidelines\pro-type-member-init-no-crash.cpp' cppcoreguidelines-pro-type-member-init 'C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp'
# .---command stdout------------
# | Running ['not', 'clang-tidy', '--experimental-custom-checks', 'C:\\_work\\llvm-project\\llvm-project\\build\\tools\\clang\\tools\\extra\\test\\clang-tidy\\checkers\\cppcoreguidelines\\Output\\pro-type-member-init-no-crash.cpp.tmp.cpp', '-fix', '--checks=-*,cppcoreguidelines-pro-type-member-init', '--config={}', '--', '-std=c++11', '-nostdinc++', '-isystem', 'C:\\_work\\llvm-project\\llvm-project\\clang-tools-extra\\test\\clang-tidy\\checkers\\Inputs\\Headers\\std']...
# | ------------------------ clang-tidy output -----------------------
# | 2 errors generated.
# | 
# | Error while processing C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:4:5: error: field has incomplete type 'X' [clang-diagnostic-error]
# |     4 |   X x;
# |       |     ^
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:3:8: note: definition of 'X' is not complete until the closing '}'
# |     3 | struct X {
# |       |        ^
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:12:20: error: base class has incomplete type [clang-diagnostic-error]
# |    12 |   class B : public NoCrash {
# |       |             ~~~~~~~^~~~~~~
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:9:29: note: definition of 'NoCrash<T>' is not complete until the closing '}'
# |     9 | template <typename T> class NoCrash {
# |       |                             ^
# | Found compiler errors, but -fix-errors was not specified.
# | 
# | Fixes have NOT been applied.
# | 
# | 
# | 
# | Found compiler error(s).
# | 
# | 
# | ------------------------------------------------------------------
# | ------------------------------ Fixes -----------------------------
# | 
# | ------------------------------------------------------------------
# | FileCheck -input-file=C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.msg C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\checkers\cppcoreguidelines\pro-type-member-init-no-crash.cpp -check-prefixes=CHECK-MESSAGES -implicit-check-not={{warning|error}}: failed:
# | C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\checkers\cppcoreguidelines\pro-type-member-init-no-crash.cpp:32:21: error: CHECK-MESSAGES: expected string not found in input
# | 
# |  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: constructor does not initialize these bases: Base
# | 
# |                     ^
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.msg:12:234: note: scanning from here
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:9:29: note: definition of 'NoCrash<T>' is not complete until the closing '}'
# | 
# |                                                                                                                                                                                                                                          ^
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.msg:12:234: note: with "@LINE-1" equal to "31"
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:9:29: note: definition of 'NoCrash<T>' is not complete until the closing '}'
# | 
# |                                                                                                                                                                                                                                          ^
# | 
# | C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.msg:15:24: note: possible intended match here
# | 
# | Found compiler errors, but -fix-errors was not specified.
# | 
# |                        ^
# | 
# | 
# | 
# | Input file: C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp.msg
# | 
# | Check file: C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\checkers\cppcoreguidelines\pro-type-member-init-no-crash.cpp
# | 
# | 
# | 
# | -dump-input=help explains the following input dump.
# | 
# | 
# | 
# | Input was:
# | 
# | <<<<<<
# | 
# |             .
# | 
# |             .
# | 
# |             .
# | 
# |             7:  3 | struct X { 
# | 
# |             8:  | ^ 
# | 
# |             9: C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:12:20: error: base class has incomplete type [clang-diagnostic-error] 
# | 
# |            10:  12 | class B : public NoCrash { 
# | 
# |            11:  | ~~~~~~~^~~~~~~ 
# | 
# |            12: C:\_work\llvm-project\llvm-project\build\tools\clang\tools\extra\test\clang-tidy\checkers\cppcoreguidelines\Output\pro-type-member-init-no-crash.cpp.tmp.cpp:9:29: note: definition of 'NoCrash<T>' is not complete until the closing '}' 
# | 
# | check:32'0                                                                                                                                                                                                                                              X error: no match found
# | 
# | check:32'1                                                                                                                                                                                                                                                with "@LINE-1" equal to "31"
# | 
# |            13:  9 | template <typename T> class NoCrash { 
# | 
# | check:32'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 
# |            14:  | ^ 
# | 
# | check:32'0     ~~~~~
# | 
# |            15: Found compiler errors, but -fix-errors was not specified.
# |  
# | 
# | check:32'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 
# | check:32'2                            ?                                    possible intended match
# | 
# |            16: Fixes have NOT been applied.
# |  
# | 
# | check:32'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 
# |            17: 
# |  
# | 
# | check:32'0     ~~
# | 
# |            18: Found compiler error(s).
# |  
# | 
# | check:32'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 
# | >>>>>>
# | 
# | 
# `-----------------------------
# .---command stderr------------
# | Traceback (most recent call last):
# |   File "C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\check_clang_tidy.py", line 554, in <module>
# |     main()
# |   File "C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\check_clang_tidy.py", line 550, in main
# |     CheckRunner(args, extra_args).run()
# |   File "C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\check_clang_tidy.py", line 433, in run
# |     self.check_messages(main_output)
# |   File "C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\check_clang_tidy.py", line 358, in check_messages
# |     try_run(
# |   File "C:\_work\llvm-project\llvm-project\clang-tools-extra\test\clang-tidy\check_clang_tidy.py", line 64, in try_run
# |     process_output = subprocess.check_output(args, stderr=subprocess.STDOUT).decode(
# |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# |   File "c:\python312\Lib\subprocess.py", line 466, in check_output
# |     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
# |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# |   File "c:\python312\Lib\subprocess.py", line 571, in run
# |     raise CalledProcessError(retcode, process.args,
# | subprocess.CalledProcessError: Command '['FileCheck', '-input-file=C:\\_work\\llvm-project\\llvm-project\\build\\tools\\clang\\tools\\extra\\test\\clang-tidy\\checkers\\cppcoreguidelines\\Output\\pro-type-member-init-no-crash.cpp.tmp.cpp.msg', 'C:\\_work\\llvm-project\\llvm-project\\clang-tools-extra\\test\\clang-tidy\\checkers\\cppcoreguidelines\\pro-type-member-init-no-crash.cpp', '-check-prefixes=CHECK-MESSAGES', '-implicit-check-not={{warning|error}}:']' returned non-zero exit status 1.
# `-----------------------------
# error: command failed with exit status: 1

--

```
</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/192786


More information about the cfe-commits mailing list