[clang] [Clang][Sema] Refactor collection of multi-level template argument lists (PR #106585)
Martin Storsjö via cfe-commits
cfe-commits at lists.llvm.org
Sat Sep 21 13:21:57 PDT 2024
mstorsjo wrote:
This change broke building Qt.
A small standalone reproducer: https://martin.st/temp/qtgui-preproc2.cpp
To inspect:
```
$ clang -target armv7-w64-mingw32 -w -c qtgui-preproc2.cpp -o out.o -std=gnu++17
$ llvm-nm out.o | grep _ZN19QWindowSystemHelperIN22QWindowSystemInterface20AsynchronousDeliveryEE11handleEventIN29QWindowSystemInterfacePrivate10LeaveEventEJP7QWindowEEEbDpT0_
U _ZN19QWindowSystemHelperIN22QWindowSystemInterface20AsynchronousDeliveryEE11handleEventIN29QWindowSystemInterfacePrivate10LeaveEventEJP7QWindowEEEbDpT0_
```
This symbol is undefined, and linking later fails as this is undefined (but this object file should define it).
With Clang from before this commit, we get this result instead:
```
$ llvm-nm out.o | grep _ZN19QWindowSystemHelperIN22QWindowSystemInterface20AsynchronousDeliveryEE11handleEventIN29QWindowSystemInterfacePrivate10LeaveEventEJP7QWindowEEEbDpT0_
00000000 T _ZN19QWindowSystemHelperIN22QWindowSystemInterface20AsynchronousDeliveryEE11handleEventIN29QWindowSystemInterfacePrivate10LeaveEventEJP7QWindowEEEbDpT0_
```
A fullblown reproducer on Linux is also this:
```
$ git clone https://github.com/qt/qtbase
$ cd qtbase
$ git checkout v6.8.0-beta4
$ mkdir build
$ cd build
$ cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DINPUT_opengl=no
$ ninja
[1/342] Linking CXX shared library lib/libQt6Gui.so.6.8.0
FAILED: lib/libQt6Gui.so.6.8.0
[...]
/usr/bin/ld: src/gui/CMakeFiles/Gui.dir/kernel/qwindowsysteminterface.cpp.o: in
function `QWindowSystemInterface::handleEnterLeaveEvent(QWindow*, QWindow*, QPointF const&, QPointF const&)':
qwindowsysteminterface.cpp:(.text+0x4f6): undefined reference to `bool QWindowSystemHelper<QWindowSystemInterface::AsynchronousDelivery>::handleEvent<QWindowSystemInterfacePrivate::LeaveEvent, QWindow*>(QWindow*)'
```
I'll go ahead and revert this change to unbreak things.
https://github.com/llvm/llvm-project/pull/106585
More information about the cfe-commits
mailing list