The exact failure mode is different depending on whether ld.bfd or ld.gold is used. In both cases, however, the core issue seems to be that implicit destructor symbols cannot be found.
==== ld.bfd ===
Build error for mir_acceptance_tests:
../libmir-test-assist.a(fake_display.cpp.o): In function `mir::test::doubles::NullDisplaySyncGroup::NullDisplaySyncGroup()':
/root/mir/include/test/mir/test/doubles/null_display_sync_group.h:68: undefined reference to `vtable for mir::test::doubles::NullDisplaySyncGroup'
../libmir-test-assist.a(fake_display.cpp.o): In function `mir::test::doubles::NullDisplayBuffer::NullDisplayBuffer()':
/root/mir/include/test/mir/test/doubles/null_display_buffer.h:31: undefined reference to `vtable for mir::test::doubles::NullDisplayBuffer'
../libmir-test-assist.a(fake_display.cpp.o): In function `mir::test::doubles::NullDisplaySyncGroup::NullDisplaySyncGroup()':
/root/mir/include/test/mir/test/doubles/null_display_sync_group.h:68: undefined reference to `vtable for mir::test::doubles::NullDisplaySyncGroup'
../libmir-test-assist.a(fake_display.cpp.o): In function `mir::test::doubles::NullDisplayBuffer::NullDisplayBuffer()':
/root/mir/include/test/mir/test/doubles/null_display_buffer.h:31: undefined reference to `vtable for mir::test::doubles::NullDisplayBuffer'
collect2: error: ld returned 1 exit status
tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/build.make:1450: recipe for target 'bin/mir_acceptance_tests.bin' failed
make[2]: *** [bin/mir_acceptance_tests.bin] Error 1
CMakeFiles/Makefile2:9407: recipe for target 'tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/all' failed
make[1]: *** [tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/all] Error 2
Build error for mir_unit_tests:
../mir_test_framework/libmir-test-framework-static.a(stub_session.cpp.o): In function `_GLOBAL__sub_I_stub_session.cpp':
/root/mir/tests/mir_test_framework/stub_session.cpp:161: undefined reference to `mir::test::doubles::StubSession::~StubSession()'
../mir_test_framework/libmir-test-framework-static.a(stub_session.cpp.o):(.data.rel.ro._ZTVN3mir4test7doubles11StubSessionE[_ZTVN3mir4test7doubles11StubSessionE]+0x10): undefined reference to `mir::test::doubles::StubSession::~StubSession()'
../mir_test_framework/libmir-test-framework-static.a(stub_session.cpp.o):(.data.rel.ro._ZTVN3mir4test7doubles11StubSessionE[_ZTVN3mir4test7doubles11StubSessionE]+0x18): undefined reference to `mir::test::doubles::StubSession::~StubSession()'
../mir_test_framework/libmir-test-framework-static.a(stub_session.cpp.o):(.debug_info+0xbb84): undefined reference to `mir::test::doubles::StubSession::~StubSession()'
../mir_test_framework/libmir-test-framework-static.a(testing_server_options.cpp.o): In function `mir::ServerConfiguration::ServerConfiguration()':
/root/mir/src/include/server/mir/server_configuration.h:89: undefined reference to `vtable for mir::ServerConfiguration'
/root/mir/src/include/server/mir/server_configuration.h:89: undefined reference to `vtable for mir::ServerConfiguration'
../mir_test_framework/libmir-test-framework-static.a(stubbed_server_configuration.cpp.o): In function `mir::ServerConfiguration::ServerConfiguration()':
/root/mir/src/include/server/mir/server_configuration.h:89: undefined reference to `vtable for mir::ServerConfiguration'
collect2: error: ld returned 1 exit status
tests/unit-tests/CMakeFiles/mir_unit_tests.dir/build.make:4588: recipe for target 'bin/mir_unit_tests.bin' failed
make[2]: *** [bin/mir_unit_tests.bin] Error 1
CMakeFiles/Makefile2:10841: recipe for target 'tests/unit-tests/CMakeFiles/mir_unit_tests.dir/all' failed
make[1]: *** [tests/unit-tests/CMakeFiles/mir_unit_tests.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
=== ld.gold ===
No build errors, but we get segfaults when running the mir_unit_tests during the destruction of StubSession objects.
Marked as 'Critical' since this bug blocks all yakkety landings.