Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: test/cctest/test-heap.cc

Issue 240933002: Extend GCMole to also cover cctest files. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix unsafe call-sites found by GCMole. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/cctest.gyp ('k') | tools/gcmole/gcmole.lua » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 Isolate* isolate = CcTest::i_isolate(); 749 Isolate* isolate = CcTest::i_isolate();
750 Factory* factory = isolate->factory(); 750 Factory* factory = isolate->factory();
751 751
752 v8::HandleScope sc(CcTest::isolate()); 752 v8::HandleScope sc(CcTest::isolate());
753 Handle<String> name = factory->InternalizeUtf8String("Array"); 753 Handle<String> name = factory->InternalizeUtf8String("Array");
754 Handle<Object> fun_obj = Object::GetProperty( 754 Handle<Object> fun_obj = Object::GetProperty(
755 CcTest::i_isolate()->global_object(), name).ToHandleChecked(); 755 CcTest::i_isolate()->global_object(), name).ToHandleChecked();
756 Handle<JSFunction> function = Handle<JSFunction>::cast(fun_obj); 756 Handle<JSFunction> function = Handle<JSFunction>::cast(fun_obj);
757 757
758 // Allocate the object. 758 // Allocate the object.
759 Handle<Object> element;
759 Handle<JSObject> object = factory->NewJSObject(function); 760 Handle<JSObject> object = factory->NewJSObject(function);
760 Handle<JSArray> array = Handle<JSArray>::cast(object); 761 Handle<JSArray> array = Handle<JSArray>::cast(object);
761 // We just initialized the VM, no heap allocation failure yet. 762 // We just initialized the VM, no heap allocation failure yet.
762 JSArray::Initialize(array, 0); 763 JSArray::Initialize(array, 0);
763 764
764 // Set array length to 0. 765 // Set array length to 0.
765 JSArray::SetElementsLength(array, handle(Smi::FromInt(0), isolate)).Check(); 766 JSArray::SetElementsLength(array, handle(Smi::FromInt(0), isolate)).Check();
766 CHECK_EQ(Smi::FromInt(0), array->length()); 767 CHECK_EQ(Smi::FromInt(0), array->length());
767 // Must be in fast mode. 768 // Must be in fast mode.
768 CHECK(array->HasFastSmiOrObjectElements()); 769 CHECK(array->HasFastSmiOrObjectElements());
769 770
770 // array[length] = name. 771 // array[length] = name.
771 JSReceiver::SetElement(array, 0, name, NONE, SLOPPY).Check(); 772 JSReceiver::SetElement(array, 0, name, NONE, SLOPPY).Check();
772 CHECK_EQ(Smi::FromInt(1), array->length()); 773 CHECK_EQ(Smi::FromInt(1), array->length());
773 CHECK_EQ(*i::Object::GetElement(isolate, array, 0).ToHandleChecked(), *name); 774 element = i::Object::GetElement(isolate, array, 0).ToHandleChecked();
775 CHECK_EQ(*element, *name);
774 776
775 // Set array length with larger than smi value. 777 // Set array length with larger than smi value.
776 Handle<Object> length = 778 Handle<Object> length =
777 factory->NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1); 779 factory->NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1);
778 JSArray::SetElementsLength(array, length).Check(); 780 JSArray::SetElementsLength(array, length).Check();
779 781
780 uint32_t int_length = 0; 782 uint32_t int_length = 0;
781 CHECK(length->ToArrayIndex(&int_length)); 783 CHECK(length->ToArrayIndex(&int_length));
782 CHECK_EQ(*length, array->length()); 784 CHECK_EQ(*length, array->length());
783 CHECK(array->HasDictionaryElements()); // Must be in slow mode. 785 CHECK(array->HasDictionaryElements()); // Must be in slow mode.
784 786
785 // array[length] = name. 787 // array[length] = name.
786 JSReceiver::SetElement(array, int_length, name, NONE, SLOPPY).Check(); 788 JSReceiver::SetElement(array, int_length, name, NONE, SLOPPY).Check();
787 uint32_t new_int_length = 0; 789 uint32_t new_int_length = 0;
788 CHECK(array->length()->ToArrayIndex(&new_int_length)); 790 CHECK(array->length()->ToArrayIndex(&new_int_length));
789 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1); 791 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1);
790 CHECK_EQ(*i::Object::GetElement(isolate, array, int_length).ToHandleChecked(), 792 element = Object::GetElement(isolate, array, int_length).ToHandleChecked();
791 *name); 793 CHECK_EQ(*element, *name);
792 CHECK_EQ(*i::Object::GetElement(isolate, array, 0).ToHandleChecked(), *name); 794 element = Object::GetElement(isolate, array, 0).ToHandleChecked();
795 CHECK_EQ(*element, *name);
793 } 796 }
794 797
795 798
796 TEST(JSObjectCopy) { 799 TEST(JSObjectCopy) {
797 CcTest::InitializeVM(); 800 CcTest::InitializeVM();
798 Isolate* isolate = CcTest::i_isolate(); 801 Isolate* isolate = CcTest::i_isolate();
799 Factory* factory = isolate->factory(); 802 Factory* factory = isolate->factory();
800 803
801 v8::HandleScope sc(CcTest::isolate()); 804 v8::HandleScope sc(CcTest::isolate());
802 Handle<String> object_string(String::cast(CcTest::heap()->Object_string())); 805 Handle<String> object_string(String::cast(CcTest::heap()->Object_string()));
803 Handle<Object> object = Object::GetProperty( 806 Handle<Object> object = Object::GetProperty(
804 CcTest::i_isolate()->global_object(), object_string).ToHandleChecked(); 807 CcTest::i_isolate()->global_object(), object_string).ToHandleChecked();
805 Handle<JSFunction> constructor = Handle<JSFunction>::cast(object); 808 Handle<JSFunction> constructor = Handle<JSFunction>::cast(object);
806 Handle<JSObject> obj = factory->NewJSObject(constructor); 809 Handle<JSObject> obj = factory->NewJSObject(constructor);
807 Handle<String> first = factory->InternalizeUtf8String("first"); 810 Handle<String> first = factory->InternalizeUtf8String("first");
808 Handle<String> second = factory->InternalizeUtf8String("second"); 811 Handle<String> second = factory->InternalizeUtf8String("second");
809 812
810 Handle<Smi> one(Smi::FromInt(1), isolate); 813 Handle<Smi> one(Smi::FromInt(1), isolate);
811 Handle<Smi> two(Smi::FromInt(2), isolate); 814 Handle<Smi> two(Smi::FromInt(2), isolate);
812 815
813 JSReceiver::SetProperty(obj, first, one, NONE, SLOPPY).Check(); 816 JSReceiver::SetProperty(obj, first, one, NONE, SLOPPY).Check();
814 JSReceiver::SetProperty(obj, second, two, NONE, SLOPPY).Check(); 817 JSReceiver::SetProperty(obj, second, two, NONE, SLOPPY).Check();
815 818
816 JSReceiver::SetElement(obj, 0, first, NONE, SLOPPY).Check(); 819 JSReceiver::SetElement(obj, 0, first, NONE, SLOPPY).Check();
817 JSReceiver::SetElement(obj, 1, second, NONE, SLOPPY).Check(); 820 JSReceiver::SetElement(obj, 1, second, NONE, SLOPPY).Check();
818 821
819 // Make the clone. 822 // Make the clone.
823 Handle<Object> value1, value2;
820 Handle<JSObject> clone = JSObject::Copy(obj); 824 Handle<JSObject> clone = JSObject::Copy(obj);
821 CHECK(!clone.is_identical_to(obj)); 825 CHECK(!clone.is_identical_to(obj));
822 826
823 CHECK_EQ(*i::Object::GetElement(isolate, obj, 0).ToHandleChecked(), 827 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked();
824 *i::Object::GetElement(isolate, clone, 0).ToHandleChecked()); 828 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked();
825 CHECK_EQ(*i::Object::GetElement(isolate, obj, 1).ToHandleChecked(), 829 CHECK_EQ(*value1, *value2);
826 *i::Object::GetElement(isolate, clone, 1).ToHandleChecked()); 830 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked();
831 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked();
832 CHECK_EQ(*value1, *value2);
827 833
828 CHECK_EQ(*Object::GetProperty(obj, first).ToHandleChecked(), 834 value1 = Object::GetProperty(obj, first).ToHandleChecked();
829 *Object::GetProperty(clone, first).ToHandleChecked()); 835 value2 = Object::GetProperty(clone, first).ToHandleChecked();
830 CHECK_EQ(*Object::GetProperty(obj, second).ToHandleChecked(), 836 CHECK_EQ(*value1, *value2);
831 *Object::GetProperty(clone, second).ToHandleChecked()); 837 value1 = Object::GetProperty(obj, second).ToHandleChecked();
838 value2 = Object::GetProperty(clone, second).ToHandleChecked();
839 CHECK_EQ(*value1, *value2);
832 840
833 // Flip the values. 841 // Flip the values.
834 JSReceiver::SetProperty(clone, first, two, NONE, SLOPPY).Check(); 842 JSReceiver::SetProperty(clone, first, two, NONE, SLOPPY).Check();
835 JSReceiver::SetProperty(clone, second, one, NONE, SLOPPY).Check(); 843 JSReceiver::SetProperty(clone, second, one, NONE, SLOPPY).Check();
836 844
837 JSReceiver::SetElement(clone, 0, second, NONE, SLOPPY).Check(); 845 JSReceiver::SetElement(clone, 0, second, NONE, SLOPPY).Check();
838 JSReceiver::SetElement(clone, 1, first, NONE, SLOPPY).Check(); 846 JSReceiver::SetElement(clone, 1, first, NONE, SLOPPY).Check();
839 847
840 CHECK_EQ(*i::Object::GetElement(isolate, obj, 1).ToHandleChecked(), 848 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked();
841 *i::Object::GetElement(isolate, clone, 0).ToHandleChecked()); 849 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked();
842 CHECK_EQ(*i::Object::GetElement(isolate, obj, 0).ToHandleChecked(), 850 CHECK_EQ(*value1, *value2);
843 *i::Object::GetElement(isolate, clone, 1).ToHandleChecked()); 851 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked();
852 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked();
853 CHECK_EQ(*value1, *value2);
844 854
845 CHECK_EQ(*Object::GetProperty(obj, second).ToHandleChecked(), 855 value1 = Object::GetProperty(obj, second).ToHandleChecked();
846 *Object::GetProperty(clone, first).ToHandleChecked()); 856 value2 = Object::GetProperty(clone, first).ToHandleChecked();
847 CHECK_EQ(*Object::GetProperty(obj, first).ToHandleChecked(), 857 CHECK_EQ(*value1, *value2);
848 *Object::GetProperty(clone, second).ToHandleChecked()); 858 value1 = Object::GetProperty(obj, first).ToHandleChecked();
859 value2 = Object::GetProperty(clone, second).ToHandleChecked();
860 CHECK_EQ(*value1, *value2);
849 } 861 }
850 862
851 863
852 TEST(StringAllocation) { 864 TEST(StringAllocation) {
853 CcTest::InitializeVM(); 865 CcTest::InitializeVM();
854 Isolate* isolate = CcTest::i_isolate(); 866 Isolate* isolate = CcTest::i_isolate();
855 Factory* factory = isolate->factory(); 867 Factory* factory = isolate->factory();
856 868
857 const unsigned char chars[] = { 0xe5, 0xa4, 0xa7 }; 869 const unsigned char chars[] = { 0xe5, 0xa4, 0xa7 };
858 for (int length = 0; length < 100; length++) { 870 for (int length = 0; length < 100; length++) {
(...skipping 3323 matching lines...) Expand 10 before | Expand all | Expand 10 after
4182 v8::Context::Scope cscope(context); 4194 v8::Context::Scope cscope(context);
4183 4195
4184 v8::Local<v8::Value> result = CompileRun( 4196 v8::Local<v8::Value> result = CompileRun(
4185 "var locals = '';" 4197 "var locals = '';"
4186 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';" 4198 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';"
4187 "eval('function f() {' + locals + 'return function() { return v0; }; }');" 4199 "eval('function f() {' + locals + 'return function() { return v0; }; }');"
4188 "interrupt();" // This triggers a fake stack overflow in f. 4200 "interrupt();" // This triggers a fake stack overflow in f.
4189 "f()()"); 4201 "f()()");
4190 CHECK_EQ(42.0, result->ToNumber()->Value()); 4202 CHECK_EQ(42.0, result->ToNumber()->Value());
4191 } 4203 }
OLDNEW
« no previous file with comments | « test/cctest/cctest.gyp ('k') | tools/gcmole/gcmole.lua » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698