llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.93k stars 11.53k forks source link

ASAN seems to break struct debug info on windows #53113

Open croepha opened 2 years ago

croepha commented 2 years ago

Here is a simple program:

struct S { float a,b,c; };
int main () {
    int nomralvar = 3;
    S structvar = {};
    structvar.a = 1;
    structvar.b = 2;
    structvar.c = 4;
    nomralvar = 6;
}

if you compile with clang-cl.exe -v /MD /fsanitize=address /Zi test.cpp /o build/test.debug.exe

and if you step through it with a debugger, like MSVC/devenv then you can only inspect the variable normalvar and not structvar

If you however compile with clang-cl.exe -v /MD /Zi test.cpp /o build/test.debug.exe (without ASAN) then you can inspect both normalvar and structvar

croepha commented 2 years ago

clang version 13.0.0 Target: x86_64-pc-windows-msvc Thread model: posix InstalledDir: C:\Program Files\LLVM\bin

Endilll commented 11 months ago

@croepha Do you still experience this with newer versions of Clang?

llvmbot commented 11 months ago

@llvm/issue-subscribers-debuginfo

Here is a simple program: ``` struct S { float a,b,c; }; int main () { int nomralvar = 3; S structvar = {}; structvar.a = 1; structvar.b = 2; structvar.c = 4; nomralvar = 6; } ``` if you compile with `clang-cl.exe -v /MD /fsanitize=address /Zi test.cpp /o build/test.debug.exe` and if you step through it with a debugger, like MSVC/devenv then you can only inspect the variable `normalvar` and not `structvar` If you however compile with `clang-cl.exe -v /MD /Zi test.cpp /o build/test.debug.exe` (without ASAN) then you can inspect both `normalvar` and `structvar`
croepha commented 11 months ago

Yes, I can repro

Note, that due to this issue: https://discourse.llvm.org/t/address-sanitizer-issues-on-windows/4991

I have to employ a workaround

>del bug.exe bug.obj
>c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin\clang-cl.exe -v /fsanitize=address /Zi bug.cpp /c /o bug.obj
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin
 (in-process)
 "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\bin\\clang-cl.exe" -cc1 -triple x86_64-pc-windows-msvc19.33.31630 -emit-obj -mrelax-all -mincremental-linker-compatible -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name bug.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -mllvm -x86-asm-syntax=intel -tune-cpu generic -D_MT -flto-visibility-public-std --dependent-lib=libcmt --dependent-lib=oldnames -stack-protector 2 -fms-volatile -fdiagnostics-format msvc -gno-column-info -gcodeview -debug-info-kind=constructor -v "-fcoverage-compilation-dir=c:\\projects\\hello-world\\cro-build-2023" -resource-dir "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17" -internal-isystem "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\ATLMFC\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22000.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\cppwinrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\ATLMFC\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22000.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\cppwinrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" -fdeprecated-macro "-fdebug-compilation-dir=c:\\projects\\hello-world\\cro-build-2023" -ferror-limit 19 -fmessage-length=120 -fsanitize=address "-fsanitize-system-ignorelist=c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17\\share\\asan_ignorelist.txt" -fno-sanitize-memory-param-retval -fsanitize-address-use-after-scope -fsanitize-address-globals-dead-stripping -fno-sanitize-address-use-odr-indicator -fno-assume-sane-operator-new -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.33.31630 -std=c++14 -fdelayed-template-parsing -fcolor-diagnostics -faddrsig "-object-file-name=c:\\projects\\hello-world\\cro-build-2023\\bug.obj" -o bug.obj -x c++ bug.cpp
clang -cc1 version 17.0.1 based upon LLVM 17.0.1 default target x86_64-pc-windows-msvc
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include"
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\ATLMFC\include"
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um"
#include "..." search starts here:
#include <...> search starts here:
 c:\Users\dave\Downloads\LLVM-17.0.1-win64\lib\clang\17\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\ATLMFC\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include
 C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt
 C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
End of search list.

>c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin\clang-cl.exe -v -fuse-ld=lld /Zi "%VCToolsInstallDir%\lib\x64\clang_rt.asan_cxx-x86_64.lib" "%VCToolsInstallDir%\lib\x64\clang_rt.asan-x86_64.lib" bug.obj /Fe:bug.exe
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin
 "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\bin\\lld-link" -out:bug.exe "-libpath:c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17\\lib\\windows" -nologo -debug "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\\\lib\\x64\\clang_rt.asan_cxx-x86_64.lib" "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\\\lib\\x64\\clang_rt.asan-x86_64.lib" bug.obj

image See, it says that structvar is undefined

Alternatively, without address sanitizer we get this:

>c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin\clang-cl.exe -v -fuse-ld=lld /Zi bug.cpp /o bug.exe
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: c:\Users\dave\Downloads\LLVM-17.0.1-win64\bin
 "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\bin\\clang-cl.exe" -cc1 -triple x86_64-pc-windows-msvc19.33.31630 -emit-obj -mrelax-all -mincremental-linker-compatible -dumpdir bug.exe- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name bug.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -mllvm -x86-asm-syntax=intel -tune-cpu generic -D_MT -flto-visibility-public-std --dependent-lib=libcmt --dependent-lib=oldnames -stack-protector 2 -fms-volatile -fdiagnostics-format msvc -gno-column-info -gcodeview -debug-info-kind=constructor -v "-fcoverage-compilation-dir=c:\\projects\\hello-world\\cro-build-2023" -resource-dir "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17" -internal-isystem "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\ATLMFC\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22000.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\cppwinrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.33.31629\\ATLMFC\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22000.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22000.0\\\\cppwinrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" -fdeprecated-macro "-fdebug-compilation-dir=c:\\projects\\hello-world\\cro-build-2023" -ferror-limit 19 -fmessage-length=120 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.33.31630 -std=c++14 -fdelayed-template-parsing -fcolor-diagnostics -faddrsig "-object-file-name=C:\\Users\\dave\\AppData\\Local\\Temp\\bug-937cdb.obj" -o "C:\\Users\\dave\\AppData\\Local\\Temp\\bug-937cdb.obj" -x c++ bug.cpp
clang -cc1 version 17.0.1 based upon LLVM 17.0.1 default target x86_64-pc-windows-msvc
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include"
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\ATLMFC\include"
ignoring duplicate directory "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um"
#include "..." search starts here:
#include <...> search starts here:
 c:\Users\dave\Downloads\LLVM-17.0.1-win64\lib\clang\17\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\ATLMFC\include
 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include
 C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt
 C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
End of search list.
 "c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\bin\\lld-link" -out:bug.exe "-libpath:c:\\Users\\dave\\Downloads\\LLVM-17.0.1-win64\\lib\\clang\\17\\lib\\windows" -nologo -debug "C:\\Users\\dave\\AppData\\Local\\Temp\\bug-937cdb.obj"

image

See, we can inspect structvar now