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; }