dart-sdk/runtime/vm/scavenger_test.cc
koda@google.com 2124c76656 Catch corrupted pointers earlier.
Lack of pointer validation made issues 22549 and 22621 more difficult to track down.

Before this change, ScavengePointer would ignore any sufficiently large garbage values, even if they were obviously not well-formed pointers.

Remove obsolete unit test with "foreign" pointers; the zero-size scavenger case is already thoroughly exercised by the VM isolate.

BUG=22621
R=iposva@google.com

Review URL: https://codereview.chromium.org//975443003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44147 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-02 20:40:30 +00:00

56 lines
1.8 KiB
C++

// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "platform/assert.h"
#include "vm/scavenger.h"
#include "vm/unit_test.h"
#include "vm/visitor.h"
namespace dart {
// Expects to visit no objects (since the space should be empty).
class FailingObjectVisitor : public ObjectVisitor {
public:
FailingObjectVisitor() : ObjectVisitor(NULL) {}
virtual void VisitObject(RawObject* obj) {
EXPECT(false);
}
};
// Expects to visit no objects (since the space should be empty).
class FailingObjectPointerVisitor : public ObjectPointerVisitor {
public:
FailingObjectPointerVisitor() : ObjectPointerVisitor(NULL) {}
virtual void VisitPointers(RawObject** first, RawObject** last) {
EXPECT(false);
}
};
// Expects to visit no objects (since the space should be empty).
class FailingFindObjectVisitor : public FindObjectVisitor {
public:
FailingFindObjectVisitor() : FindObjectVisitor(NULL) {}
virtual bool FindObject(RawObject* obj) const {
EXPECT(false);
return false;
}
};
TEST_CASE(ZeroSizeScavenger) {
Scavenger* scavenger = new Scavenger(NULL, 0, kNewObjectAlignmentOffset);
EXPECT(!scavenger->Contains(reinterpret_cast<uword>(&scavenger)));
EXPECT_EQ(0, scavenger->UsedInWords());
EXPECT_EQ(0, scavenger->CapacityInWords());
EXPECT_EQ(static_cast<uword>(0), scavenger->TryAllocate(kObjectAlignment));
FailingObjectVisitor obj_visitor;
scavenger->VisitObjects(&obj_visitor);
FailingObjectPointerVisitor ptr_visitor;
scavenger->VisitObjectPointers(&ptr_visitor);
FailingFindObjectVisitor find_visitor;
scavenger->FindObject(&find_visitor);
delete scavenger;
}
} // namespace dart