Skip to content

Commit 653965a

Browse files
committed
Merge pull request #15443 from ydb-platform/merge-libs-250307-0050
2 parents 26e405b + f105ca1 commit 653965a

File tree

87 files changed

+2016
-607
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+2016
-607
lines changed

build/conf/java.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,8 +1387,8 @@ when ($JDK_REAL_VERSION == "11") {
13871387
}
13881388

13891389
# tag:java-specific
1390-
JAVAC_THREADPOOL_SIZE=4
1391-
JAVAC_OPTS=-J-XX:ActiveProcessorCount=$JAVAC_THREADPOOL_SIZE
1390+
JAVAC_CPU_COUNT=4
1391+
JAVAC_OPTS=-J-XX:ActiveProcessorCount=$JAVAC_CPU_COUNT
13921392
when ($USE_SYSTEM_JDK) {
13931393
JDK_RESOURCE=$USE_SYSTEM_JDK
13941394
}

build/conf/licenses.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@
262262
"libtiff",
263263
"LicenseRef-scancode-ams-fonts",
264264
"LicenseRef-scancode-bitstream",
265+
"LicenseRef-scancode-happy-bunny",
265266
"LicenseRef-scancode-mit-no-advert-export-control",
266267
"LicenseRef-scancode-oasis-ws-security-spec",
267268
"LicenseRef-scancode-paul-mackerras-binary",

build/conf/settings.conf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ USE_GLOBAL_CMD=yes
99
PIC_NO_PIE=no
1010
FAIL_PY2=no
1111
MAIN_OUTPUT_AS_EXTRA=yes
12-
DISABLE_ATD=yes
1312

1413
when ($OS_WINDOWS == "yes") {
1514
USE_GLOBAL_CMD=no

build/mapping.conf.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@
517517
"8119415565": "{registry_endpoint}/8119415565",
518518
"8161441586": "{registry_endpoint}/8161441586",
519519
"8182033807": "{registry_endpoint}/8182033807",
520+
"8193784322": "{registry_endpoint}/8193784322",
520521
"5486731632": "{registry_endpoint}/5486731632",
521522
"5514350352": "{registry_endpoint}/5514350352",
522523
"5514360398": "{registry_endpoint}/5514360398",
@@ -1788,6 +1789,7 @@
17881789
"8119415565": "devtools/ya/test/programs/test_tool/bin/test_tool for linux",
17891790
"8161441586": "devtools/ya/test/programs/test_tool/bin/test_tool for linux",
17901791
"8182033807": "devtools/ya/test/programs/test_tool/bin/test_tool for linux",
1792+
"8193784322": "devtools/ya/test/programs/test_tool/bin/test_tool for linux",
17911793
"5486731632": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux",
17921794
"5514350352": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux",
17931795
"5514360398": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux",

build/platform/clang/ya.make

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
RESOURCES_LIBRARY()
22

3-
DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE_BY_JSON(CLANG14 clang14.json)
43
DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE_BY_JSON(CLANG16 clang16.json)
54
DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE_BY_JSON(CLANG18 clang18.json)
65

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
2-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182103334)
2+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193791808)
33
ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64)
4-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182100744)
4+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193790143)
55
ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
6-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182109329)
6+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193795236)
77
ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64)
8-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182097846)
8+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193788470)
99
ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
10-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182106252)
10+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193793316)
1111

1212
ENDIF()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
2-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182029275)
2+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193781907)
33
ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64)
4-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182027207)
4+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193779819)
55
ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
6-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182033807)
6+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193784322)
77
ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64)
8-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182024694)
8+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193778435)
99
ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
10-
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8182031502)
10+
DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:8193783115)
1111

1212
ENDIF()

build/plugins/_dart_fields.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,14 @@ class TestFiles:
11831183
'maps/renderer/tools/mapcheck2/tests',
11841184
)
11851185

1186+
# XXX: this is a workaround to support very specific linting settings.
1187+
# Do not use it as a general mechanism!
1188+
_MAPS_B2BGEO_PREFIX = 'maps/b2bgeo/mvrp_solver'
1189+
_MAPS_B2BGEO_INCLUDE_LINTER_TEST_PATHS = (
1190+
'maps/b2bgeo/mvrp_solver/backend',
1191+
'maps/b2bgeo/mvrp_solver/aws_docker',
1192+
)
1193+
11861194
@classmethod
11871195
def value(cls, unit, flat_args, spec_args):
11881196
data_re = re.compile(r"sbr:/?/?(\d+)=?.*")
@@ -1291,6 +1299,13 @@ def cpp_linter_files(cls, unit, flat_args, spec_args):
12911299
else:
12921300
raise DartValueError()
12931301

1302+
if upath.startswith(cls._MAPS_B2BGEO_PREFIX):
1303+
for path in cls._MAPS_B2BGEO_INCLUDE_LINTER_TEST_PATHS:
1304+
if os.path.commonpath([upath, path]) == path:
1305+
break
1306+
else:
1307+
raise DartValueError()
1308+
12941309
files_dart = _reference_group_var("ALL_SRCS", consts.STYLE_CPP_ALL_EXTS)
12951310
return {cls.KEY: files_dart, cls.KEY2: files_dart}
12961311

build/ymake.core.conf

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,7 @@ when ($COMMON_LINK_SETTINGS == "yes") {
919919
}
920920

921921
when (($MUSL != "yes" && $WITH_VALGRIND == "yes") || $SANITIZER_DEFINED == "yes") {
922-
when ($ALLOCATOR in [ "TCMALLOC", "TCMALLOC_SMALL_BUT_SLOW", "TCMALLOC_NUMA_256K", "TCMALLOC_NUMA_LARGE_PAGES", "TCMALLOC_256K", "TCMALLOC_TC", "GOOGLE", "J", "LF", "LF_YT", "LF_DBG", "B", "BM", "C", "LOCKLESS", "YT", "YT_TCMALLOC", "YT_TCMALLOC_256K", "MIM", "MIM_SDC", "HU", "PROFILED_HU", "THREAD_PROFILED_HU" ]) {
922+
when ($ALLOCATOR in [ "TCMALLOC", "TCMALLOC_SMALL_BUT_SLOW", "TCMALLOC_NUMA_256K", "TCMALLOC_NUMA_LARGE_PAGES", "TCMALLOC_256K", "TCMALLOC_TC", "GOOGLE", "J", "LF", "LF_YT", "LF_DBG", "B", "BM", "C", "LOCKLESS", "YT", "MIM", "MIM_SDC", "HU", "PROFILED_HU", "THREAD_PROFILED_HU" ]) {
923923
PEERDIR+=library/cpp/malloc/system
924924
}
925925
}
@@ -999,14 +999,6 @@ when ($COMMON_LINK_SETTINGS == "yes") {
999999
"YT" ? {
10001000
PEERDIR+=library/cpp/ytalloc/impl
10011001
}
1002-
"YT_TCMALLOC" ? {
1003-
PEERDIR+=library/cpp/malloc/tcmalloc
1004-
PEERDIR+=contrib/libs/yt_tcmalloc/default
1005-
}
1006-
"YT_TCMALLOC_256K" ? {
1007-
PEERDIR+=library/cpp/malloc/tcmalloc
1008-
PEERDIR+=contrib/libs/yt_tcmalloc
1009-
}
10101002
}
10111003
}
10121004

@@ -4681,11 +4673,6 @@ macro CTEMPLATE_VARNAMES(File) {
46814673
LLVM_OPTS=
46824674
CLANG_BC_ROOT=
46834675

4684-
macro USE_LLVM_BC14() {
4685-
SET(CLANG_BC_ROOT ${CLANG14_RESOURCE_GLOBAL})
4686-
SET(LLVM_LLC_TOOL contrib/libs/llvm14/tools/llc)
4687-
}
4688-
46894676
macro USE_LLVM_BC16() {
46904677
SET(CLANG_BC_ROOT ${CLANG16_RESOURCE_GLOBAL})
46914678
SET(LLVM_LLC_TOOL contrib/libs/llvm16/tools/llc)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--- contrib/libs/grpc/src/core/ext/transport/chttp2/transport/chttp2_transport.cc (8f4736fcb2c85a5a7647b2ed61a82fb96e3f9363)
2+
+++ contrib/libs/grpc/src/core/ext/transport/chttp2/transport/chttp2_transport.cc (working tree)
3+
@@ -2076,9 +2076,11 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
4+
grpc_http2_error_code http_error;
5+
grpc_error_get_status(due_to_error, s->deadline, nullptr, nullptr,
6+
&http_error, nullptr);
7+
- grpc_chttp2_add_rst_stream_to_next_write(
8+
- t, s->id, static_cast<uint32_t>(http_error), &s->stats.outgoing);
9+
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
10+
+ if (s->sent_initial_metadata) {
11+
+ grpc_chttp2_add_rst_stream_to_next_write(
12+
+ t, s->id, static_cast<uint32_t>(http_error), &s->stats.outgoing);
13+
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
14+
+ }
15+
}
16+
}
17+
if (!due_to_error.ok() && !s->seen_error) {
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
--- contrib/libs/grpc/src/core/ext/filters/client_channel/retry_filter.cc (275a6f99de0655569f20495a7c5683e0b5e06c8d)
2+
+++ contrib/libs/grpc/src/core/ext/filters/client_channel/retry_filter.cc (working tree)
3+
@@ -1265,28 +1265,30 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
4+
call_attempt->per_attempt_recv_timer_handle_.has_value());
5+
}
6+
CallCombinerClosureList closures;
7+
- call_attempt->per_attempt_recv_timer_handle_.reset();
8+
- // Cancel this attempt.
9+
- // TODO(roth): When implementing hedging, we should not cancel the
10+
- // current attempt.
11+
- call_attempt->MaybeAddBatchForCancelOp(
12+
- grpc_error_set_int(
13+
- GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
14+
- StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
15+
- &closures);
16+
- // Check whether we should retry.
17+
- if (call_attempt->ShouldRetry(/*status=*/y_absl::nullopt,
18+
- /*server_pushback_ms=*/y_absl::nullopt)) {
19+
- // Mark current attempt as abandoned.
20+
- call_attempt->Abandon();
21+
- // We are retrying. Start backoff timer.
22+
- calld->StartRetryTimer(/*server_pushback=*/y_absl::nullopt);
23+
- } else {
24+
- // Not retrying, so commit the call.
25+
- calld->RetryCommit(call_attempt);
26+
- // If retry state is no longer needed, switch to fast path for
27+
- // subsequent batches.
28+
- call_attempt->MaybeSwitchToFastPath();
29+
+ if (call_attempt->per_attempt_recv_timer_handle_.has_value()) {
30+
+ call_attempt->per_attempt_recv_timer_handle_.reset();
31+
+ // Cancel this attempt.
32+
+ // TODO(roth): When implementing hedging, we should not cancel the
33+
+ // current attempt.
34+
+ call_attempt->MaybeAddBatchForCancelOp(
35+
+ grpc_error_set_int(
36+
+ GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
37+
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
38+
+ &closures);
39+
+ // Check whether we should retry.
40+
+ if (call_attempt->ShouldRetry(/*status=*/y_absl::nullopt,
41+
+ /*server_pushback_ms=*/y_absl::nullopt)) {
42+
+ // Mark current attempt as abandoned.
43+
+ call_attempt->Abandon();
44+
+ // We are retrying. Start backoff timer.
45+
+ calld->StartRetryTimer(/*server_pushback=*/y_absl::nullopt);
46+
+ } else {
47+
+ // Not retrying, so commit the call.
48+
+ calld->RetryCommit(call_attempt);
49+
+ // If retry state is no longer needed, switch to fast path for
50+
+ // subsequent batches.
51+
+ call_attempt->MaybeSwitchToFastPath();
52+
+ }
53+
}
54+
closures.RunClosures(calld->call_combiner_);
55+
call_attempt->Unref(DEBUG_LOCATION, "OnPerAttemptRecvTimer");

contrib/libs/grpc/src/core/ext/filters/client_channel/retry_filter.cc

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,28 +1265,30 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
12651265
call_attempt->per_attempt_recv_timer_handle_.has_value());
12661266
}
12671267
CallCombinerClosureList closures;
1268-
call_attempt->per_attempt_recv_timer_handle_.reset();
1269-
// Cancel this attempt.
1270-
// TODO(roth): When implementing hedging, we should not cancel the
1271-
// current attempt.
1272-
call_attempt->MaybeAddBatchForCancelOp(
1273-
grpc_error_set_int(
1274-
GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
1275-
StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
1276-
&closures);
1277-
// Check whether we should retry.
1278-
if (call_attempt->ShouldRetry(/*status=*/y_absl::nullopt,
1279-
/*server_pushback_ms=*/y_absl::nullopt)) {
1280-
// Mark current attempt as abandoned.
1281-
call_attempt->Abandon();
1282-
// We are retrying. Start backoff timer.
1283-
calld->StartRetryTimer(/*server_pushback=*/y_absl::nullopt);
1284-
} else {
1285-
// Not retrying, so commit the call.
1286-
calld->RetryCommit(call_attempt);
1287-
// If retry state is no longer needed, switch to fast path for
1288-
// subsequent batches.
1289-
call_attempt->MaybeSwitchToFastPath();
1268+
if (call_attempt->per_attempt_recv_timer_handle_.has_value()) {
1269+
call_attempt->per_attempt_recv_timer_handle_.reset();
1270+
// Cancel this attempt.
1271+
// TODO(roth): When implementing hedging, we should not cancel the
1272+
// current attempt.
1273+
call_attempt->MaybeAddBatchForCancelOp(
1274+
grpc_error_set_int(
1275+
GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
1276+
StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
1277+
&closures);
1278+
// Check whether we should retry.
1279+
if (call_attempt->ShouldRetry(/*status=*/y_absl::nullopt,
1280+
/*server_pushback_ms=*/y_absl::nullopt)) {
1281+
// Mark current attempt as abandoned.
1282+
call_attempt->Abandon();
1283+
// We are retrying. Start backoff timer.
1284+
calld->StartRetryTimer(/*server_pushback=*/y_absl::nullopt);
1285+
} else {
1286+
// Not retrying, so commit the call.
1287+
calld->RetryCommit(call_attempt);
1288+
// If retry state is no longer needed, switch to fast path for
1289+
// subsequent batches.
1290+
call_attempt->MaybeSwitchToFastPath();
1291+
}
12901292
}
12911293
closures.RunClosures(calld->call_combiner_);
12921294
call_attempt->Unref(DEBUG_LOCATION, "OnPerAttemptRecvTimer");

contrib/libs/grpc/src/core/ext/transport/chttp2/transport/chttp2_transport.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2076,9 +2076,11 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
20762076
grpc_http2_error_code http_error;
20772077
grpc_error_get_status(due_to_error, s->deadline, nullptr, nullptr,
20782078
&http_error, nullptr);
2079-
grpc_chttp2_add_rst_stream_to_next_write(
2080-
t, s->id, static_cast<uint32_t>(http_error), &s->stats.outgoing);
2081-
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
2079+
if (s->sent_initial_metadata) {
2080+
grpc_chttp2_add_rst_stream_to_next_write(
2081+
t, s->id, static_cast<uint32_t>(http_error), &s->stats.outgoing);
2082+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
2083+
}
20822084
}
20832085
}
20842086
if (!due_to_error.ok() && !s->seen_error) {

contrib/libs/libunwind/patches/04-wasm-exceptions.patch

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <threads.h>
1313

1414
_Unwind_Reason_Code __gxx_personality_wasm0(int version, _Unwind_Action actions,
15-
@@ -120,4 +121,12 @@ _Unwind_GetRegionStart(struct _Unwind_Context *context __attribute__((unused)))
15+
@@ -120,4 +121,18 @@ _Unwind_GetRegionStart(struct _Unwind_Context *context __attribute__((unused)))
1616
return 0;
1717
}
1818

@@ -24,4 +24,10 @@
2424
+_Unwind_RaiseException(_Unwind_Exception *exception_object __attribute__((unused))) {
2525
+ abort();
2626
+}
27+
+
28+
+#if !defined(NDEBUG) && defined(STANDALONE_WASM)
29+
+void __throw_exception_with_stack_trace(_Unwind_Exception* ex) {
30+
+ _Unwind_RaiseException(ex);
31+
+}
32+
+#endif
2733
#endif // defined(__WASM_EXCEPTIONS__)

contrib/libs/libunwind/src/Unwind-wasm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,10 @@ _LIBUNWIND_EXPORT _Unwind_Reason_Code
129129
_Unwind_RaiseException(_Unwind_Exception *exception_object __attribute__((unused))) {
130130
abort();
131131
}
132+
133+
#if !defined(NDEBUG) && defined(STANDALONE_WASM)
134+
void __throw_exception_with_stack_trace(_Unwind_Exception* ex) {
135+
_Unwind_RaiseException(ex);
136+
}
137+
#endif
132138
#endif // defined(__WASM_EXCEPTIONS__)

library/cpp/containers/compact_vector/compact_vector.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,16 @@ class TCompactVector {
234234
}
235235

236236
template <class... Args>
237-
void EmplaceBack(Args&&... args) {
237+
T& EmplaceBack(Args&&... args) {
238238
Reserve(Size() + 1);
239-
new (Ptr + Size()) T(std::forward<Args>(args)...);
239+
auto* t = new (Ptr + Size()) T(std::forward<Args>(args)...);
240240
++(Header()->Size);
241+
return *t;
241242
}
242243

243244
template <class... Args>
244-
void emplace_back(Args&&... args) {
245-
EmplaceBack(std::forward<Args>(args)...);
245+
T& emplace_back(Args&&... args) {
246+
return EmplaceBack(std::forward<Args>(args)...);
246247
}
247248

248249
T& Back() {

library/cpp/containers/compact_vector/compact_vector_ut.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
6262
};
6363

6464
TCompactVector<TFoo> vector;
65-
vector.emplace_back(123);
65+
auto& x = vector.emplace_back(123);
66+
UNIT_ASSERT_VALUES_EQUAL(&x, &vector.back());
6667
UNIT_ASSERT_VALUES_EQUAL(vector.back().ConstructedFrom, "int");
6768
vector.emplace_back('c');
6869
UNIT_ASSERT_VALUES_EQUAL(vector.back().ConstructedFrom, "char");

0 commit comments

Comments
 (0)