Skip to content

Commit 4e92c91

Browse files
tsepezcopybara-github
authored andcommitted
Mark unsafe raw_ptr<T> operations as unsafe.
Single-file CL for easy revert should we have missed some places where unsafe operations are present in the prior CLs. Bug: 435068772 Cq-Include-Trybots: luci.chromium.try:linux-v4l2-codec-rel Change-Id: I46d611d306049e8b8d538682aaab2eeb8aa6074f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6803421 Reviewed-by: Kentaro Hara <[email protected]> Commit-Queue: Tom Sepez <[email protected]> Cr-Commit-Position: refs/heads/main@{#1496539} NOKEYCHECK=True GitOrigin-RevId: 11bf594ca1bc0c9d9d143a53f9323b120c1db123
1 parent f79cd04 commit 4e92c91

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/partition_alloc/pointers/raw_ptr.h

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -680,29 +680,31 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
680680
return static_cast<U*>(GetForExtraction());
681681
}
682682

683-
PA_ALWAYS_INLINE constexpr raw_ptr& operator++() {
683+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr& operator++() {
684684
static_assert(
685685
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
686686
"cannot increment raw_ptr unless AllowPtrArithmetic trait is present.");
687687
wrapped_ptr_ = Impl::Advance(wrapped_ptr_, 1, true);
688688
return *this;
689689
}
690-
PA_ALWAYS_INLINE constexpr raw_ptr& operator--() {
690+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr& operator--() {
691691
static_assert(
692692
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
693693
"cannot decrement raw_ptr unless AllowPtrArithmetic trait is present.");
694694
wrapped_ptr_ = Impl::Retreat(wrapped_ptr_, 1, true);
695695
return *this;
696696
}
697-
PA_ALWAYS_INLINE constexpr raw_ptr operator++(int /* post_increment */) {
697+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr operator++(
698+
int /* post_increment */) {
698699
static_assert(
699700
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
700701
"cannot increment raw_ptr unless AllowPtrArithmetic trait is present.");
701702
raw_ptr result = *this;
702703
++(*this);
703704
return result;
704705
}
705-
PA_ALWAYS_INLINE constexpr raw_ptr operator--(int /* post_decrement */) {
706+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr operator--(
707+
int /* post_decrement */) {
706708
static_assert(
707709
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
708710
"cannot decrement raw_ptr unless AllowPtrArithmetic trait is present.");
@@ -713,7 +715,8 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
713715
template <
714716
typename Z,
715717
typename = std::enable_if_t<partition_alloc::internal::is_offset_type<Z>>>
716-
PA_ALWAYS_INLINE constexpr raw_ptr& operator+=(Z delta_elems) {
718+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr& operator+=(
719+
Z delta_elems) {
717720
static_assert(
718721
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
719722
"cannot increment raw_ptr unless AllowPtrArithmetic trait is present.");
@@ -723,7 +726,8 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
723726
template <
724727
typename Z,
725728
typename = std::enable_if_t<partition_alloc::internal::is_offset_type<Z>>>
726-
PA_ALWAYS_INLINE constexpr raw_ptr& operator-=(Z delta_elems) {
729+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr raw_ptr& operator-=(
730+
Z delta_elems) {
727731
static_assert(
728732
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
729733
"cannot decrement raw_ptr unless AllowPtrArithmetic trait is present.");
@@ -736,7 +740,8 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
736740
typename = std::enable_if_t<
737741
!std::is_void_v<typename std::remove_cv<U>::type> &&
738742
partition_alloc::internal::is_offset_type<Z>>>
739-
PA_ALWAYS_INLINE constexpr U& operator[](Z delta_elems) const {
743+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE constexpr U& operator[](
744+
Z delta_elems) const {
740745
static_assert(
741746
raw_ptr_traits::IsPtrArithmeticAllowed(Traits),
742747
"cannot index raw_ptr unless AllowPtrArithmetic trait is present.");
@@ -760,8 +765,9 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
760765
// generate code that converts `raw_ptr<T>` to `T*` and adds uint64_t to that,
761766
// bypassing the OOB protection entirely.
762767
template <typename Z>
763-
PA_ALWAYS_INLINE friend constexpr raw_ptr operator+(const raw_ptr& p,
764-
Z delta_elems) {
768+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE friend constexpr raw_ptr operator+(
769+
const raw_ptr& p,
770+
Z delta_elems) {
765771
// Don't check `is_offset_type<Z>` here, as existence of `Advance` is
766772
// already gated on that, and we'd get double errors.
767773
static_assert(
@@ -771,13 +777,15 @@ class PA_TRIVIAL_ABI PA_GSL_POINTER raw_ptr {
771777
return result;
772778
}
773779
template <typename Z>
774-
PA_ALWAYS_INLINE friend constexpr raw_ptr operator+(Z delta_elems,
775-
const raw_ptr& p) {
780+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE friend constexpr raw_ptr operator+(
781+
Z delta_elems,
782+
const raw_ptr& p) {
776783
return p + delta_elems;
777784
}
778785
template <typename Z>
779-
PA_ALWAYS_INLINE friend constexpr raw_ptr operator-(const raw_ptr& p,
780-
Z delta_elems) {
786+
PA_UNSAFE_BUFFER_USAGE PA_ALWAYS_INLINE friend constexpr raw_ptr operator-(
787+
const raw_ptr& p,
788+
Z delta_elems) {
781789
// Don't check `is_offset_type<Z>` here, as existence of `Retreat` is
782790
// already gated on that, and we'd get double errors.
783791
static_assert(raw_ptr_traits::IsPtrArithmeticAllowed(Traits),

0 commit comments

Comments
 (0)