summaryrefslogtreecommitdiffstats
path: root/config.tests/no_direct_extern_access
diff options
context:
space:
mode:
Diffstat (limited to 'config.tests/no_direct_extern_access')
-rw-r--r--config.tests/no_direct_extern_access/CMakeLists.txt14
-rw-r--r--config.tests/no_direct_extern_access/lib.cpp11
-rw-r--r--config.tests/no_direct_extern_access/lib.h17
-rw-r--r--config.tests/no_direct_extern_access/main.cpp20
-rw-r--r--config.tests/no_direct_extern_access/other.cpp8
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()
+{
+}