chromium/tools/clang/spanify/tests/fct-decl-tests-expected.cc

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <vector>

#include "base/containers/span.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_span.h"

struct S {};

// Expected rewrite:
// S fct_declaration(base::span<const S> arg1,int arg2,S* arg3);
S fct_declaration(base::span<const S> arg1, int arg2, S* arg3);

// Expected rewrite:
// int fct_declaration2(base::raw_span<int> arg);
int fct_declaration2(base::raw_span<int> arg);

class Parent {
 public:
  Parent() = default;
  // Expected rewrite:
  // Parent(base::span<S> ptr): member(ptr){}
  Parent(base::span<S> ptr) : member(ptr) {}

  // Expected rewrite:
  // virtual base::span<S> get();
  virtual base::span<S> get();

 protected:
  // Expected rewrite:
  // base::span<S> member;
  base::span<S> member;
};

// Expected rewrite:
// virtual base::span<S> Parent::get()
base::span<S> Parent::get() {
  // Expected rewrite:
  // fct_declaration(member, 0, member.data());
  fct_declaration(member, 0, member.data());
  return member;
}

class Child : public Parent {
 public:
  Child() = default;

  // Expected rewrite:
  // base::span<S> get() override;
  base::span<S> get() override;
};

// Expected rewrite:
// base::span<S> Child::get()
base::span<S> Child::get() {
  // Expected rewrite:
  // return {};
  return {};
}

// Expected rewrite:
// S fct_declaration(base::span<const S> arg1, int arg2, S* arg3)
S fct_declaration(base::span<const S> arg1, int arg2, S* arg3) {
  // leads arg1 to be rewritten.
  return arg1[1];
}

// Expected rewrite:
// int fct_declaration2(base::raw_span<int> arg)
int fct_declaration2(base::raw_span<int> arg) {
  return arg[1];
}

void fct() {
  // Expected rewrite:
  // Parent p({});
  Parent p({});
  // Leads Parent::get() return value to be rewritten.
  p.get()[0] = {};

  // Expected rewrite:
  // fct_declaration2({});
  fct_declaration2({});
}