xref: /aosp_15_r20/external/cronet/base/sequence_checker_nocompile.nc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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