summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2018-05-07 05:56:24 +0000
committerVitaly Buka <vitalybuka@google.com>2018-05-07 05:56:24 +0000
commit1d754d2b06bbd1864d6ceafc98d933a277af0cbe (patch)
tree30a4d76bf1decd3ab1c5ba52f76d149966bf6129
parent37bd23415794895d170e1f0b9a7d788406e2aa86 (diff)
[sanitizer] Remove reserving constructor from InternalMmapVector
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@331617 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/asan/asan_debugging.cc3
-rw-r--r--lib/asan/asan_descriptions.cc3
-rw-r--r--lib/asan/asan_globals.cc11
-rw-r--r--lib/asan/asan_memory_profile.cc4
-rw-r--r--lib/lsan/lsan_common.cc6
-rw-r--r--lib/lsan/lsan_common.h5
-rw-r--r--lib/lsan/lsan_common_mac.cc3
-rw-r--r--lib/sanitizer_common/sanitizer_common.h10
-rw-r--r--lib/sanitizer_common/sanitizer_deadlock_detector2.cc8
-rw-r--r--lib/sanitizer_common/sanitizer_mac.cc3
-rw-r--r--lib/sanitizer_common/sanitizer_stackdepot.cc4
-rw-r--r--lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc2
-rw-r--r--lib/sanitizer_common/sanitizer_suppressions.cc2
-rw-r--r--lib/sanitizer_common/sanitizer_symbolizer.h5
-rw-r--r--lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc5
-rw-r--r--lib/sanitizer_common/tests/sanitizer_common_test.cc4
-rw-r--r--lib/sanitizer_common/tests/sanitizer_procmaps_test.cc6
-rw-r--r--lib/tsan/rtl/tsan_rtl.cc2
-rw-r--r--lib/tsan/rtl/tsan_suppressions.cc2
19 files changed, 48 insertions, 40 deletions
diff --git a/lib/asan/asan_debugging.cc b/lib/asan/asan_debugging.cc
index 37c5922dc..7c877ded3 100644
--- a/lib/asan/asan_debugging.cc
+++ b/lib/asan/asan_debugging.cc
@@ -27,7 +27,8 @@ using namespace __asan;
static void FindInfoForStackVar(uptr addr, const char *frame_descr, uptr offset,
char *name, uptr name_size,
uptr &region_address, uptr &region_size) {
- InternalMmapVector<StackVarDescr> vars(16);
+ InternalMmapVector<StackVarDescr> vars;
+ vars.reserve(16);
if (!ParseFrameDescription(frame_descr, &vars)) {
return;
}
diff --git a/lib/asan/asan_descriptions.cc b/lib/asan/asan_descriptions.cc
index e7d5d667a..1c70fed6f 100644
--- a/lib/asan/asan_descriptions.cc
+++ b/lib/asan/asan_descriptions.cc
@@ -380,7 +380,8 @@ void StackAddressDescription::Print() const {
StackTrace alloca_stack(&frame_pc, 1);
alloca_stack.Print();
- InternalMmapVector<StackVarDescr> vars(16);
+ InternalMmapVector<StackVarDescr> vars;
+ vars.reserve(16);
if (!ParseFrameDescription(frame_descr, &vars)) {
Printf(
"AddressSanitizer can't parse the stack frame "
diff --git a/lib/asan/asan_globals.cc b/lib/asan/asan_globals.cc
index 0db65d010..898f7f40d 100644
--- a/lib/asan/asan_globals.cc
+++ b/lib/asan/asan_globals.cc
@@ -224,8 +224,9 @@ static void RegisterGlobal(const Global *g) {
list_of_all_globals = l;
if (g->has_dynamic_init) {
if (!dynamic_init_globals) {
- dynamic_init_globals = new(allocator_for_globals)
- VectorOfGlobals(kDynamicInitGlobalsInitialCapacity);
+ dynamic_init_globals =
+ new (allocator_for_globals) VectorOfGlobals; // NOLINT
+ dynamic_init_globals->reserve(kDynamicInitGlobalsInitialCapacity);
}
DynInitGlobal dyn_global = { *g, false };
dynamic_init_globals->push_back(dyn_global);
@@ -358,9 +359,11 @@ void __asan_register_globals(__asan_global *globals, uptr n) {
GET_STACK_TRACE_MALLOC;
u32 stack_id = StackDepotPut(stack);
BlockingMutexLock lock(&mu_for_globals);
- if (!global_registration_site_vector)
+ if (!global_registration_site_vector) {
global_registration_site_vector =
- new(allocator_for_globals) GlobalRegistrationSiteVector(128);
+ new (allocator_for_globals) GlobalRegistrationSiteVector; // NOLINT
+ global_registration_site_vector->reserve(128);
+ }
GlobalRegistrationSite site = {stack_id, &globals[0], &globals[n - 1]};
global_registration_site_vector->push_back(site);
if (flags()->report_globals >= 2) {
diff --git a/lib/asan/asan_memory_profile.cc b/lib/asan/asan_memory_profile.cc
index 603284c8c..600db8c48 100644
--- a/lib/asan/asan_memory_profile.cc
+++ b/lib/asan/asan_memory_profile.cc
@@ -31,9 +31,9 @@ struct AllocationSite {
class HeapProfile {
public:
- HeapProfile() : allocations_(1024) {}
+ HeapProfile() { allocations_.reserve(1024); }
- void ProcessChunk(const AsanChunkView& cv) {
+ void ProcessChunk(const AsanChunkView &cv) {
if (cv.IsAllocated()) {
total_allocated_user_size_ += cv.UsedSize();
total_allocated_count_++;
diff --git a/lib/lsan/lsan_common.cc b/lib/lsan/lsan_common.cc
index 19e22fb61..25967c2d1 100644
--- a/lib/lsan/lsan_common.cc
+++ b/lib/lsan/lsan_common.cc
@@ -104,7 +104,7 @@ InternalMmapVector<RootRegion> const *GetRootRegions() { return root_regions; }
void InitializeRootRegions() {
CHECK(!root_regions);
ALIGNED(64) static char placeholder[sizeof(InternalMmapVector<RootRegion>)];
- root_regions = new(placeholder) InternalMmapVector<RootRegion>(1);
+ root_regions = new (placeholder) InternalMmapVector<RootRegion>(); // NOLINT
}
const char *MaybeCallLsanDefaultOptions() {
@@ -445,7 +445,7 @@ void ProcessPC(Frontier *frontier) {
// Sets the appropriate tag on each chunk.
static void ClassifyAllChunks(SuspendedThreadsList const &suspended_threads) {
// Holds the flood fill frontier.
- Frontier frontier(1);
+ Frontier frontier;
ForEachChunk(CollectIgnoredCb, &frontier);
ProcessGlobalRegions(&frontier);
@@ -507,7 +507,7 @@ static void CollectLeaksCb(uptr chunk, void *arg) {
}
static void PrintMatchedSuppressions() {
- InternalMmapVector<Suppression *> matched(1);
+ InternalMmapVector<Suppression *> matched;
GetSuppressionContext()->GetMatched(&matched);
if (!matched.size())
return;
diff --git a/lib/lsan/lsan_common.h b/lib/lsan/lsan_common.h
index f3863309d..2bffed4a5 100644
--- a/lib/lsan/lsan_common.h
+++ b/lib/lsan/lsan_common.h
@@ -95,7 +95,7 @@ struct LeakedObject {
// Aggregates leaks by stack trace prefix.
class LeakReport {
public:
- LeakReport() : next_id_(0), leaks_(1), leaked_objects_(1) {}
+ LeakReport() {}
void AddLeakedChunk(uptr chunk, u32 stack_trace_id, uptr leaked_size,
ChunkTag tag);
void ReportTopLeaks(uptr max_leaks);
@@ -103,12 +103,11 @@ class LeakReport {
void ApplySuppressions();
uptr UnsuppressedLeakCount();
-
private:
void PrintReportForLeak(uptr index);
void PrintLeakedObjectsForLeak(uptr index);
- u32 next_id_;
+ u32 next_id_ = 0;
InternalMmapVector<Leak> leaks_;
InternalMmapVector<LeakedObject> leaked_objects_;
};
diff --git a/lib/lsan/lsan_common_mac.cc b/lib/lsan/lsan_common_mac.cc
index b8f8b25f6..2508c1dbd 100644
--- a/lib/lsan/lsan_common_mac.cc
+++ b/lib/lsan/lsan_common_mac.cc
@@ -119,7 +119,8 @@ void ProcessGlobalRegions(Frontier *frontier) {
for (auto name : kSkippedSecNames) CHECK(ARRAY_SIZE(name) < kMaxSegName);
MemoryMappingLayout memory_mapping(false);
- InternalMmapVector<LoadedModule> modules(/*initial_capacity*/ 128);
+ InternalMmapVector<LoadedModule> modules;
+ modules.reserve(128);
memory_mapping.DumpListOfModules(&modules);
for (uptr i = 0; i < modules.size(); ++i) {
// Even when global scanning is disabled, we still need to scan
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h
index 58bda6149..4e79a9990 100644
--- a/lib/sanitizer_common/sanitizer_common.h
+++ b/lib/sanitizer_common/sanitizer_common.h
@@ -482,6 +482,10 @@ class InternalMmapVectorNoCtor {
uptr capacity() const {
return capacity_;
}
+ void reserve(uptr new_size) {
+ if (new_size >= size()) return;
+ Resize(new_size);
+ }
void resize(uptr new_size) {
Resize(new_size);
if (new_size > size_) {
@@ -527,9 +531,7 @@ class InternalMmapVectorNoCtor {
template<typename T>
class InternalMmapVector : public InternalMmapVectorNoCtor<T> {
public:
- explicit InternalMmapVector(uptr initial_capacity) {
- InternalMmapVectorNoCtor<T>::Initialize(initial_capacity);
- }
+ InternalMmapVector() { InternalMmapVectorNoCtor<T>::Initialize(1); }
~InternalMmapVector() { InternalMmapVectorNoCtor<T>::Destroy(); }
// Disallow copies and moves.
InternalMmapVector(const InternalMmapVector &) = delete;
@@ -545,7 +547,7 @@ class InternalMmapVector : public InternalMmapVectorNoCtor<T> {
template <typename T>
class InternalScopedBuffer : public InternalMmapVector<T> {
public:
- explicit InternalScopedBuffer(uptr cnt) : InternalMmapVector<T>(cnt) {
+ explicit InternalScopedBuffer(uptr cnt) : InternalMmapVector<T>() {
this->resize(cnt);
}
};
diff --git a/lib/sanitizer_common/sanitizer_deadlock_detector2.cc b/lib/sanitizer_common/sanitizer_deadlock_detector2.cc
index 87d4a4d9a..0b0085a48 100644
--- a/lib/sanitizer_common/sanitizer_deadlock_detector2.cc
+++ b/lib/sanitizer_common/sanitizer_deadlock_detector2.cc
@@ -111,7 +111,7 @@ struct DD : public DDetector {
SpinMutex mtx;
InternalMmapVector<u32> free_id;
- int id_gen;
+ int id_gen = 0;
};
DDetector *DDetector::Create(const DDFlags *flags) {
@@ -120,11 +120,7 @@ DDetector *DDetector::Create(const DDFlags *flags) {
return new(mem) DD(flags);
}
-DD::DD(const DDFlags *flags)
- : flags(*flags)
- , free_id(1024) {
- id_gen = 0;
-}
+DD::DD(const DDFlags *flags) : flags(*flags) { free_id.reserve(1024); }
DDPhysicalThread* DD::CreatePhysicalThread() {
DDPhysicalThread *pt = (DDPhysicalThread*)MmapOrDie(sizeof(DDPhysicalThread),
diff --git a/lib/sanitizer_common/sanitizer_mac.cc b/lib/sanitizer_common/sanitizer_mac.cc
index 2269ff682..858d69839 100644
--- a/lib/sanitizer_common/sanitizer_mac.cc
+++ b/lib/sanitizer_common/sanitizer_mac.cc
@@ -1032,7 +1032,8 @@ void FormatUUID(char *out, uptr size, const u8 *uuid) {
void PrintModuleMap() {
Printf("Process module map:\n");
MemoryMappingLayout memory_mapping(false);
- InternalMmapVector<LoadedModule> modules(/*initial_capacity*/ 128);
+ InternalMmapVector<LoadedModule> modules;
+ modules.reserve(128);
memory_mapping.DumpListOfModules(&modules);
InternalSort(&modules, modules.size(), CompareBaseAddress);
for (uptr i = 0; i < modules.size(); ++i) {
diff --git a/lib/sanitizer_common/sanitizer_stackdepot.cc b/lib/sanitizer_common/sanitizer_stackdepot.cc
index 214dda56d..dc75729ed 100644
--- a/lib/sanitizer_common/sanitizer_stackdepot.cc
+++ b/lib/sanitizer_common/sanitizer_stackdepot.cc
@@ -135,8 +135,8 @@ bool StackDepotReverseMap::IdDescPair::IdComparator(
return a.id < b.id;
}
-StackDepotReverseMap::StackDepotReverseMap()
- : map_(StackDepotGetStats()->n_uniq_ids + 100) {
+StackDepotReverseMap::StackDepotReverseMap() {
+ map_.reserve(StackDepotGetStats()->n_uniq_ids + 100);
for (int idx = 0; idx < StackDepot::kTabSize; idx++) {
atomic_uintptr_t *p = &theDepot.tab[idx];
uptr v = atomic_load(p, memory_order_consume);
diff --git a/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
index 0f543d2d7..a83421df4 100644
--- a/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
@@ -88,7 +88,7 @@ namespace __sanitizer {
class SuspendedThreadsListLinux : public SuspendedThreadsList {
public:
- SuspendedThreadsListLinux() : thread_ids_(1024) {}
+ SuspendedThreadsListLinux() { thread_ids_.reserve(1024); }
tid_t GetThreadID(uptr index) const;
uptr ThreadCount() const;
diff --git a/lib/sanitizer_common/sanitizer_suppressions.cc b/lib/sanitizer_common/sanitizer_suppressions.cc
index 89ddfddd1..232171ed5 100644
--- a/lib/sanitizer_common/sanitizer_suppressions.cc
+++ b/lib/sanitizer_common/sanitizer_suppressions.cc
@@ -25,7 +25,7 @@ namespace __sanitizer {
SuppressionContext::SuppressionContext(const char *suppression_types[],
int suppression_types_num)
: suppression_types_(suppression_types),
- suppression_types_num_(suppression_types_num), suppressions_(1),
+ suppression_types_num_(suppression_types_num),
can_parse_(true) {
CHECK_LE(suppression_types_num_, kMaxSuppressionTypes);
internal_memset(has_suppression_type_, 0, suppression_types_num_);
diff --git a/lib/sanitizer_common/sanitizer_symbolizer.h b/lib/sanitizer_common/sanitizer_symbolizer.h
index a46f16e28..e08eb0d66 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer.h
+++ b/lib/sanitizer_common/sanitizer_symbolizer.h
@@ -132,8 +132,9 @@ class Symbolizer final {
class ModuleNameOwner {
public:
explicit ModuleNameOwner(BlockingMutex *synchronized_by)
- : storage_(kInitialCapacity), last_match_(nullptr),
- mu_(synchronized_by) {}
+ : last_match_(nullptr), mu_(synchronized_by) {
+ storage_.reserve(kInitialCapacity);
+ }
const char *GetOwnedCopy(const char *str);
private:
diff --git a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
index 3b55470cb..d74a6f44e 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
@@ -315,8 +315,9 @@ class Addr2LinePool : public SymbolizerTool {
public:
explicit Addr2LinePool(const char *addr2line_path,
LowLevelAllocator *allocator)
- : addr2line_path_(addr2line_path), allocator_(allocator),
- addr2line_pool_(16) {}
+ : addr2line_path_(addr2line_path), allocator_(allocator) {
+ addr2line_pool_.reserve(16);
+ }
bool SymbolizePC(uptr addr, SymbolizedStack *stack) override {
if (const char *buf =
diff --git a/lib/sanitizer_common/tests/sanitizer_common_test.cc b/lib/sanitizer_common/tests/sanitizer_common_test.cc
index e189fa06c..5fa80efb0 100644
--- a/lib/sanitizer_common/tests/sanitizer_common_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_common_test.cc
@@ -89,7 +89,7 @@ TEST(SanitizerCommon, MmapAlignedOrDieOnFatalError) {
}
TEST(SanitizerCommon, InternalMmapVector) {
- InternalMmapVector<uptr> vector(1);
+ InternalMmapVector<uptr> vector;
for (uptr i = 0; i < 100; i++) {
EXPECT_EQ(i, vector.size());
vector.push_back(i);
@@ -102,7 +102,7 @@ TEST(SanitizerCommon, InternalMmapVector) {
vector.pop_back();
EXPECT_EQ((uptr)i, vector.size());
}
- InternalMmapVector<uptr> empty_vector(0);
+ InternalMmapVector<uptr> empty_vector;
CHECK_GT(empty_vector.capacity(), 0U);
CHECK_EQ(0U, empty_vector.size());
}
diff --git a/lib/sanitizer_common/tests/sanitizer_procmaps_test.cc b/lib/sanitizer_common/tests/sanitizer_procmaps_test.cc
index 4ac55c706..22052d9a4 100644
--- a/lib/sanitizer_common/tests/sanitizer_procmaps_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_procmaps_test.cc
@@ -37,7 +37,8 @@ TEST(MemoryMappingLayout, DumpListOfModules) {
const char *binary_name = last_slash ? last_slash + 1 : argv0;
MemoryMappingLayout memory_mapping(false);
const uptr kMaxModules = 100;
- InternalMmapVector<LoadedModule> modules(kMaxModules);
+ InternalMmapVector<LoadedModule> modules;
+ modules.reserve(kMaxModules);
memory_mapping.DumpListOfModules(&modules);
EXPECT_GT(modules.size(), 0U);
bool found = false;
@@ -56,7 +57,8 @@ TEST(MemoryMapping, LoadedModuleArchAndUUID) {
if (SANITIZER_MAC) {
MemoryMappingLayout memory_mapping(false);
const uptr kMaxModules = 100;
- InternalMmapVector<LoadedModule> modules(kMaxModules);
+ InternalMmapVector<LoadedModule> modules;
+ modules.reserve(kMaxModules);
memory_mapping.DumpListOfModules(&modules);
for (uptr i = 0; i < modules.size(); ++i) {
ModuleArch arch = modules[i].arch();
diff --git a/lib/tsan/rtl/tsan_rtl.cc b/lib/tsan/rtl/tsan_rtl.cc
index 404fb804d..5991af394 100644
--- a/lib/tsan/rtl/tsan_rtl.cc
+++ b/lib/tsan/rtl/tsan_rtl.cc
@@ -105,8 +105,8 @@ Context::Context()
, racy_stacks()
, racy_addresses()
, fired_suppressions_mtx(MutexTypeFired, StatMtxFired)
- , fired_suppressions(8)
, clock_alloc("clock allocator") {
+ fired_suppressions.reserve(8);
}
// The objects are allocated in TLS, so one may rely on zero-initialization.
diff --git a/lib/tsan/rtl/tsan_suppressions.cc b/lib/tsan/rtl/tsan_suppressions.cc
index e39702b7d..be38f331a 100644
--- a/lib/tsan/rtl/tsan_suppressions.cc
+++ b/lib/tsan/rtl/tsan_suppressions.cc
@@ -152,7 +152,7 @@ uptr IsSuppressed(ReportType typ, const ReportLocation *loc, Suppression **sp) {
}
void PrintMatchedSuppressions() {
- InternalMmapVector<Suppression *> matched(1);
+ InternalMmapVector<Suppression *> matched;
CHECK(suppression_ctx);
suppression_ctx->GetMatched(&matched);
if (!matched.size())