diff options
| -rw-r--r-- | src/pugixml.cpp | 7 | ||||
| -rw-r--r-- | src/pugixpath.cpp | 15 | 
2 files changed, 19 insertions, 3 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 857d656..16ff6ab 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -1077,7 +1077,12 @@ namespace  		// try to guess encoding (based on XML specification, Appendix F.1)  		const uint8_t* data = static_cast<const uint8_t*>(contents); -		return guess_buffer_encoding(data[0], data[1], data[2], data[3]); +	#ifdef __DMC__ +		volatile // explicitly store to local to work around DMC bug (it loads 4 bytes from data[3] otherwise) +	#endif +		uint8_t d0 = data[0], d1 = data[1], d2 = data[2], d3 = data[3]; + +		return guess_buffer_encoding(d0, d1, d2, d3);  	}  	bool get_mutable_buffer(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp index c4134ed..e0ab730 100644 --- a/src/pugixpath.cpp +++ b/src/pugixpath.cpp @@ -2357,7 +2357,15 @@ namespace pugi  						if (!r.empty() && r[r.size() - 1] != ' ')  							r += ' ';  					} -					else r += *it; +					else +					{ +					#ifdef __DMC__ +						volatile // explicitly store to local to work around DMC bug (it loads 4 bytes from &*it otherwise) +					#endif +						char_t ch = *it; + +						r += ch; +					}  				}  				string_t::size_type pos = r.find_last_not_of(' '); @@ -2375,7 +2383,10 @@ namespace pugi  				for (string_t::iterator it = s.begin(); it != s.end(); )  				{ -					char_t ch = *it; // explicitly store to local to work around DMC bug (it loads 4 bytes from &*it otherwise) +				#ifdef __DMC__ +					volatile // explicitly store to local to work around DMC bug (it loads 4 bytes from &*it otherwise) +				#endif +					char_t ch = *it;  					string_t::size_type pos = from.find(ch); | 
