// 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>
// Expected rewrite:
// base::span<int> fct1()
int* fct1() {
static std::vector<int> ctn = {1, 2, 3};
// Expected rewrite:
// return ctn;
return ctn.data();
}
// Expected rewrite:
// base::span<int> fct2()
int* fct2() {
static std::vector<int> ctn = {1, 2, 3};
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
// base::span<int> var2 = ctn;
int* var2 = ctn.data();
return (condition) ? var1 : var2;
}
// Expected rewrite:
// base::span<int> fct3()
int* fct3() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
return var1++;
}
// Expected rewrite:
// base::span<int> fct3()
int* fct4() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
return ++var1;
}
// Expected rewrite:
// base::span<int> fct5()
int* fct5() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
int offset = 1;
return var1 + offset;
}
// Expected rewrite:
// base::span<char> fct6()
char* fct6() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
int offset = 1;
// No rewrite here for now.
return reinterpret_cast<char*>(var1 + offset);
}
// Function return type not rewritten since not used.
int* fct7() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
int offset = 1;
// Expected rewrite:
// return (var1 + offset).data();
return var1 + offset;
}
// Function return type not rewritten since not used.
char* fct8() {
bool condition = true;
// Expected rewrite:
// base::span<int> var1 = new int[1024];
int* var1 = new int[1024];
int offset = 1;
// Expected rewrite:
// return (reinterpret_cast<char*>(var1) + offset).data();
return reinterpret_cast<char*>(var1) + offset;
}
void usage() {
// Expected rewrite:
// base::span<int> v1 = fct1();
int* v1 = fct1();
v1++;
// Expected rewrite:
// base::span<int> v2 = fct2();
int* v2 = fct2();
v2++;
// Expected rewrite:
// base::span<int> v3 = fct3();
int* v3 = fct3();
v3++;
// Expected rewrite:
// base::span<int> v4 = fct4();
int* v4 = fct4();
v4++;
// Expected rewrite:
// base::span<int> v5 = fct5();
int* v5 = fct5();
v5++;
// Expected rewrite:
// base::span<char> v6 = fct6();
char* v6 = fct6();
v6++;
}