aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
diff options
context:
space:
mode:
authorjyu2-git <jennifer.yu@intel.com>2023-11-15 17:39:54 -0800
committerGitHub <noreply@github.com>2023-11-15 17:39:54 -0800
commit10cc3a8556a8ff9557890c96de162cb2c09669e2 (patch)
tree1e659f08ad00287a72e6132e9c608c822299fb35 /llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
parent8a40fcaf357851a7d572bc1a8c314ac277f7ec66 (diff)
downloadllvm-10cc3a8556a8ff9557890c96de162cb2c09669e2.zip
llvm-10cc3a8556a8ff9557890c96de162cb2c09669e2.tar.gz
llvm-10cc3a8556a8ff9557890c96de162cb2c09669e2.tar.bz2
[MS-ABI] skip generate comdat for vftable defined with internal alias. (#71748)
We got a error: `LLVM ERROR: Associative COMDAT symbol '??_7?$T@V<lambda_0>@@@@6B@' is not a key for its COMDAT` Current we create internal alias for vftable when lambd is used. For the test, IR generate: ``` $"??_7?$T@V<lambda_0>@@$0A@@@6b@" = comdat any @0 = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4?$T@V<lambda_0>@@$0A@@@6b@", ptr @"?c@b@@UEAAXXZ"] }, comdat($"??_7?$T@V<lambda_0>@@$0A@@@6b@") @"??_7?$T@V<lambda_0>@@$0A@@@6b@" = internal unnamed_addr alias ptr, getelementptr inbounds ({ [2 x ptr] }, ptr @0, i32 0, i32 0, i32 1) ``` According LLVM language reference manual section on COMDATs: There are some restrictions on the properties of the global object. It, or an alias to it, must have the same name as the COMDAT group when targeting COFF. The contents and size of this object may be used during link-time to determine which COMDAT groups get selected depending on the selection kind. Because the name of the object must match the name of the COMDAT group, the linkage of the global object must not be local; local symbols can get renamed if a collision occurs in the symbol table. So one way to fix this is to not create comdat for the alias. @0 = private unnamed_addr constant { [2 x ptr] } { [2 x ptr] [ptr @"??_R4?$T@V<lambda_0>@@@@6B@", ptr @"?c@?$T@V<lambda_0>@@@@UEAAXXZ"] }
Diffstat (limited to 'llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions