// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file (and other gen-*-test.cc files) tests generation of output for
// --field-filter-file and therefore the expectations file
// (gen-overlapping-expected.txt) needs to be compared against the raw output of
// the rewriter (rather than against the actual edits result). This makes the
// test incompatible with other tests, which require passing --apply-edits
// switch to test_tool.py and so to disable the test it is named *-test.cc
// rather than *-original.cc.
//
// To run the test use tools/clang/rewrite_raw_ptr_fields/tests/run_all_tests.py
namespace my_namespace {
class SomeClass {
int x;
};
struct MyStruct {
// The fields below have an overlapping |replacement_range| and therefore
// should be emitted as candidates for --field-filter-file.
SomeClass *overlapping_ptr_1a, *overlapping_ptr_1b;
// It is sufficient to emit pointer fields (e.g. no need to emit
// overlapping_ptr_2b or overlapping_ptr_3a).
SomeClass *overlapping_ptr_2a, overlapping_ptr_2b;
SomeClass overlapping_ptr_3a, *overlapping_ptr_3b;
// The fields below have an overlapping |replacement_range| and therefore
// should be emitted as candidates for --field-filter-file.
SomeClass &overlapping_ref_1a, &overlapping_ref_1b;
// It is sufficient to emit pointer fields (e.g. no need to emit
// overlapping_ref_2b or overlapping_ref_3a).
SomeClass &overlapping_ref_2a, overlapping_ref_2b;
SomeClass overlapping_ref_3a, &overlapping_ref_3b;
// Definition of the struct overlaps with the |replacement_range| of the
// |ptr_to_non_free_standing_struct|. Therefore the field should be emitted
// as a candidate for --field-filter-file.
struct NonFreeStandingStruct {
int non_ptr;
} * ptr_to_non_free_standing_struct;
// Similarly to the above, definition of the struct overlaps with the
// |replacement_range| of |ptr_to_non_free_standing_struct2|. OTOH, it is
// okay to proceed with rewriting |inner_ptr| - it should not be emitted as a
// candidate for --field-filter-file.
struct NonFreeStandingStruct2 {
SomeClass* inner_ptr;
SomeClass& inner_ref;
} * ptr_to_non_free_standing_struct2;
};
} // namespace my_namespace