diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index f9d4ad6237b8b12432f992e6decce15648cfaef4..7063fc3854897706547969ffe5ad112dabad0356 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -1796,7 +1796,10 @@ namespace
 
 	inline xml_parse_result make_parse_result(xml_parse_status status, ptrdiff_t offset = 0)
 	{
-		xml_parse_result result = {status, offset, encoding_auto};
+		xml_parse_result result;
+		result.status = status;
+		result.offset = offset;
+
 		return result;
 	}
 
@@ -2276,7 +2279,8 @@ namespace
 					{
 						s = parse_question(s, cursor, optmsk, endch);
 
-						if (cursor && (cursor->header & xml_memory_page_type_mask) == node_declaration) goto LOC_ATTRIBUTES;
+						assert(cursor);
+						if ((cursor->header & xml_memory_page_type_mask) == node_declaration) goto LOC_ATTRIBUTES;
 					}
 					else if (*s == '!') // '<!...'
 					{
diff --git a/src/pugixml.hpp b/src/pugixml.hpp
index fbb9fccb460c274eb7bcecfe65bf164fd0ea4a6e..89494bf9d27b75d7b37cb58de9bb531a0a2fbe51 100644
--- a/src/pugixml.hpp
+++ b/src/pugixml.hpp
@@ -1558,6 +1558,10 @@ namespace pugi
 		/// Source document encoding
 		xml_encoding encoding;
 
+		xml_parse_result(): status(status_internal_error), offset(0), encoding(encoding_auto)
+		{
+		}
+
 		/// Cast to bool operator
 		operator bool() const
 		{