[libc-commits] [PATCH] D152322: [libc] Temporarily suppress -fsanitize=function for qsort comparator

Leonard Chan via Phabricator via libc-commits libc-commits at lists.llvm.org
Wed Jun 7 11:46:43 PDT 2023


This revision was automatically updated to reflect the committed changes.
Closed by commit rG8f360c3560d4: [libc] Temporarily suppress -fsanitize=function for qsort comparator (authored by leonardchan).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D152322/new/

https://reviews.llvm.org/D152322

Files:
  libc/src/stdlib/qsort.cpp


Index: libc/src/stdlib/qsort.cpp
===================================================================
--- libc/src/stdlib/qsort.cpp
+++ libc/src/stdlib/qsort.cpp
@@ -41,6 +41,15 @@
     }
   }
 
+#if defined(__clang__)
+  // Recent upstream changes to -fsanitize=function find more instances of
+  // function type mismatches. One case is with the comparator passed to this
+  // class. Libraries like boringssl will tend to pass comparators that take
+  // pointers to varying types while this comparator expects to accept const
+  // void pointers. Ideally those tools would pass a function that strictly
+  // accepts const void*s to avoid UB, or we'd have something like qsort_r/s.
+  [[clang::no_sanitize("function")]]
+#endif
   int elem_compare(size_t i, const uint8_t *other) const {
     // An element must compare equal to itself so we don't need to consult the
     // user provided comparator.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152322.529391.patch
Type: text/x-patch
Size: 905 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230607/1da00cd4/attachment.bin>


More information about the libc-commits mailing list