1 //===-- tsan_ignoreset.cpp ------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of ThreadSanitizer (TSan), a race detector. 10 // 11 //===----------------------------------------------------------------------===// 12 #include "tsan_ignoreset.h" 13 14 namespace __tsan { 15 16 const uptr IgnoreSet::kMaxSize; 17 18 IgnoreSet::IgnoreSet() 19 : size_() { 20 } 21 22 void IgnoreSet::Add(u32 stack_id) { 23 if (size_ == kMaxSize) 24 return; 25 for (uptr i = 0; i < size_; i++) { 26 if (stacks_[i] == stack_id) 27 return; 28 } 29 stacks_[size_++] = stack_id; 30 } 31 32 void IgnoreSet::Reset() { 33 size_ = 0; 34 } 35 36 uptr IgnoreSet::Size() const { 37 return size_; 38 } 39 40 u32 IgnoreSet::At(uptr i) const { 41 CHECK_LT(i, size_); 42 CHECK_LE(size_, kMaxSize); 43 return stacks_[i]; 44 } 45 46 } // namespace __tsan 47