<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/118789>118789</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [ASAN]
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          R-Goc
      </td>
    </tr>
</table>

<pre>
    False negative with ASAN when using embed. When creating an array by embedding a text file(not null terminated) within the scope of the main function and directly constructing a string_view(also stringstream, probably other structures as well) as follows:
```
#include <print>
#include <string_view>

int main(void) {
  const char text[] = {
#embed "text.txt"
  };
  std::string_view sv(text);
 std::println("{}", sv);
  return 0;
}
```
ASAN will emit the following error: 
```
=================================================================
==30500==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x00d7fc0ff7d7 at pc 0x7ff6092dade4 bp 0x00d7fc0fedd0 sp 0x00d7fc0fee18
READ of size 8 at 0x00d7fc0ff7d7 thread T0
    #0 0x7ff6092dade3 in strlen C:\src\llvm_package_19.1.5\llvm-project\compiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:391
 #1 0x7ff6092fa1cc in std::_Narrow_char_traits<char,int>::length C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34604\include\__msvc_string_view.hpp:394
 #2 0x7ff6092fa1cc in std::basic_string_view<char,std::char_traits<char> >::basic_string_view C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34604\include\__msvc_string_view.hpp:1234
 #3 0x7ff6092fa1cc in main C:\Users\rysza\C\test\main.cpp:8
    #4 0x7ff609386937 in invoke_main D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
 #5 0x7ff609386937 in __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
 #6 0x7ff8bc67259c  (C:\Windows\System32\KERNEL32.DLL+0x18001259c)
 #7 0x7ff8bd42af37  (C:\Windows\SYSTEM32\ntdll.dll+0x18005af37)

Address 0x00d7fc0ff7d7 is located in stack of thread T0 at offset 343 in frame
 #0 0x7ff6092fa0d7 in main C:\Users\rysza\C\test\main.cpp:4

  This frame has 8 object(s):
    [32, 40) '_Stream.addr.i.i.i.i'
    [64, 65) '_Add_nl.addr.i.i.i.i'
    [80, 112) 'agg.tmp.i.i.i.i'
    [144, 176) 'agg.tmp15.i.i.i.i'
    [208, 224) 'agg.tmp.i.i.i'
    [240, 264) 'ref.tmp.i.i.i'
    [304, 320) 'agg.tmp5.i.i.i'
    [336, 343) 'text' (line 5) <== Memory access at offset 343 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp, SEH and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34604\include\__msvc_string_view.hpp:394 in std::_Narrow_char_traits<char,int>::length
Shadow bytes around the buggy address:
  0x00d7fc0ff500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff680: f1 f1 f1 f1 f8 f2 f2 f2 f8 f2 f8 f8 f8 f8 f2 f2
 0x00d7fc0ff700: f2 f2 f8 f8 f8 f8 f2 f2 f2 f2 f8 f8 f2 f2 f8 f8
=>0x00d7fc0ff780: f8 f2 f2 f2 f2 f2 f8 f8 f2 f2[07]f3 f3 f3 f3 f3
 0x00d7fc0ff800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ff980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 0x00d7fc0ffa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable: 00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone: fa
  Freed heap region:       fd
  Stack left redzone:      f1
 Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone: f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone: bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==30500==ABORTING
```
However is the array is declared in global namespace as such:
```
#include <print>
#include <string_view>

const char text[] = {
#embed "text.txt"
};

int main(void) {
  std::string_view sv(text);
  std::println("{}", sv);
 return 0;
}
```
ASAN will not return an error. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWFFz4ybX_jXk5sx6EEiWfJELx0m6nW9320m27fTKgwDZdBFoANnx_vpvANmxs2mn3TfvTN-sZhPBw8NzDgfOEcx7tTFSXqPqBlW3V2wMW-uuH979YPlVa8Xh-p5pL8HIDQtqJ2GvwhaWj8tPsN9KA6NXZgOyb6WYwW-xhTvJQmxkBphz7ADtIQNEaoUgnwJ0SktEGmMDmFFrCNL1yrAgBSKLNIkyELYSPLeDBNull54pA91oeFDWADMChHKSB30Abo0PbuR5avDBKbNZ75TcI9Iw7e3U5IOTrEdkBYOzLWv1AWzYSgd59OikB-ZhL7WOSpiHzmpt9x7RJcJLNMfTg5eIUGW4HoUERFeDUyYgevdNx7mU3I2XyoRkDCLNzqpkM6pvEF5CNgT4lrnkqbwugOjthECEJm8CIiQCZuEpIELSWFTfIpppfBBRMV2eTQ9-h0iTWMliAp5wSb-OiiJbfRO5CImOiqOOcHAyjM4Azu8RdOmUHBpKa5C9CmnVsgNTnDhnHaJLeOlJevs__xytoLjCOP959_Dw00M0dymEk94_MqOC-iqTC3xg_Mu7duw66d7ZnXSdtnuIYZ3BgJ8wFnXHcdfVogYWYOCAn-qum-MFEUzIEtrhDCaFwOAvWmTRILx8uFvexi3k1VcJTWR6wR22TjIBn3FaYgBEKL6cioIycYtoaWAVA6ZaecdRtdJ6168Hxr-wjVwXi1kxq6bWd4Ozf0geULXith-Ulu6di29atXH40Rlrbvvemlea1soE6bgcgnV-pgxHdEkXRRSJCC2eFXas4DwrnKJ5_Yk5Z_fruI_WwTEVPKKr-IbIatqoCail2YTt0aafnd041sO90tKjavVRcWe97QL8qvzINDyGUSiLqhXBhKBqtbJ9PxoVDqha_bpC1eqztTqNfEyvRTkr6YyWc1yiajWdCqharde93_H12eacbYch2VdO9pG_sq9lXl0Mf7buhHnFdnoHJ8u_ofj3OKEg9OgF-ooXUhqYxP7ipYtTuYP_yqIWVK2C9DHOImzGE2HzHNjliZA28wWtI6EyO_tFrhPvbeaNXOu9dV-i_hibp4jf8TCZx1M477gPzIVxOCGe3-WTnGJ5poxGdFk3k13VKzLWa89dOAZ_VLP2cvtfVkSao6R5ltS0fF6TasGju5rJzb8pI2ISrFaPBx9kT-O6_9_dw6e7D5TMbj98QOQGPxUNxkUcGhNGJq2PpKIkrKP1n5D-_vj57mMiNUFoPRMx_U6MVRyXGWOCef14VB605bGAyPuE8S-5aphOtnjq2a7zMgAt02nWOdbLSSU-jzIs6u-LsjIrBPi8VT7zw5Z5aMC26SQkjU-pdHkMx-qGphRb4lQCkHr9mOqTWUwCM5X_IVI_4-dlxM-rI34pxNroP8c3OOKLgkwD2GYzC_3wKrYoE3lRzy_BRfUqnOAmwgkpX-O-hJZJBpkfoU52fwKlOImgBF-yVq9h6TxhSzphc21TxxjTykjIbqKrnI_ho-ytOwDjPEbQZUQcU7CHEFdvx5xirY4B8v7HT59jxk7tfSxoJTDoUl08WK9SXaw6ONjRxaoyHZ6jlx687SXw0QfbTyE5mr0yAnrJt8wonwpRv2cDtybVxdbBrot7PNuYdou2ZvNHP0To4937VPauELlB5AbkU8yOyhoPiCyZk4gswY_DYF0upRFePv7y8ePy4fd_Vof8a1IBXZT_SWKP9m-ZsHtoDyGW9s6ORqSytB03m8Ox2jruybNTJZVxS8D4Hz2R5ZykeQOS-VsomWclXXH2NNCR49Mc_z89sf0FSZ2VPA-5AF-2P_99rI3vzpkmOS-GXoxG1Q2uUXXbUTh7Xkhq3sI5zVss0-ItlCzeQgn7XiVnewW03EgTPzMbayT4sx4nBye9NCGmNjYMWnGWvsjTHjvLcNN5k87RpCe1_sxcUEzr0-Y79ReACWAKuARcAZ4Dzof9e8kG0LIL4KT4ak1Cdyz13TspBWwjwsmNsib25Z9OJMRjOnlfDs-I9DGRAb0S3_RPO2BCOLXZfsORA3JCsC5IN30jP09SnSFGLydUutnIoC7Xpz9o2zJ9YePivEMZFTOEyAf3RD7PPrXKWyMFtIc4xRkAuuzDlTWBKSPdKdM9C-R5tdJtDbf2izrzQPphGfGjCY5Nxcy5zLbNBI8s1tJBOsP0JUOXKi34EBeB6VipvfQjz8v5kHz8KoS3r31kL29-evj846cfXlwpvLd7uZMu1oXxsM83UcqDkFwzl6vETXarYb30A-MSmAc_8u2bXvV8_33O6Tbnry-M_u5Nzz-96vn7Nz3GhiOamXzJM4MrcU3Fgi7Ylbwuakrpoq5oebW9XiwW84q2ct4RUbeCCSyxWIiaCMnYvJtfqWuCSVkQXBVF0VR0tlgUZdtyUQo655VgqMSyZ0rPtN71M-s2V8r7UV4XRVM3iyvNWql9utEkxMg9pN5oYXV75a7T3UQ7bjwqsVY--GeaoIJOV6HRtogenb7ehjCk-oDcI3K_UWE7tjNue0Tu48Dp1-m2g9yn6Twi95Oe3TX5_wAAAP__-kIxBg">