Author: Timm Bäder Date: 2024-07-20T08:26:06+02:00 New Revision: 06d2176d81cab1d3ed8d0c17f78c1d3ef65cbab8
URL: https://github.com/llvm/llvm-project/commit/06d2176d81cab1d3ed8d0c17f78c1d3ef65cbab8 DIFF: https://github.com/llvm/llvm-project/commit/06d2176d81cab1d3ed8d0c17f78c1d3ef65cbab8.diff LOG: [clang][Interp][NFC] Move global variable init case to the top of the respective functions. Previously, we did not properly mark global zero sized arrays as initialized. Added: Modified: clang/lib/AST/Interp/Pointer.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Pointer.cpp b/clang/lib/AST/Interp/Pointer.cpp index ff4da0fa805dc..b22b4b1918ba5 100644 --- a/clang/lib/AST/Interp/Pointer.cpp +++ b/clang/lib/AST/Interp/Pointer.cpp @@ -227,6 +227,12 @@ bool Pointer::isInitialized() const { if (isIntegralPointer()) return true; + if (isRoot() && PointeeStorage.BS.Base == sizeof(GlobalInlineDescriptor)) { + const GlobalInlineDescriptor &GD = + *reinterpret_cast<const GlobalInlineDescriptor *>(block()->rawData()); + return GD.InitState == GlobalInitState::Initialized; + } + assert(PointeeStorage.BS.Pointee && "Cannot check if null pointer was initialized"); const Descriptor *Desc = getFieldDesc(); @@ -249,12 +255,6 @@ bool Pointer::isInitialized() const { if (asBlockPointer().Base == 0) return true; - if (isRoot() && PointeeStorage.BS.Base == sizeof(GlobalInlineDescriptor)) { - const GlobalInlineDescriptor &GD = - *reinterpret_cast<const GlobalInlineDescriptor *>(block()->rawData()); - return GD.InitState == GlobalInitState::Initialized; - } - // Field has its bit in an inline descriptor. return getInlineDesc()->IsInitialized; } @@ -266,6 +266,13 @@ void Pointer::initialize() const { assert(PointeeStorage.BS.Pointee && "Cannot initialize null pointer"); const Descriptor *Desc = getFieldDesc(); + if (isRoot() && PointeeStorage.BS.Base == sizeof(GlobalInlineDescriptor)) { + GlobalInlineDescriptor &GD = *reinterpret_cast<GlobalInlineDescriptor *>( + asBlockPointer().Pointee->rawData()); + GD.InitState = GlobalInitState::Initialized; + return; + } + assert(Desc); if (Desc->isPrimitiveArray()) { // Primitive global arrays don't have an initmap. @@ -294,13 +301,6 @@ void Pointer::initialize() const { return; } - if (isRoot() && PointeeStorage.BS.Base == sizeof(GlobalInlineDescriptor)) { - GlobalInlineDescriptor &GD = *reinterpret_cast<GlobalInlineDescriptor *>( - asBlockPointer().Pointee->rawData()); - GD.InitState = GlobalInitState::Initialized; - return; - } - // Field has its bit in an inline descriptor. assert(PointeeStorage.BS.Base != 0 && "Only composite fields can be initialised"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits