CMake: add one more test for no_direct_extern_access

Found while compiling qtdeclarative tests:

FAILED: qtdeclarative/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen
[...]
ld: qtdeclarative/tests/auto/qml/qmlcppcodegen/data/TestTypes/libcodegen_test_moduleplugin.a(codegen_test_moduleplugin_TestTypesPlugin.cpp.o): non-canonical reference to canonical protected function `_Z28qml_register_types_TestTypesv' in qtdeclarative/tests/auto/qml/qmlcppcodegen/data/libcodegen_test_module.a(codegen_test_module_qmltyperegistrations.cpp.o)
ld: failed to set dynamic section sizes: bad value
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

See https://sourceware.org/bugzilla/show_bug.cgi?id=29377

Pick-to: 6.4
Change-Id: I3859764fed084846bcb0fffd1702fe6da341a9e3
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Thiago Macieira 2022-07-18 11:01:18 -07:00
parent 396170d07b
commit 2221b25dac
3 changed files with 19 additions and 2 deletions

View File

@ -2,9 +2,10 @@ cmake_minimum_required(VERSION 3.16)
project(direct_extern_access LANGUAGES CXX) project(direct_extern_access LANGUAGES CXX)
# this is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 # this is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087
# and https://sourceware.org/bugzilla/show_bug.cgi?id=29377
add_library(no_extern_access_lib SHARED lib.cpp) add_library(no_extern_access_lib SHARED lib.cpp)
add_executable(no_extern_access_main main.cpp) add_executable(no_extern_access_main other.cpp main.cpp)
target_compile_options(no_extern_access_lib PRIVATE "-Werror") target_compile_options(no_extern_access_lib PRIVATE "-Werror")
target_compile_options(no_extern_access_lib PUBLIC "$<$<CXX_COMPILER_ID:GNU>:-mno-direct-extern-access>") target_compile_options(no_extern_access_lib PUBLIC "$<$<CXX_COMPILER_ID:GNU>:-mno-direct-extern-access>")

View File

@ -1,10 +1,18 @@
// Copyright (C) 2022 Intel Corporation. // Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 // This is combining the tests found in:
// https://sourceware.org/bugzilla/show_bug.cgi?id=29087
// https://sourceware.org/bugzilla/show_bug.cgi?id=29377
#include "lib.h" #include "lib.h"
extern void foo(); // other.cpp
void (*get_foo())()
{
return foo;
}
struct Local : S { }; struct Local : S { };
int main() int main()
{ {

View File

@ -0,0 +1,8 @@
// Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT
// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29377
__attribute__((visibility("protected"))) void foo()
{
}