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