Skip to content

Commit 4c2b881

Browse files
Add a crash-on-valid unit test
1 parent 097881d commit 4c2b881

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,8 @@ Bug Fixes in This Version
813813

814814
- Fixed `static_cast` to array of unknown bound. Fixes (#GH62863).
815815

816+
- Fixed Clang crashing when failing to perform some C++ Initialization Sequences. (#GH98102)
817+
816818
Bug Fixes to Compiler Builtins
817819
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
818820

clang/test/SemaCXX/pr98102.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
2+
// expected-no-diagnostics
3+
4+
template <bool v>
5+
struct BC {
6+
static constexpr bool value = v;
7+
};
8+
9+
template <typename T, typename Arg>
10+
struct Constructible : BC<__is_constructible(T, Arg)> {};
11+
12+
template <typename T>
13+
using Requires = T::value;
14+
15+
template <typename T>
16+
struct optional {
17+
template <typename U, Requires<Constructible<T, U>> = true>
18+
optional(U) {}
19+
};
20+
21+
struct MO {};
22+
struct S : MO {};
23+
struct TB {
24+
TB(optional<S>) {}
25+
};
26+
27+
class TD : TB, MO {
28+
using TB::TB;
29+
};
30+
31+
void foo() {
32+
static_assert(Constructible<TD, TD>::value);
33+
}

0 commit comments

Comments
 (0)