diff options
author | Sylvain Audi <sylvain.audi@ubisoft.com> | 2022-12-15 10:56:47 -0500 |
---|---|---|
committer | Sylvain Audi <sylvain.audi@ubisoft.com> | 2022-12-21 16:13:46 -0500 |
commit | 84038cf914f6a0060477ba35bafbff2fd0c49fe0 (patch) | |
tree | 6e3da2512d6c06b192545d466d93ab835ae9e1a6 /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | |
parent | b5415f301586b74f729bee20fcfb34066413dbb5 (diff) | |
download | llvm-84038cf914f6a0060477ba35bafbff2fd0c49fe0.zip llvm-84038cf914f6a0060477ba35bafbff2fd0c49fe0.tar.gz llvm-84038cf914f6a0060477ba35bafbff2fd0c49fe0.tar.bz2 |
[lld][COFF] Fix lld-link crash when several .obj files built with /Zi refer to a .pdb file that failed to load
This patch relaxes the constraints on the error message saved in PDBInputFile when failing to load a pdb file.
Storing an `Error` member infers that it must be accessed exactly once, which doesn't fit in several scenarios:
- If an invalid PDB file is provided as input file but never used, a loading error is created but never handled, causing an assert at shutdown.
- PDB file created using MSVC's `/Zi` option : The loading error message must be displayed once per obj file.
Also, the state of `PDBInputFile` was altered when reading (taking) the `Error` member, causing issues:
- accessing it (taking the `Error`) makes the object look valid whereas it's not properly initialized
- read vs write concurrency on a same `PDBInputFile` in the ghash parallel algorithm
The solution adopted here was to instead store an optional error string, and generate Error objects from it on demand.
Differential Revision: https://reviews.llvm.org/D140333
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
0 files changed, 0 insertions, 0 deletions