Merge branch 'sbogusev-master' into dev
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 67b75f3..88a3919 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -267,13 +267,23 @@
#ifdef XBYAK_NO_EXCEPTION
namespace local {
-static XBYAK_TLS int l_err = 0;
-inline void SetError(int err) { if (err) l_err = err; } // keep the first err code
-
+inline int &l_err() {
+ static XBYAK_TLS int l_error;
+ return l_error;
+}
+inline void SetError(int err) {
+ if (err) { // keep the first err code
+ int &l_error = local::l_err();
+ l_error = err;
+ }
+}
} // local
-inline void ClearError() { local::l_err = 0; }
-inline int GetError() { return local::l_err; }
+inline void ClearError() {
+ int &l_error = local::l_err();
+ l_error = 0;
+}
+inline int GetError() { return local::l_err(); }
#define XBYAK_THROW(err) { local::SetError(err); return; }
#define XBYAK_THROW_RET(err, r) { local::SetError(err); return r; }