Instead of using the validity of a brace's source location as a flag for list initialization, this now uses a PointerIntPair to model it so we do not increase the size of the AST node to track this information. This allows us to retain the valid source location information, which fixes the coverage assertion. Fixes https://github.com/llvm/llvm-project/issues/62105 Differential Revision: https://reviews.llvm.org/D148245
25 lines
603 B
C++
25 lines
603 B
C++
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 -fcoverage-mapping %s
|
|
// expected-no-diagnostics
|
|
|
|
// GH62105 demonstrated a crash with this example code when calculating
|
|
// coverage mapping because some source location information was being dropped.
|
|
// Demonstrate that we do not crash on this code.
|
|
namespace std { template <typename> class initializer_list {}; }
|
|
|
|
template <typename> struct T {
|
|
T(std::initializer_list<int>, int = int());
|
|
bool b;
|
|
};
|
|
|
|
template <typename> struct S1 {
|
|
static void foo() {
|
|
class C;
|
|
(void)(0 ? T<C>{} : T<C>{});
|
|
}
|
|
};
|
|
|
|
void bar() {
|
|
S1<int>::foo();
|
|
}
|
|
|