rsmith added a comment.

Here's the diff to `test_demangle.pass.cpp`:

  --- a/libcxxabi/test/test_demangle.pass.cpp
  +++ b/libcxxabi/test/test_demangle.pass.cpp
  @@ -29995,10 +29995,10 @@ const char* cases[][2] =
       {"_Z15test_uuidofTypeI10TestStructEvDTu8__uuidofT_EE", "void 
test_uuidofType<TestStruct>(decltype(__uuidof(TestStruct)))"},
       {"_Z15test_uuidofExprI9HasMemberEvDTu8__uuidofXsrT_6memberEEE", "void 
test_uuidofExpr<HasMember>(decltype(__uuidof(HasMember::member)))"},
   
  -    // C++2a char8_t:
  +    // C++20 char8_t:
       {"_ZTSPDu", "typeinfo name for char8_t*"},
   
  -    // C++2a lambda-expressions:
  +    // C++20 lambda-expressions:
       {"_ZNK1xMUlTyT_E_clIiEEDaS_", "auto x::'lambda'<typename 
$T>($T)::operator()<int>(x) const"},
       {"_ZNK1xMUlTnPA3_ivE_clILS0_0EEEDav", "auto x::'lambda'<int (*$N) 
[3]>()::operator()<(int [3])0>() const"},
       {"_ZNK1xMUlTyTtTyTnT_TpTnPA3_TL0__ETpTyvE_clIi1XJfEEEDav", "auto 
x::'lambda'<typename $T, template<typename $T0, $T $N, $T0 (*...$N0) [3]> 
typename $TT, typename ...$T1>()::operator()<int, X, float>() const"},
  @@ -30015,8 +30015,10 @@ const char* cases[][2] =
       // See https://github.com/itanium-cxx-abi/cxx-abi/issues/106.
       {"_ZN1XIZ1fIiEvOT_EUlS2_DpT0_E_EclIJEEEvDpT_", "void X<void 
f<int>(int&&)::'lambda'(int&&, auto...)>::operator()<>()"},
       
{"_ZZZZN6abcdef9abcdefghi29abcdefabcdefabcdefabcefabcdef27xxxxxxxxxxxxxxxxxxxxxxxxxxxEN4absl8DurationERKNSt3__u12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS1_19yyyyyyyyyyyyyyyyyyyEENK3$_5clEvENKUlvE_clEvE6zzzzzz",
 
"abcdef::abcdefghi::abcdefabcdefabcdefabcefabcdef::xxxxxxxxxxxxxxxxxxxxxxxxxxx(absl::Duration,
 std::__u::basic_string<char, std::__u::char_traits<char>, 
std::__u::allocator<char>> const&, 
abcdef::abcdefghi::abcdefabcdefabcdefabcefabcdef::yyyyyyyyyyyyyyyyyyy*)::$_5::operator()()
 const::'lambda'()::operator()() const::zzzzzz"},
  +    // See https://github.com/itanium-cxx-abi/cxx-abi/issues/165.
  +    {"_ZN1C1fIiEEvDTtlNS_UlT_TL0__E_EEE", "void 
C::f<int>(decltype(C::'lambda'(int, auto){}))"},
   
  -    // C++2a class type non-type template parameters:
  +    // C++20 class type non-type template parameters:
       {"_Z1fIXtl1BLPi0ELi1EEEEvv", "void f<B{(int*)0, 1}>()"},
       {"_Z1fIXtl1BLPi32EEEEvv", "void f<B{(int*)32}>()"},
       {"_Z1fIXtl1BrcPiLi0EEEEvv", "void f<B{reinterpret_cast<int*>(0)}>()"},
  @@ -30089,6 +30091,51 @@ const char* cases[][2] =
       {"_ZW1ML4Oink", "Oink@M"},
       {"_ZW1ML1fi", "f@M(int)"},
   
  +    // C++20 concepts, see 
https://github.com/itanium-cxx-abi/cxx-abi/issues/24.
  +    {"_Z2f0IiE1SIX1CIT_EEEv", "S<C<int>> f0<int>()"},
  +    {"_ZN5test21AIiEF1fEzQ4TrueIT_E", "test2::A<int>::friend f(...) requires 
True<T>"},
  +    {"_ZN5test2F1gIvEEvzQaa4TrueIT_E4TrueITL0__E", "void test2::friend 
g<void>(...) requires True<T> && True<TL0_>"},
  +    {"_ZN5test21hIvEEvzQ4TrueITL0__E", "void test2::h<void>(...) requires 
True<TL0_>"},
  +    {"_ZN5test2F1iIvQaa4TrueIT_E4TrueITL0__EEEvz", "void test2::friend 
i<void>(...)"},
  +    {"_ZN5test21jIvQ4TrueITL0__EEEvz", "void test2::j<void>(...)"},
  +    {"_ZN5test2F1kITk4TruevQ4TrueIT_EEEvz", "void test2::friend 
k<void>(...)"},
  +    {"_ZN5test21lITk4TruevEEvz", "void test2::l<void>(...)"},
  +    {"_ZN5test31dITnDaLi0EEEvv", "void test3::d<0>()"},
  +    {"_ZN5test31eITnDcLi0EEEvv", "void test3::e<0>()"},
  +    {"_ZN5test31fITnDk1CLi0EEEvv", "void test3::f<0>()"},
  +    {"_ZN5test31gITnDk1DIiELi0EEEvv", "void test3::g<0>()"},
  +    {"_ZN5test31hIiTnDk1DIT_ELi0EEEvv", "void test3::h<int, 0>()"},
  +    {"_ZN5test31iIiEEvDTnw_Dk1CpicvT__EEE", "void test3::i<int>(decltype(new 
C auto((int)())))"},
  +    {"_ZN5test31jIiEEvDTnw_DK1CpicvT__EEE", "void test3::j<int>(decltype(new 
C decltype(auto)((int)())))"},
  +    {"_ZN5test41fITk1CiEEvv", "void test4::f<int>()"},
  +    {"_ZN5test41gITk1DIiEiEEvv", "void test4::g<int>()"},
  +    {"_ZN5test51fINS_1XEEEvv", "void test5::f<test5::X>()"},
  +    {"_ZN5test51fITtTyTnTL0__ENS_1YEEEvv", "void test5::f<test5::Y>()"},
  +    {"_ZN5test51fITtTyTnTL0__ENS_1ZEEEvv", "void test5::f<test5::Z>()"},
  +    {"_ZN5test51gITtTyTnTL0__Q1CIS1_EENS_1XEEEvv", "void 
test5::g<test5::X>()"},
  +    {"_ZN5test51gINS_1YEEEvv", "void test5::g<test5::Y>()"},
  +    {"_ZN5test51gITtTyTnTL0__Q1CIS1_EENS_1ZEEEvv", "void 
test5::g<test5::Z>()"},
  +    {"_ZN5test51hITtTk1CTnTL0__ENS_1XEEEvv", "void test5::h<test5::X>()"},
  +    {"_ZN5test51hITtTk1CTnTL0__ENS_1YEEEvv", "void test5::h<test5::Y>()"},
  +    {"_ZN5test51hINS_1ZEEEvv", "void test5::h<test5::Z>()"},
  +    {"_ZN5test51iITpTtTk1CTnTL0__EJNS_1XENS_1YENS_1ZEEEEvv", "void 
test5::i<test5::X, test5::Y, test5::Z>()"},
  +    {"_ZN5test51iITpTtTk1CTnTL0__EJNS_1YENS_1ZENS_1XEEEEvv", "void 
test5::i<test5::Y, test5::Z, test5::X>()"},
  +    {"_ZN5test51iIJNS_1ZENS_1XENS_1YEEEEvv", "void test5::i<test5::Z, 
test5::X, test5::Y>()"},
  +    {"_ZN5test51pINS_1AEEEvv", "void test5::p<test5::A>()"},
  +    {"_ZN5test51pITtTpTyENS_1BEEEvv", "void test5::p<test5::B>()"},
  +    {"_ZN5test51qITtTyTyENS_1AEEEvv", "void test5::q<test5::A>()"},
  +    {"_ZN5test51qINS_1BEEEvv", "void test5::q<test5::B>()"},
  +    {"_ZN5test61fITk1CiEEvT_", "void test6::f<int>(int)"},
  +    {"_ZN5test61gIiTk1DIT_EiEEvT0_", "void test6::g<int, int>(int)"},
  +    
{"_ZZN5test71fIiEEvvENKUlTyQaa1CIT_E1CITL0__ET0_E_clIiiEEDaS3_Q1CIDtfp_EE", 
"auto void test7::f<int>()::'lambda'<typename $T> requires C<T> && C<TL0_> 
(auto)::operator()<int, int>(auto) const requires C<decltype(fp)>"},
  +    
{"_ZZN5test71fIiEEvvENKUlTyQaa1CIT_E1CITL0__ET0_E0_clIiiEEDaS3_Qaa1CIDtfp_EELb1E",
 "auto void test7::f<int>()::'lambda0'<typename $T> requires C<T> && C<TL0_> 
(auto)::operator()<int, int>(auto) const requires C<decltype(fp)> && true"},
  +    
{"_ZZN5test71fIiEEvvENKUlTyQaa1CIT_E1CITL0__ET0_E1_clIiiEEDaS3_Q1CIDtfp_EE", 
"auto void test7::f<int>()::'lambda1'<typename $T> requires C<T> && C<TL0_> 
(auto)::operator()<int, int>(auto) const requires C<decltype(fp)>"},
  +    {"_ZZN5test71fIiEEvvENKUlTyT0_E_clIiiEEDaS1_", "auto void 
test7::f<int>()::'lambda'<typename $T>(auto)::operator()<int, int>(auto) 
const"},
  +
  +    // C++20 requires expressions, see 
https://github.com/itanium-cxx-abi/cxx-abi/issues/24.
  +    
{"_Z1fIiEviQrqXcvT__EXfp_Xeqfp_cvS0__EXplcvS0__ELi1ER5SmallXmicvS0__ELi1ENXmlcvS0__ELi2ENR11SmallerThanILi1234EETS0_T1XIS0_ETNS3_4typeETS2_IiEQ11SmallerThanIS0_Li256EEE",
 "void f<int>(int) requires requires { (T)(); fp; fp == (T)(); {(T)() + 1} -> 
Small; {(T)() - 1} noexcept; {(T)() * 2} noexcept -> SmallerThan<1234>; 
typename T; typename X<T>; typename X<T>::type; typename X<int>; requires 
SmallerThan<T, 256>; }"},
  +    {"_Z1gIiEviQrQT__XplfL0p_fp_E", "void g<int>(int) requires requires (T) 
{ fp + fp; }"},
  +
       // Special Substs a, b, d, i, o, s (not including std::)
       {"_Z1fSaIiE", "f(std::allocator<int>)"},
       {"_Z1fSbIiE", "f(std::basic_string<int>)"},

Unfortunately, Arcanist both insists on uploading "full context" (that is, the 
entire 5.2MB file, almost all of which is unchanged), and refuses to upload 
"very large" diffs, so it's not able to upload this small change to Phabricator 
for review.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147655/new/

https://reviews.llvm.org/D147655

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to