@@ -299,6 +299,9 @@ static bool readPointerToBuffer(const Context &Ctx, const Pointer &FromPtr,
299
299
llvm::sys::IsLittleEndianHost);
300
300
bool BigEndianTarget = ASTCtx.getTargetInfo ().isBigEndian ();
301
301
302
+ uint64_t PointerSizeInBits =
303
+ ASTCtx.getTargetInfo ().getPointerWidth (LangAS::Default);
304
+
302
305
return enumeratePointerFields (
303
306
FromPtr, Ctx,
304
307
[&](const Pointer &P, PrimType T, size_t BitOffset,
@@ -310,8 +313,15 @@ static bool readPointerToBuffer(const Context &Ctx, const Pointer &FromPtr,
310
313
311
314
assert (P.isInitialized ());
312
315
// nullptr_t is a PT_Ptr for us, but it's still not std::is_pointer_v.
313
- if (T == PT_Ptr)
314
- assert (false && " Implement casting to pointer types" );
316
+ if (T == PT_Ptr) {
317
+ assert (P.getType ()->isNullPtrType ());
318
+ std::byte Zeroes[] = {std::byte{0 }, std::byte{0 }, std::byte{0 },
319
+ std::byte{0 }, std::byte{0 }, std::byte{0 },
320
+ std::byte{0 }, std::byte{0 }};
321
+ assert (PointerSizeInBits <= (8 * 8 ));
322
+ Buffer.pushData (Zeroes, PointerSizeInBits, BigEndianTarget);
323
+ return true ;
324
+ }
315
325
316
326
CharUnits ObjectReprChars = ASTCtx.getTypeSizeInChars (P.getType ());
317
327
unsigned BitWidth = ASTCtx.toBits (ObjectReprChars);
0 commit comments