Index: src/mips/regexp-macro-assembler-mips.cc |
diff --git a/src/mips/regexp-macro-assembler-mips.cc b/src/mips/regexp-macro-assembler-mips.cc |
index 9db5c5bed210732fdd1a072cd2c83ab1ba7e45a5..cb210fed04fc88233af4e8d2e23751b813248014 100644 |
--- a/src/mips/regexp-macro-assembler-mips.cc |
+++ b/src/mips/regexp-macro-assembler-mips.cc |
@@ -1112,6 +1112,11 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address, |
frame_entry<const String*>(re_frame, kInputString) = *subject; |
frame_entry<const byte*>(re_frame, kInputStart) = new_address; |
frame_entry<const byte*>(re_frame, kInputEnd) = new_address + byte_length; |
+ } else if (frame_entry<const String*>(re_frame, kInputString) != *subject) { |
+ // Subject string might have been a ConsString that underwent |
+ // short-circuiting during GC. That will not change start_address but |
+ // will change pointer inside the subject handle. |
+ frame_entry<const String*>(re_frame, kInputString) = *subject; |
} |
return 0; |