910e62b5创建于 1月15日历史提交
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <array>
#include <cstring>
#include <tuple>

struct Mailbox {
  char name[16];
};

void TestSizeofArithmetic(const Mailbox& source, const Mailbox& dest) {
  // Expected rewrite:
  // std::array<char, sizeof(source.name) * 2> buffer;
  char buffer[sizeof(source.name) * 2];

  // Test `sizeof(...)` with parentheses.
  // Expected rewrite:
  // memcpy(base::span(buffer).subspan(sizeof(source.name)).data(),
  //        dest.name, sizeof(dest.name));
  memcpy(buffer + sizeof(source.name), dest.name, sizeof(dest.name));

  // Test `sizeof ...` without parentheses.
  // Expected rewrite:
  // memcpy(base::span(buffer).subspan(sizeof source.name).name,
  //        dest.name, sizeof dest.name);
  memcpy(buffer + sizeof source.name, dest.name, sizeof dest.name);

  // Test `sizeof` as part of a more complex expression.
  // Expected rewrite:
  // memcpy(
  //     base::span(buffer)
  //         .subspan(sizeof source.name / sizeof source.name[0])
  //         .data(),
  //     dest.name, sizeof dest.name);
  memcpy(buffer + sizeof source.name / sizeof source.name[0], dest.name,
         sizeof dest.name);

  // Test `sizeof` used on array.
  // Expected rewrite:
  // memcpy(base::span<char>(buffer)
  //   .subspan(base::SpanificationSizeofForStdArray(buffer) - 1u)
  //   .data(), dest.name, 1);
  memcpy(buffer + sizeof buffer - 1, dest.name, 1);
}