[clang] [Wunsafe-buffer-usage] Turn off unsafe-buffer warning for methods annotated with clang::unsafe_buffer_usage attribute (PR #125671)
Malavika Samak via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 21 11:15:30 PST 2025
================
@@ -245,3 +243,40 @@ struct AggregateViaDefaultInit {
void testAggregateViaDefaultInit() {
AggregateViaDefaultInit A;
};
+
+struct A {
+ int arr[2];
+
+ [[clang::unsafe_buffer_usage]]
+ int *ptr;
+};
+
+namespace std{
+ template <typename T> class span {
+
+ T *elements;
+
+ public:
+
+ constexpr span(T *, unsigned){}
+
+ template<class Begin, class End>
+ constexpr span(Begin first, End last){}
+
+ constexpr T* data() const noexcept {
+ return elements;
+ }
+ };
+}
+
+[[clang::unsafe_buffer_usage]]
+void check_no_warnings(unsigned idx) {
+ int *arr = new int[20];
+
+ int k = arr[idx]; // no-warning
+
+ std::span<int> sp = {arr, 20}; // no-warning
+ A *ptr = reinterpret_cast<A*> (sp.data()); // no-warning
+ A a;
+ a.ptr = arr; // no-warning
----------------
malavikasamak wrote:
@dtarditi We do not yet support adding the clang::unsafe_buffer_usage attribute to templated functions yet. Can't recall if this was intentional. I can create another PR to add this if we think it is necessary.
I have added tests for other cases you suggested. Please take a look.
https://github.com/llvm/llvm-project/pull/125671
More information about the cfe-commits
mailing list