diff --git a/llvm/keystone/ks.cpp b/llvm/keystone/ks.cpp
index 83826c386bb5e432e5fe515d5c4af7112cb785b5..ea9758defcc665a1a3cfb65863fda9a044a84dd9 100644
--- a/llvm/keystone/ks.cpp
+++ b/llvm/keystone/ks.cpp
@@ -249,22 +249,12 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)
     std::string TripleName = "";
 
     if (arch < KS_ARCH_MAX) {
-        ks = new (std::nothrow) ks_struct();
+        ks = new (std::nothrow) ks_struct(arch, mode, KS_ERR_OK, KS_OPT_SYNTAX_INTEL);
         
         if (!ks) {
             // memory insufficient
             return KS_ERR_NOMEM;
         }
-        
-        ks->TheTarget = NULL;
-        ks->MAB = NULL;
-        ks->MRI = NULL;
-        ks->MAI = NULL;
-        ks->MCII = NULL;
-        ks->STI = NULL;
-        ks->errnum = KS_ERR_OK;
-        ks->arch = arch;
-        ks->mode = mode;
 
         switch(arch) {
             default: break;
diff --git a/llvm/keystone/ks_priv.h b/llvm/keystone/ks_priv.h
index db8dfe43141a5d9e47b45f0dac6b7fad55cc30ec..4fafd0ef9e106e43961eaadb88dd80390c4ed5c8 100644
--- a/llvm/keystone/ks_priv.h
+++ b/llvm/keystone/ks_priv.h
@@ -43,19 +43,22 @@ struct ks_struct {
     unsigned int errnum;
     ks_opt_value syntax;
 
-    ks_args_ks_t init_arch;
-    const Target *TheTarget;
+    ks_args_ks_t init_arch = nullptr;
+    const Target *TheTarget = nullptr;
     std::string TripleName;
     SourceMgr SrcMgr;
-    MCAsmBackend *MAB;
+    MCAsmBackend *MAB = nullptr;
     MCTargetOptions MCOptions;
-    MCRegisterInfo *MRI;
-    MCAsmInfo *MAI;
-    MCInstrInfo *MCII;
+    MCRegisterInfo *MRI = nullptr;
+    MCAsmInfo *MAI = nullptr;
+    MCInstrInfo *MCII = nullptr;
     std::string FeaturesStr;
-    MCSubtargetInfo *STI;
+    MCSubtargetInfo *STI = nullptr;
     MCObjectFileInfo MOFI;
-    ks_sym_resolver sym_resolver;
+    ks_sym_resolver sym_resolver = nullptr;
+
+    ks_struct(ks_arch arch, int mode, unsigned int errnum, ks_opt_value syntax)
+        : arch(arch), mode(mode), errnum(errnum), syntax(syntax) { }
 };