[clang] [Clang][ARM] support arm target attribute, and warning for bad typo (PR #74812)

David Spickett via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 14 03:48:56 PST 2023


DavidSpickett wrote:

Not so sure about that:
```
LINK: command "C:\BuildTools\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\link.exe /nologo tools\clang\tools\clang-format\CMakeFiles\clang-format.dir\ClangFormat.cpp.obj tools\clang\tools\clang-format\CMakeFiles\clang-format.dir\C_\ws\src\llvm\resources\windows_version_resource.rc.res /out:bin\clang-format.exe /implib:lib\clang-format.lib /pdb:bin\clang-format.pdb /version:0.0 /machine:x64 /STACK:10000000 /INCREMENTAL:NO /subsystem:console lib\LLVMSupport.lib lib\clangBasic.lib lib\clangFormat.lib lib\clangRewrite.lib lib\clangToolingCore.lib lib\clangToolingInclusions.lib lib\clangToolingCore.lib lib\clangRewrite.lib lib\clangLex.lib lib\clangBasic.lib lib\LLVMFrontendOpenMP.lib lib\LLVMScalarOpts.lib lib\LLVMAggressiveInstCombine.lib lib\LLVMInstCombine.lib lib\LLVMFrontendOffloading.lib lib\LLVMTransformUtils.lib lib\LLVMAnalysis.lib lib\LLVMProfileData.lib lib\LLVMSymbolize.lib lib\LLVMDebugInfoPDB.lib C:\BuildTools\DIA SDK\lib\amd64\diaguids.lib lib\LLVMDebugInfoMSF.lib lib\LLVMDebugInfoBTF.lib lib\LLVMDebugInfoDWARF.lib lib\LLVMObject.lib lib\LLVMIRReader.lib lib\LLVMBitReader.lib lib\LLVMAsmParser.lib lib\LLVMCore.lib lib\LLVMRemarks.lib lib\LLVMBitstreamReader.lib lib\LLVMMCParser.lib lib\LLVMMC.lib lib\LLVMDebugInfoCodeView.lib lib\LLVMTextAPI.lib lib\LLVMBinaryFormat.lib lib\LLVMTargetParser.lib lib\LLVMSupport.lib psapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib WS2_32.lib delayimp.lib -delayload:shell32.dll -delayload:ole32.dll lib\LLVMDemangle.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:bin\clang-format.exe.manifest" failed (exit code 1120) with the following output:
clangBasic.lib(ARM.cpp.obj) : error LNK2019: unresolved external symbol "private: void __cdecl clang::APValue::DestroyDataAndMakeUninit(void)" (?DestroyDataAndMakeUninit at APValue@clang@@AEAAXXZ) referenced in function "public: __cdecl clang::APValue::~APValue(void)" (??1APValue at clang@@QEAA at XZ)
bin\clang-format.exe : fatal error LNK1120: 1 unresolved externals
```

```
clangBasic.lib(ARM.cpp.obj) : error LNK2019: unresolved external symbol "private: void __cdecl clang::APValue::DestroyDataAndMakeUninit(void)"
```
Which is the file you're modifying.

I see that you have added:
```
#include "clang/AST/Attr.h"
```
`DestroyDataAndMakeUninit` is in `clang/lib/AST/APValue.cpp`, which is built into the library `clangAST`.

`clang/lib/Basic/Targets/ARM.cpp` is built into `clangBasic` which does not depend on `clangAST`, but does `target_link_libraries` for it. I'm not sure of the difference there, why do one or the other. (clang/lib/Basic/CMakeLists.txt)

(if you want to know what library a cpp file ends up in, look in the same folder for a CMakeLists.txt, that usually has the name, one folder up if not and so on)

So I guess that on Linux, `target_link_libraries` does what's required but on Windows it does not.

https://github.com/llvm/llvm-project/pull/74812


More information about the cfe-commits mailing list