Use named constant instead of magic number in RegisterLine
Test: host
Change-Id: I61a8cd8378c9fd6eeafffe2a01fa38f25c01dca8
diff --git a/runtime/verifier/register_line.cc b/runtime/verifier/register_line.cc
index ea30e05..1bbf5a6 100644
--- a/runtime/verifier/register_line.cc
+++ b/runtime/verifier/register_line.cc
@@ -148,7 +148,9 @@
result += StringPrintf("{%d},", monitor);
}
for (auto& pairs : reg_to_lock_depths_) {
- result += StringPrintf("<%d -> %x>", pairs.first, pairs.second);
+ result += StringPrintf("<%d -> %" PRIx64 ">",
+ pairs.first,
+ static_cast<uint64_t>(pairs.second));
}
return result;
}
@@ -337,7 +339,7 @@
if (!reg_type.IsReferenceTypes()) {
verifier->Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "monitor-enter on non-object ("
<< reg_type << ")";
- } else if (monitors_.size() >= 32) {
+ } else if (monitors_.size() >= kMaxMonitorStackDepth) {
verifier->Fail(VERIFY_ERROR_LOCKING);
if (kDumpLockFailures) {
VLOG(verifier) << "monitor-enter stack overflow while verifying "
diff --git a/runtime/verifier/register_line.h b/runtime/verifier/register_line.h
index 168eb7b..9bb60bb 100644
--- a/runtime/verifier/register_line.h
+++ b/runtime/verifier/register_line.h
@@ -17,6 +17,7 @@
#ifndef ART_RUNTIME_VERIFIER_REGISTER_LINE_H_
#define ART_RUNTIME_VERIFIER_REGISTER_LINE_H_
+#include <limits>
#include <memory>
#include <vector>
@@ -62,8 +63,14 @@
// stack of entered monitors (identified by code unit offset).
class RegisterLine {
public:
+ using RegisterStackMask = uint32_t;
// A map from register to a bit vector of indices into the monitors_ stack.
- using RegToLockDepthsMap = ScopedArenaSafeMap<uint32_t, uint32_t>;
+ using RegToLockDepthsMap = ScopedArenaSafeMap<uint32_t, RegisterStackMask>;
+
+ // Maximum number of nested monitors to track before giving up and
+ // taking the slow path.
+ static constexpr size_t kMaxMonitorStackDepth =
+ std::numeric_limits<RegisterStackMask>::digits;
// Create a register line of num_regs registers.
static RegisterLine* Create(size_t num_regs, MethodVerifier* verifier);
@@ -391,7 +398,7 @@
}
bool SetRegToLockDepth(size_t reg, size_t depth) {
- CHECK_LT(depth, 32u);
+ CHECK_LT(depth, kMaxMonitorStackDepth);
if (IsSetLockDepth(reg, depth)) {
return false; // Register already holds lock so locking twice is erroneous.
}