Fix pass driver's dump_pass_list_ and print_pass_list_.
The lists were allocated with new char[], so they should
have been held by std::unique_ptr<const char[]> rather than
std::unique_ptr<const char>. However, it's much cleaner with
std::string.
Change-Id: Ie7c604773272194345f5e6e3c4803c3a914edf99
diff --git a/compiler/dex/pass_driver.h b/compiler/dex/pass_driver.h
index 788f24b..bd8f53c 100644
--- a/compiler/dex/pass_driver.h
+++ b/compiler/dex/pass_driver.h
@@ -153,12 +153,12 @@
default_print_passes_ = true;
}
- static void SetDumpPassList(const char* list) {
- dump_pass_list_.reset(list);
+ static void SetDumpPassList(const std::string& list) {
+ dump_pass_list_ = list;
}
- static void SetPrintPassList(const char* list) {
- print_pass_list_.reset(list);
+ static void SetPrintPassList(const std::string& list) {
+ print_pass_list_ = list;
}
void SetDefaultPasses() {
@@ -202,10 +202,10 @@
static bool default_print_passes_;
/** @brief What are the passes we want to be printing the log messages? */
- static std::unique_ptr<const char> print_pass_list_;
+ static std::string print_pass_list_;
/** @brief What are the passes we want to be dumping the CFG? */
- static std::unique_ptr<const char> dump_pass_list_;
+ static std::string dump_pass_list_;
};
} // namespace art
diff --git a/compiler/dex/pass_driver_me.cc b/compiler/dex/pass_driver_me.cc
index 099cfee..e6d90e0 100644
--- a/compiler/dex/pass_driver_me.cc
+++ b/compiler/dex/pass_driver_me.cc
@@ -79,11 +79,11 @@
// By default, do not have a dump pass list.
template<>
-std::unique_ptr<const char> PassDriver<PassDriverME>::dump_pass_list_(nullptr);
+std::string PassDriver<PassDriverME>::dump_pass_list_ = std::string();
// By default, do not have a print pass list.
template<>
-std::unique_ptr<const char> PassDriver<PassDriverME>::print_pass_list_(nullptr);
+std::string PassDriver<PassDriverME>::print_pass_list_ = std::string();
// By default, we do not print the pass' information.
template<>
@@ -155,7 +155,7 @@
c_unit->print_pass = default_print_passes_;
- const char* print_pass_list = print_pass_list_.get();
+ const char* print_pass_list = print_pass_list_.c_str();
if (print_pass_list != nullptr && strstr(print_pass_list, pass->GetName()) != nullptr) {
c_unit->print_pass = true;
@@ -167,7 +167,7 @@
// Do we want to log it?
bool should_dump = ((c_unit->enable_debug & (1 << kDebugDumpCFG)) != 0);
- const char* dump_pass_list = dump_pass_list_.get();
+ const char* dump_pass_list = dump_pass_list_.c_str();
if (dump_pass_list != nullptr) {
bool found = strstr(dump_pass_list, pass->GetName());
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index 91a1418..4d3d664 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -925,18 +925,12 @@
PassDriverME::CreateDefaultPassList(disable_passes);
} else if (option.starts_with("--print-passes=")) {
std::string print_passes = option.substr(strlen("--print-passes=")).data();
- size_t len = print_passes.length() + 1;
- char* duplicate = new char[len];
- strncpy(duplicate, print_passes.c_str(), len);
- PassDriverME::SetPrintPassList(duplicate);
+ PassDriverME::SetPrintPassList(print_passes);
} else if (option == "--print-all-passes") {
PassDriverME::SetPrintAllPasses();
} else if (option.starts_with("--dump-cfg-passes=")) {
std::string dump_passes = option.substr(strlen("--dump-cfg-passes=")).data();
- size_t len = dump_passes.length() + 1;
- char* duplicate = new char[len];
- strncpy(duplicate, dump_passes.c_str(), len);
- PassDriverME::SetDumpPassList(duplicate);
+ PassDriverME::SetDumpPassList(dump_passes);
} else {
Usage("Unknown argument %s", option.data());
}