https://gcc.gnu.org/g:9eab6c6f223808ceeebb55b5453c75782224cd9e

commit r16-3806-g9eab6c6f223808ceeebb55b5453c75782224cd9e
Author: H.J. Lu <[email protected]>
Date:   Mon Sep 8 15:10:02 2025 -0700

    testsuite: Add tests for PR c/107419 and PR c++/107393
    
    Both C and C++ frontends should set a tentative TLS model in grokvardecl
    and update TLS mode with the default TLS access model after a TLS variable
    has been fully processed if the default TLS access model is stronger.
    
            PR c/107419
            PR c++/107393
            * c-c++-common/tls-attr-common.c: New test.
            * c-c++-common/tls-attr-le-pic.c: Likewise.
            * c-c++-common/tls-attr-le-pie.c: Likewise.
    
    Signed-off-by: H.J. Lu <[email protected]>

Diff:
---
 gcc/testsuite/c-c++-common/tls-attr-common.c | 20 ++++++++++++++++++++
 gcc/testsuite/c-c++-common/tls-attr-le-pic.c | 15 +++++++++++++++
 gcc/testsuite/c-c++-common/tls-attr-le-pie.c | 15 +++++++++++++++
 3 files changed, 50 insertions(+)

diff --git a/gcc/testsuite/c-c++-common/tls-attr-common.c 
b/gcc/testsuite/c-c++-common/tls-attr-common.c
new file mode 100644
index 000000000000..55153bbbb8f5
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/tls-attr-common.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target pie } */
+/* { dg-require-effective-target tls } */
+/* { dg-options "-O2 -fdump-ipa-whole-program" } */
+/* Add -fPIE or -mno-direct-extern-access to disable direct access to
+   external symbol from executable.  */
+/* { dg-additional-options "-fPIE" { target { ! { i?86-*-* x86_64-*-* } } } } 
*/
+/* { dg-additional-options "-mno-direct-extern-access" { target { i?86-*-* 
x86_64-*-* } } } */
+
+__attribute__((common))
+__thread int i;
+
+int *
+foo (void)
+{
+  return &i;
+}
+
+/* tls_model should be tls-initial-exec due to common attribute.  */
+/* { dg-final { scan-ipa-dump "Varpool flags: tls-initial-exec" 
"whole-program" } } */
diff --git a/gcc/testsuite/c-c++-common/tls-attr-le-pic.c 
b/gcc/testsuite/c-c++-common/tls-attr-le-pic.c
new file mode 100644
index 000000000000..c02df6919f1a
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/tls-attr-le-pic.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
+/* { dg-require-effective-target tls } */
+/* { dg-options "-O2 -fpic -fdump-ipa-whole-program" } */
+
+__attribute__ ((tls_model ("local-exec"))) __thread int i;
+
+int *
+foo (void)
+{
+  return &i;
+}
+
+/* tls_model should be local-exec due to tls_model attribute.  */
+/* { dg-final { scan-ipa-dump "Varpool flags: tls-local-exec" "whole-program" 
} } */
diff --git a/gcc/testsuite/c-c++-common/tls-attr-le-pie.c 
b/gcc/testsuite/c-c++-common/tls-attr-le-pie.c
new file mode 100644
index 000000000000..b8ef7840d791
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/tls-attr-le-pie.c
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { tls && pie } } } */
+/* { dg-options "-O2 -fPIE -fdump-ipa-whole-program" } */
+
+extern const int afoo[3];
+
+__thread const int *pfoo __attribute__ ((tls_model ("initial-exec"))) = afoo;
+
+const int **
+ppfoo (void)
+{
+  return &pfoo;
+}
+
+/* tls_model should be local-exec due to -fPIE.  */
+/* { dg-final { scan-ipa-dump "Varpool flags: initialized tls-local-exec" 
"whole-program" } } */

Reply via email to