blob: ebb5e03c9454a64b41f52970f258cdf98803b92d [file] [log] [blame]
// Copyright 2023 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/memory/raw_ptr.h"
struct S {};
struct obj {
// Expected rewrite: const std::vector<raw_ptr<S>>& get();
const std::vector<raw_ptr<S>>& get() { return member; }
// Expected rewrite: std::vector<raw_ptr<S>> member;
std::vector<raw_ptr<S>> member;
};
// Expected rewrite: std::vector<raw_ptr<S>> get_value();
std::vector<raw_ptr<S>> get_value() {
return {};
}
// Expected rewrite: std::vector<raw_ptr<S>>* get_ptr();
std::vector<raw_ptr<S>>* get_ptr() {
return nullptr;
}
// No rewrite expected.
std::vector<S*> unrelated_fct() {
return {};
}
void fct() {
obj o;
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
std::vector<raw_ptr<S>> a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = b;
a = b;
// Expected rewrite: std::vector<raw_ptr<S>> c;
std::vector<raw_ptr<S>> c;
c.swap(b);
// Expected rewrite: std::vector<raw_ptr<S>> d;
std::vector<raw_ptr<S>> d;
std::swap(c, d);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
auto a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = b;
a = b;
// Expected rewrite: std::vector<raw_ptr<S>> c;
std::vector<raw_ptr<S>> c;
c.swap(a);
// Expected rewrite: std::vector<raw_ptr<S>> d;
std::vector<raw_ptr<S>> d;
std::swap(d, a);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
std::vector<raw_ptr<S>> a = o.member;
// Expected rewrite: a = std::vector<raw_ptr<S>>();
a = std::vector<raw_ptr<S>>();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
auto a = o.member;
// Expected rewrite: a = std::vector<raw_ptr<S>>();
a = std::vector<raw_ptr<S>>();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
std::vector<raw_ptr<S>> a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = std::move(b);
a = std::move(b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
auto a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = std::move(b);
a = std::move(b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = &b;
a = &b;
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
auto* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = &b;
a = &b;
// Expected rewrite: std::vector<raw_ptr<S>> c;
std::vector<raw_ptr<S>> c;
c.swap(*a);
// Expected rewrite: std::vector<raw_ptr<S>> d;
std::vector<raw_ptr<S>> d;
std::swap(d, *a);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// *a = b;
*a = b;
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// *a = b;
std::swap(*a, b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// *a = b;
a->swap(b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
auto* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// *a = b;
*a = b;
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
auto* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// *a = b;
std::swap(*a, b);
// Expected rewrite: std::vector<raw_ptr<S>> d;
std::vector<raw_ptr<S>> d;
d.swap(*a);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>>* b;
std::vector<raw_ptr<S>>* b = nullptr;
// *a = b;
*a = *b;
// Expected rewrite: std::vector<raw_ptr<S>>* d;
std::vector<raw_ptr<S>>* d;
d->swap(*a);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>>* b;
std::vector<raw_ptr<S>>* b = nullptr;
// *a = b;
std::swap(*a, *b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
auto* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>>* b;
std::vector<raw_ptr<S>>* b = nullptr;
// *a = b;
*a = *b;
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
auto* a = &o.member;
// Expected rewrite: std::vector<raw_ptr<S>>* b;
std::vector<raw_ptr<S>>* b = nullptr;
// *a = b;
std::swap(*a, *b);
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
std::vector<raw_ptr<S>> a = o.member;
// a = fct();
a = get_value();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a = o.member;
auto a = o.member;
// a = fct();
auto fct_value = []() -> std::vector<raw_ptr<S>> { return {}; };
a = fct_value();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
std::vector<raw_ptr<S>>* a = &o.member;
// a = fct();
a = get_ptr();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
auto* a = &o.member;
// a = fct();
auto fct_ptr = []() -> std::vector<raw_ptr<S>>* { return nullptr; };
a = fct_ptr();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>>* a = &o.member;
const std::vector<raw_ptr<S>>* a = &o.member;
// a = &fct();
a = &o.get();
}
{
// create a link with a member to propagate the rewrite.
// Expected rewrite: std::vector<raw_ptr<S>> a;
std::vector<raw_ptr<S>> a;
auto fct = [&]() -> std::vector<raw_ptr<S>>* { return &o.member; };
a = *fct();
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
std::swap(b, *fct());
}
{
// Expected rewrite: std::vector<raw_ptr<S>>::iterator it;
std::vector<raw_ptr<S>>::iterator it;
it = o.member.begin();
(void)it;
}
{
auto it = o.member.begin();
// Expected rewrite: std::vector<raw_ptr<S>>::iterator it2;
std::vector<raw_ptr<S>>::iterator it2;
it2 = it;
}
{
// create a link with a member to propagate the rewrite.
std::vector<raw_ptr<S>> a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = b;
// Expected rewrite: a = (true) ? b : std::vector<raw_ptr<S>>();
a = (true) ? b : std::vector<raw_ptr<S>>();
}
{
// create a link with a member to propagate the rewrite.
auto a = o.member;
// Expected rewrite: std::vector<raw_ptr<S>> b;
std::vector<raw_ptr<S>> b;
// a = b;
// Expected rewrite: a = (true) ? b : std::vector<raw_ptr<S>>();
a = (true) ? b : std::vector<raw_ptr<S>>();
}
}