1// Copyright 2019 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This is a "No Compile Test" suite. 6// https://dev.chromium.org/developers/testing/no-compile-tests 7 8#include "base/sequence_checker.h" 9 10namespace { 11 12class SequenceAffine { 13 public: 14 void BuggyCounterAccess(); 15 void BuggyIncrementCall(); 16 17 void Increment() VALID_CONTEXT_REQUIRED(sequence_checker_) { 18 ++counter_; 19 } 20 21 private: 22 int counter_ GUARDED_BY_CONTEXT(sequence_checker_); 23 24 SEQUENCE_CHECKER(sequence_checker_); 25}; 26 27#if DCHECK_IS_ON() 28 29void SequenceAffine::BuggyCounterAccess() { 30 // Member access without sequence_checker_ assertion. 31 ++counter_; // expected-error {{writing variable 'counter_' requires holding context 'sequence_checker_' exclusively}} 32} 33 34void SequenceAffine::BuggyIncrementCall() { 35 // Function call without sequence_checker_ assertion. 36 Increment(); // expected-error {{calling function 'Increment' requires holding context 'sequence_checker_' exclusively}} 37} 38 39#else 40 41// The SEQUENCE_CHECKER macros only do something in DCHECK builds. 42// expected-no-diagnostics 43 44#endif 45 46} // namespace 47