Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASAN test failing on main #7748

Closed
sfc-gh-jslocum opened this issue Aug 1, 2022 · 2 comments · Fixed by #7764
Closed

ASAN test failing on main #7748

sfc-gh-jslocum opened this issue Aug 1, 2022 · 2 comments · Fixed by #7764

Comments

@sfc-gh-jslocum
Copy link
Collaborator

Unit test /fdbclient/ConfigDB/ConfigKey/EncodeDecode is failing on main (commit 204ef3a) running with asan

bin/fdbserver -r simulation -f tests/fast/RandomUnitTests.toml -s 348539915 -b on --crash --trace_format json

`Testing /fdbclient/ConfigDB/ConfigKey/EncodeDecode

==24==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c0001277b0 at pc 0x00000213adcf bp 0x7ffcc5cbf990 sp 0x7ffcc5cbf158
READ of size 20 at 0x60c0001277b0 thread T0
#0 0x213adce in __asan_memmove /tmp/llvm-project/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:30:3
#1 0x52ea18e in std::__1::enable_if<(is_same<std::__1::remove_const::type, unsigned char>::value) && (is_trivially_copy_assignable::value), unsigned char*>::type std::__1::__copy<unsigned char const, unsigned char>(unsigned char const*, unsigned char const*, unsigned char*) /usr/local/bin/../include/c++/v1/__algorithm/copy.h:59:9
#2 0x52ea18e in unsigned char* std::__1::copy<unsigned char const*, unsigned char*>(unsigned char const*, unsigned char const*, unsigned char*) /usr/local/bin/../include/c++/v1/__algorithm/copy.h:72:13
#3 0x52ea18e in void VectorRef<unsigned char, (VecSerStrategy)0>::append<unsigned char const*>(Arena&, unsigned char const*, int) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/Arena.h:1113:4
#4 0xb7f9eb1 in Tuple::Tuple(StringRef const&, bool) /mnt/ephemeral/jslocum/foundationdb/fdbclient/Tuple.cpp:63:7
#5 0xb7fa67d in Tuple::unpack(StringRef const&, bool) /mnt/ephemeral/jslocum/foundationdb/fdbclient/Tuple.cpp:94:9
#6 0x9a7f95b in ConfigKeyRef::decodeKey(StringRef const&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/ConfigKnobs.cpp:28:11
#7 0x9a82c8e in testcase_func146(UnitTestParameters const&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/ConfigKnobs.cpp:148:18
#8 0x9629c83 in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopBody1(int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:151:39
#9 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopHead1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:226:49
#10 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:193:16
#11 0x962688f in UnitTestWorkload::RunUnitTestsActor::RunUnitTestsActor(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:459:9
#12 0x962688f in UnitTestWorkload::runUnitTests(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:118:26
#13 0x962688f in UnitTestWorkload::start(Database const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:106:11
#14 0x767b7c7 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_body1loopBody1when2(ReplyPromise&&, int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/tester.actor.cpp:609:50
#15 0x766fe57 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_callback_fire(ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >, ReplyPromise&&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/tester.actor.g.cpp:3665:4
#16 0x766fe57 in ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >::fire(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1335:34
#17 0x230a46a in void NotifiedQueue<ReplyPromise >::send<ReplyPromise >(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1004:29
#18 0x230a46a in NetNotifiedQueue<ReplyPromise, false>::receive(ArenaObjectReader&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/include/fdbrpc/fdbrpc.h:693:10
#19 0xbcbadd6 in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont1(int) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/FlowTransport.actor.cpp:1037:15
#20 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont2(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4328:15
#21 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1when1(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4340:15
#22 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_callback_fire(ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>
, Void const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4361:4
#23 0xbcb9a8d in ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>::fire(Void const&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1313:34
#24 0x222d75f in void SAV::send(Void&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:655:23
#25 0xc098556 in void Promise::send(Void&&) const /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:901:8
#26 0xc098556 in Sim2::execTask(Sim2::Task&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:2246:14
#27 0xc0978e6 in Sim2::runLoop(Sim2*) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:1227:10
#28 0x703a77d in main /mnt/ephemeral/jslocum/foundationdb/fdbserver/fdbserver.actor.cpp:2187:16
#29 0x7f73a94c9554 in __libc_start_main (/lib64/libc.so.6+0x22554)
#30 0x20bf028 in _start (/mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/bin/fdbserver+0x20bf028)

0x60c0001277b0 is located 48 bytes inside of 128-byte region [0x60c000127780,0x60c000127800)
freed by thread T0 here:
#0 0x213b352 in free /tmp/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:111:3
#1 0xc0f7327 in ArenaBlock::destroy() /mnt/ephemeral/jslocum/foundationdb/flow/Arena.cpp:464:6
#2 0x9a82c50 in void delref(ArenaBlock*) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/FastRef.h:95:7
#3 0x9a82c50 in Reference::~Reference() /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/FastRef.h:126:4
#4 0x9a82c50 in Arena::~Arena() /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/Arena.h:101:7
#5 0x9a82c50 in Tuple::~Tuple() /mnt/ephemeral/jslocum/foundationdb/fdbclient/include/fdbclient/Tuple.h:30:8
#6 0x9a82c50 in testcase_func146(UnitTestParameters const&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/ConfigKnobs.cpp:147:16
#7 0x9629c83 in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopBody1(int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:151:39
#8 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopHead1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:226:49
#9 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:193:16
#10 0x962688f in UnitTestWorkload::RunUnitTestsActor::RunUnitTestsActor(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:459:9
#11 0x962688f in UnitTestWorkload::runUnitTests(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:118:26
#12 0x962688f in UnitTestWorkload::start(Database const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:106:11
#13 0x767b7c7 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_body1loopBody1when2(ReplyPromise&&, int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/tester.actor.cpp:609:50
#14 0x766fe57 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_callback_fire(ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >, ReplyPromise&&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/tester.actor.g.cpp:3665:4
#15 0x766fe57 in ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >::fire(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1335:34
#16 0x230a46a in void NotifiedQueue<ReplyPromise >::send<ReplyPromise >(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1004:29
#17 0x230a46a in NetNotifiedQueue<ReplyPromise, false>::receive(ArenaObjectReader&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/include/fdbrpc/fdbrpc.h:693:10
#18 0xbcbadd6 in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont1(int) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/FlowTransport.actor.cpp:1037:15
#19 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont2(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4328:15
#20 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1when1(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4340:15
#21 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_callback_fire(ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>
, Void const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4361:4
#22 0xbcb9a8d in ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>::fire(Void const&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1313:34
#23 0x222d75f in void SAV::send(Void&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:655:23
#24 0xc098556 in void Promise::send(Void&&) const /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:901:8
#25 0xc098556 in Sim2::execTask(Sim2::Task&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:2246:14
#26 0xc0978e6 in Sim2::runLoop(Sim2*) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:1227:10
#27 0x703a77d in main /mnt/ephemeral/jslocum/foundationdb/fdbserver/fdbserver.actor.cpp:2187:16
#28 0x7f73a94c9554 in __libc_start_main (/lib64/libc.so.6+0x22554)

previously allocated by thread T0 here:
#0 0x213beb2 in aligned_alloc /tmp/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:176:3
#1 0xc0f4ef4 in ArenaBlock::create(int, Reference&) /mnt/ephemeral/jslocum/foundationdb/flow/Arena.cpp:362:22
#2 0xc0f83fd in ArenaBlock::allocate(Reference&, int) /mnt/ephemeral/jslocum/foundationdb/flow/Arena.cpp:320:7
#3 0x52ea0da in operator new[](unsigned long, Arena&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/Arena.h:205:9
#4 0x52ea0da in VectorRef<unsigned char, (VecSerStrategy)0>::reallocate(Arena&, int) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/Arena.h:1187:16
#5 0x52ea0da in void VectorRef<unsigned char, (VecSerStrategy)0>::append<unsigned char const*>(Arena&, unsigned char const*, int) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/Arena.h:1110:4
#6 0xb7fb1d7 in Tuple::append(StringRef const&, bool) /mnt/ephemeral/jslocum/foundationdb/fdbclient/Tuple.cpp:132:7
#7 0x9a82b20 in Tuple& Tuple::operator<<(StringRef const&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/include/fdbclient/Tuple.h:63:10
#8 0x9a82b20 in Tuple Tuple::makeTuple<StringRef, StringRef>(StringRef&&, StringRef&&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/include/fdbclient/Tuple.h:100:9
#9 0x9a82b20 in testcase_func146(UnitTestParameters const&) /mnt/ephemeral/jslocum/foundationdb/fdbclient/ConfigKnobs.cpp:147:16
#10 0x9629c83 in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopBody1(int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:151:39
#11 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1loopHead1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:226:49
#12 0x962850b in UnitTestWorkload::RunUnitTestsActorStateUnitTestWorkload::RunUnitTestsActor::a_body1(int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:193:16
#13 0x962688f in UnitTestWorkload::RunUnitTestsActor::RunUnitTestsActor(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/workloads/UnitTests.actor.g.cpp:459:9
#14 0x962688f in UnitTestWorkload::runUnitTests(UnitTestWorkload* const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:118:26
#15 0x962688f in UnitTestWorkload::start(Database const&) /mnt/ephemeral/jslocum/foundationdb/fdbserver/workloads/UnitTests.actor.cpp:106:11
#16 0x767b7c7 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_body1loopBody1when2(ReplyPromise&&, int) /mnt/ephemeral/jslocum/foundationdb/fdbserver/tester.actor.cpp:609:50
#17 0x766fe57 in (anonymous namespace)::RunWorkloadAsyncActorState<(anonymous namespace)::RunWorkloadAsyncActor>::a_callback_fire(ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >, ReplyPromise&&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbserver/tester.actor.g.cpp:3665:4
#18 0x766fe57 in ActorSingleCallback<(anonymous namespace)::RunWorkloadAsyncActor, 1, ReplyPromise >::fire(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1335:34
#19 0x230a46a in void NotifiedQueue<ReplyPromise >::send<ReplyPromise >(ReplyPromise&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1004:29
#20 0x230a46a in NetNotifiedQueue<ReplyPromise, false>::receive(ArenaObjectReader&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/include/fdbrpc/fdbrpc.h:693:10
#21 0xbcbadd6 in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont1(int) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/FlowTransport.actor.cpp:1037:15
#22 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1cont2(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4328:15
#23 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_body1when1(Void const&, int) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4340:15
#24 0xbcb9a8d in (anonymous namespace)::DeliverActorState<(anonymous namespace)::DeliverActor>::a_callback_fire(ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>
, Void const&) /mnt/ephemeral/jslocum/build/foundationdb.linux.clang.x86_64/fdbrpc/FlowTransport.actor.g.cpp:4361:4
#25 0xbcb9a8d in ActorCallback<(anonymous namespace)::DeliverActor, 0, Void>::fire(Void const&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:1313:34
#26 0x222d75f in void SAV::send(Void&&) /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:655:23
#27 0xc098556 in void Promise::send(Void&&) const /mnt/ephemeral/jslocum/foundationdb/flow/include/flow/flow.h:901:8
#28 0xc098556 in Sim2::execTask(Sim2::Task&) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:2246:14
#29 0xc0978e6 in Sim2::runLoop(Sim2*) /mnt/ephemeral/jslocum/foundationdb/fdbrpc/sim2.actor.cpp:1227:10
#30 0x703a77d in main /mnt/ephemeral/jslocum/foundationdb/fdbserver/fdbserver.actor.cpp:2187:16
#31 0x7f73a94c9554 in __libc_start_main (/lib64/libc.so.6+0x22554)

SUMMARY: AddressSanitizer: heap-use-after-free /tmp/llvm-project/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:30:3 in __asan_memmove
Shadow bytes around the buggy address:
0x0c188001cea0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
0x0c188001ceb0: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
0x0c188001cec0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c188001ced0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
0x0c188001cee0: fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa
=>0x0c188001cef0: fd fd fd fd fd fd[fd]fd fd fd fd fd fd fd fd fd
0x0c188001cf00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c188001cf10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c188001cf20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c188001cf30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c188001cf40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==24==ABORTING`

@sfc-gh-jslocum
Copy link
Collaborator Author

@sfc-gh-ajbeamon it appears the only change since march for this file was your tuple change last week, and the error seems to be related to serializing tuples

@sfc-gh-anoyes
Copy link
Collaborator

I confirmed that #7620 introduced this, and the fix is pretty simple. Side question: would anyone be opposed to Tuple::pack returning a Standalone<StringRef> ? Seems less error-prone to me. Other similar classes (e.g.

Standalone<StringRef> toValue() const { return Standalone<StringRef>(StringRef(data, size), arena); }
) offer a Standalone getter

sfc-gh-anoyes added a commit to sfc-gh-anoyes/foundationdb that referenced this issue Aug 2, 2022
This makes it less error-prone and more like other similar functions
like BinaryWriter::toValue

Closes apple#7748
sfc-gh-anoyes added a commit that referenced this issue Aug 2, 2022
This makes it less error-prone and more like other similar functions
like BinaryWriter::toValue

Closes #7748
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants