xref: /aosp_15_r20/external/cronet/base/unsafe_buffers_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2024 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h"
6*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker namespace {
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker template <int A = 0, int B = 0>
uses_pointer_as_array(int * i)11*6777b538SAndroid Build Coastguard Worker UNSAFE_BUFFER_USAGE int uses_pointer_as_array(int* i) {
12*6777b538SAndroid Build Coastguard Worker   return UNSAFE_BUFFERS(i[1]);
13*6777b538SAndroid Build Coastguard Worker }
14*6777b538SAndroid Build Coastguard Worker 
TEST(UnsafeBuffers,Macro)15*6777b538SAndroid Build Coastguard Worker TEST(UnsafeBuffers, Macro) {
16*6777b538SAndroid Build Coastguard Worker   int arr[] = {1, 2};
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker   // Should compile even with -Wunsafe-buffer-usage.
19*6777b538SAndroid Build Coastguard Worker   int x = UNSAFE_BUFFERS(uses_pointer_as_array(arr));
20*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(x, 2);
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker   // Should compile even with -Wunsafe-buffer-usage.
23*6777b538SAndroid Build Coastguard Worker   UNSAFE_BUFFERS({
24*6777b538SAndroid Build Coastguard Worker     uses_pointer_as_array(arr);
25*6777b538SAndroid Build Coastguard Worker     uses_pointer_as_array(arr);
26*6777b538SAndroid Build Coastguard Worker   });
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   // Commas don't break things. This comma is not wrapped in `()` which verifies
29*6777b538SAndroid Build Coastguard Worker   // the macro handles the comma correctly. `()` would hide the comma from the
30*6777b538SAndroid Build Coastguard Worker   // macro.
31*6777b538SAndroid Build Coastguard Worker   int y = UNSAFE_BUFFERS(uses_pointer_as_array<1, 1>(arr));
32*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(y, 2);
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker }  // namespace
36