Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 3895e524f4b2736486c665b949338043bdb6f376..724eb6a2fc2793f10fa8fbf341d0f67c6e42b316 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -621,6 +621,33 @@ TEST(MakingExternalAsciiStringConditions) { |
} |
+TEST(MakingExternalUnalignedAsciiString) { |
+ LocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ |
+ // Create a cons string that will land in old pointer space. |
+ Local<String> string = Local<String>::Cast(CompileRun( |
+ "function cons(a, b) { return a + b; }" |
+ "cons('abcdefghijklm', 'nopqrstuvwxyz');")); |
+ |
+ // Trigger GCs so that the newly allocated string moves to old gen. |
+ SimulateFullSpace(HEAP->old_pointer_space()); |
+ HEAP->CollectGarbage(i::NEW_SPACE); // in survivor space now |
+ HEAP->CollectGarbage(i::NEW_SPACE); // in old gen now |
+ |
+ // Turn into external string with unaligned resource data. |
+ int dispose_count = 0; |
+ const char* c_source = "_abcdefghijklmnopqrstuvwxyz"; |
+ bool success = string->MakeExternal( |
+ new TestAsciiResource(i::StrDup(c_source) + 1, &dispose_count)); |
+ CHECK(success); |
+ |
+ // Trigger GCs and force evacuation. |
+ HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
+ HEAP->CollectAllGarbage(i::Heap::kReduceMemoryFootprintMask); |
+} |
+ |
+ |
THREADED_TEST(UsingExternalString) { |
i::Factory* factory = i::Isolate::Current()->factory(); |
{ |