Browse Source

ReadConstant handling of null pointers

Brian Fiete 11 months ago
parent
commit
8c1d1e65b3
1 changed files with 16 additions and 0 deletions
  1. 16 0
      IDEHelper/Compiler/BfIRBuilder.cpp

+ 16 - 0
IDEHelper/Compiler/BfIRBuilder.cpp

@@ -1413,6 +1413,22 @@ BfIRValue BfIRConstHolder::ReadConstant(void* ptr, BfType* type)
 		return CreateConst(BfTypeCode_StringId, *(int32*)ptr);
 	}
 
+	if (type->IsPointer())
+	{
+		bool isZero = false;
+		if (mModule->mSystem->mPtrSize == 4)
+			isZero = *(int32*)ptr == 0;
+		else
+			isZero = *(int64*)ptr == 0;
+		if (isZero)
+		{
+			BfIRType irType;
+			irType.mKind = BfIRTypeData::TypeKind_TypeId;
+			irType.mId = type->mTypeId;
+			return CreateConstNull(irType);
+		}		
+	}
+
 	return BfIRValue();
 }