diff options
Diffstat (limited to 'config.tests/no_direct_extern_access')
-rw-r--r-- | config.tests/no_direct_extern_access/CMakeLists.txt | 14 | ||||
-rw-r--r-- | config.tests/no_direct_extern_access/lib.cpp | 11 | ||||
-rw-r--r-- | config.tests/no_direct_extern_access/lib.h | 17 | ||||
-rw-r--r-- | config.tests/no_direct_extern_access/main.cpp | 20 | ||||
-rw-r--r-- | config.tests/no_direct_extern_access/other.cpp | 8 |
5 files changed, 70 insertions, 0 deletions
diff --git a/config.tests/no_direct_extern_access/CMakeLists.txt b/config.tests/no_direct_extern_access/CMakeLists.txt new file mode 100644 index 0000000000..b4b881f1dc --- /dev/null +++ b/config.tests/no_direct_extern_access/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.16) +project(direct_extern_access LANGUAGES CXX) + +# 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_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 PUBLIC "$<$<CXX_COMPILER_ID:GNU>:-mno-direct-extern-access>") +target_compile_options(no_extern_access_lib PUBLIC "$<$<CXX_COMPILER_ID:Clang>:-fno-direct-access-external-data>") + +target_link_libraries(no_extern_access_main no_extern_access_lib) diff --git a/config.tests/no_direct_extern_access/lib.cpp b/config.tests/no_direct_extern_access/lib.cpp new file mode 100644 index 0000000000..cf3b18bb38 --- /dev/null +++ b/config.tests/no_direct_extern_access/lib.cpp @@ -0,0 +1,11 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: MIT + +// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 + +#define BUILD +#include "lib.h" + +void *S::ptr = nullptr; +S::~S() { } +void *S::f() { return ptr; } diff --git a/config.tests/no_direct_extern_access/lib.h b/config.tests/no_direct_extern_access/lib.h new file mode 100644 index 0000000000..1a9c3c5533 --- /dev/null +++ b/config.tests/no_direct_extern_access/lib.h @@ -0,0 +1,17 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: MIT + +// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087 + +#ifdef BUILD +# define LIB_API __attribute__((visibility("protected"))) +#else +# define LIB_API __attribute__((visibility("default"))) +#endif + +struct LIB_API S +{ + virtual ~S(); + virtual void *f(); + static void *ptr; +}; diff --git a/config.tests/no_direct_extern_access/main.cpp b/config.tests/no_direct_extern_access/main.cpp new file mode 100644 index 0000000000..541c8b4b33 --- /dev/null +++ b/config.tests/no_direct_extern_access/main.cpp @@ -0,0 +1,20 @@ +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: MIT + +// 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" + +extern void foo(); // other.cpp +void (*get_foo())() +{ + return foo; +} + +struct Local : S { }; +int main() +{ + Local l; +} diff --git a/config.tests/no_direct_extern_access/other.cpp b/config.tests/no_direct_extern_access/other.cpp new file mode 100644 index 0000000000..ff12b10930 --- /dev/null +++ b/config.tests/no_direct_extern_access/other.cpp @@ -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() +{ +} |