diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 12ccbc9cc82e9225100442c2696fe81d228c7f63..406735d79e82bc14f8557bb1660dcb756f73d89b 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index d0f2c11052cab55047141e371e169878910a80ff..5663533a6776f33f54dfdaecc1d7e447d5a7fe63 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/bin/mplcg b/src/bin/mplcg index f43959af754b6b6635fab39ca7dd783cd027f1cc..ab4b3a8bc170b512dcba9b3b625e5b2d81fe5d4b 100755 Binary files a/src/bin/mplcg and b/src/bin/mplcg differ diff --git a/src/maple_driver/include/safe_exe.h b/src/maple_driver/include/safe_exe.h index cf292c827afc190ed66adfa1a2414bec2287de8b..e47c8952f82c42d19acc53966d2adde4e77154e8 100644 --- a/src/maple_driver/include/safe_exe.h +++ b/src/maple_driver/include/safe_exe.h @@ -26,6 +26,7 @@ #endif #include "mpl_logging.h" #include "string_utils.h" +#include "securec.h" namespace maple { class SafeExe { @@ -54,12 +55,14 @@ class SafeExe { } tmpArgs.insert(tmpArgs.begin(), cmd); // extra space for exe name and args - const char **argv = new const char* [tmpArgs.size() + 1]; + char **argv = new char* [tmpArgs.size() + 1]; // argv[0] is program name - argv[0] = cmd.c_str(); // copy args for (int j = 0; j < tmpArgs.size(); ++j) { - argv[j] = tmpArgs[j].c_str(); + int strLength = tmpArgs[j].size(); + argv[j] = new char[strLength + 1]; + strncpy_s(argv[j], strLength + 1, tmpArgs[j].c_str(), strLength); + argv[j][strLength] = '\0'; } // end of arguments sentinel is NULL argv[tmpArgs.size()] = NULL; @@ -67,7 +70,10 @@ class SafeExe { if (pid == 0) { // child process fflush(NULL); - if (execv(cmd.c_str(), (char **)argv) < 0) { + if (execv(cmd.c_str(), argv) < 0) { + for (int j = 0; j < tmpArgs.size(); ++j) { + delete [] argv[j]; + } delete [] argv; exit(1); } @@ -83,6 +89,9 @@ class SafeExe { ret = ErrorCode::kErrorCompileFail; } } + for (int j = 0; j < tmpArgs.size(); ++j) { + delete [] argv[j]; + } delete [] argv; return ret; #else diff --git a/src/maple_ir/include/mir_type.h b/src/maple_ir/include/mir_type.h index 1b80dc89b3061a3947260cdb028e3225b0e7222f..50b6f9f3325d4df8d0be2bbc9ab07d1d756160ab 100644 --- a/src/maple_ir/include/mir_type.h +++ b/src/maple_ir/include/mir_type.h @@ -400,6 +400,9 @@ class MIRType { virtual void Dump(int indent, bool dontUseName = false) const; virtual void DumpAsCxx(int indent) const; virtual bool EqualTo(const MIRType &mirType) const; + virtual bool IsStructType() { + return false; + } virtual MIRType *CopyMIRTypeNode() const { return new MIRType(*this); } @@ -747,6 +750,10 @@ class MIRStructType : public MIRType { ~MIRStructType() {} + bool IsStructType() override { + return true; + } + FieldVector &GetFields() { return fields; }