| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index fd4eec3ab5ae3674c63aeeb08fd8c419f44e7a8b..72a61a13889499de2ce7af8d3a2d243f559c0a51 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -1553,8 +1553,10 @@ void HGlobalValueNumberer::ComputeBlockSideEffects() {
|
|
|
|
|
| SmartArrayPointer<char> GetGVNFlagsString(GVNFlagSet flags) {
|
| + char underlying_buffer[kLastFlag * 128];
|
| + Vector<char> buffer(underlying_buffer, sizeof(underlying_buffer));
|
| #if DEBUG
|
| - char buffer[kLastFlag * 128];
|
| + int offset = 0;
|
| const char* separator = "";
|
| const char* comma = ", ";
|
| buffer[0] = 0;
|
| @@ -1573,18 +1575,18 @@ SmartArrayPointer<char> GetGVNFlagsString(GVNFlagSet flags) {
|
| bool positive_depends_on = set_depends_on < (kLastFlag / 2);
|
| if (set_changes > 0) {
|
| if (positive_changes) {
|
| - strcat(buffer, "changes [");
|
| + offset += OS::SNPrintF(buffer + offset, "changes [");
|
| } else {
|
| - strcat(buffer, "changes all except [");
|
| + offset += OS::SNPrintF(buffer + offset, "changes all except [");
|
| }
|
| for (int bit = 0; bit < kLastFlag; ++bit) {
|
| if (((flags.ToIntegral() & (1 << bit)) != 0) == positive_changes) {
|
| switch (static_cast<GVNFlag>(bit)) {
|
| -#define DECLARE_FLAG(type) \
|
| - case kChanges##type: \
|
| - strcat(buffer, separator); \
|
| - strcat(buffer, #type); \
|
| - separator = comma; \
|
| +#define DECLARE_FLAG(type) \
|
| + case kChanges##type: \
|
| + offset += OS::SNPrintF(buffer + offset, separator); \
|
| + offset += OS::SNPrintF(buffer + offset, #type); \
|
| + separator = comma; \
|
| break;
|
| GVN_TRACKED_FLAG_LIST(DECLARE_FLAG)
|
| GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
|
| @@ -1594,26 +1596,26 @@ GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
|
| }
|
| }
|
| }
|
| - strcat(buffer, "]");
|
| + offset += OS::SNPrintF(buffer + offset, "]");
|
| }
|
| if (set_depends_on > 0) {
|
| separator = "";
|
| if (set_changes > 0) {
|
| - strcat(buffer, ", ");
|
| + offset += OS::SNPrintF(buffer + offset, ", ");
|
| }
|
| if (positive_depends_on) {
|
| - strcat(buffer, "depends on [");
|
| + offset += OS::SNPrintF(buffer + offset, "depends on [");
|
| } else {
|
| - strcat(buffer, "depends on all except [");
|
| + offset += OS::SNPrintF(buffer + offset, "depends on all except [");
|
| }
|
| for (int bit = 0; bit < kLastFlag; ++bit) {
|
| if (((flags.ToIntegral() & (1 << bit)) != 0) == positive_depends_on) {
|
| switch (static_cast<GVNFlag>(bit)) {
|
| -#define DECLARE_FLAG(type) \
|
| - case kDependsOn##type: \
|
| - strcat(buffer, separator); \
|
| - strcat(buffer, #type); \
|
| - separator = comma; \
|
| +#define DECLARE_FLAG(type) \
|
| + case kDependsOn##type: \
|
| + offset += OS::SNPrintF(buffer + offset, separator); \
|
| + offset += OS::SNPrintF(buffer + offset, #type); \
|
| + separator = comma; \
|
| break;
|
| GVN_TRACKED_FLAG_LIST(DECLARE_FLAG)
|
| GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
|
| @@ -1623,14 +1625,15 @@ GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
|
| }
|
| }
|
| }
|
| - strcat(buffer, "]");
|
| + offset += OS::SNPrintF(buffer + offset, "]");
|
| }
|
| #else
|
| - char buffer[128];
|
| - snprintf(buffer, 128, "0x%08X", flags.ToIntegral());
|
| + OS::SNPrintF(buffer, "0x%08X", flags.ToIntegral());
|
| #endif
|
| - char* result = new char[strlen(buffer) + 1];
|
| - strcpy(result, buffer);
|
| + uint32_t string_len = strlen(underlying_buffer) + 1;
|
| + ASSERT(string_len <= sizeof(underlying_buffer));
|
| + char* result = new char[strlen(underlying_buffer) + 1];
|
| + memcpy(result, underlying_buffer, string_len);
|
| return SmartArrayPointer<char>(result);
|
| }
|
|
|
|
|