jkorous added a comment. I am sorry I haven't notice this earlier - let's fix this before we land the patch.
================ Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:690 + Val.toString(Txt, 10, true); + return Txt.data(); +} ---------------- We either need a zero to terminate the string or pass the size of `Txt` to the `std::string` constructor here. (While `toString`'s name might sound like it'll take care of that it does not.) Simplified testcase: ``` void local_ptr_to_array() { int tmp; int a[10]; int *p = a; tmp = p[5]; } ``` what I get is (something like this): ``` void local_ptr_to_array() { int tmp; int a[10]; std::span<int> p {a, 10�o}; tmp = p[5]; } ``` The problem is that `APInt::toString` stores '1' and '0' to `Txt` but is missing the terminating `\0` character that `std::string` constructor expects. ================ Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:690 + Val.toString(Txt, 10, true); + return Txt.data(); +} ---------------- jkorous wrote: > We either need a zero to terminate the string or pass the size of `Txt` to > the `std::string` constructor here. (While `toString`'s name might sound like > it'll take care of that it does not.) > > Simplified testcase: > ``` > void local_ptr_to_array() { > int tmp; > int a[10]; > int *p = a; > tmp = p[5]; > } > ``` > what I get is (something like this): > ``` > void local_ptr_to_array() { > int tmp; > int a[10]; > std::span<int> p {a, 10�o}; > tmp = p[5]; > } > ``` > The problem is that `APInt::toString` stores '1' and '0' to `Txt` but is > missing the terminating `\0` character that `std::string` constructor expects. > CHANGES SINCE LAST ACTION https://reviews.llvm.org/D139737/new/ https://reviews.llvm.org/D139737 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits