diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-09-06 11:10:26 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-09-06 11:10:26 +0200 |
commit | 3581d5dbf0c6be20e837ea27092b38f5de23c93b (patch) | |
tree | cb6dca3083d740ac791bc9bf2cc47f6124352f4d /gcc | |
parent | 58565a2ec16925841c2a97aaa1ab8eff63bc6f3e (diff) | |
download | gcc-3581d5dbf0c6be20e837ea27092b38f5de23c93b.zip gcc-3581d5dbf0c6be20e837ea27092b38f5de23c93b.tar.gz gcc-3581d5dbf0c6be20e837ea27092b38f5de23c93b.tar.bz2 |
re PR middle-end/82095 (ICE in tree_nop_conversion at tree.c:11793 on ppc64le)
PR middle-end/82095
* varasm.c (categorize_decl_for_section): Use SECCAT_TBSS for TLS vars with
NULL DECL_INITIAL.
* gcc.dg/tls/pr82095.c: New test.
From-SVN: r251754
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tls/pr82095.c | 16 | ||||
-rw-r--r-- | gcc/varasm.c | 5 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6ba412..e35d6b3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-09-06 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/82095 + * varasm.c (categorize_decl_for_section): Use SECCAT_TBSS for TLS vars with + NULL DECL_INITIAL. + 2017-09-06 Richard Biener <rguenther@suse.de> * gimple-ssa-strength-reduction.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 667d1cb..2b16829 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-09-06 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/82095 + * gcc.dg/tls/pr82095.c: New test. + 2017-09-05 Jakub Jelinek <jakub@redhat.com> PR middle-end/81768 diff --git a/gcc/testsuite/gcc.dg/tls/pr82095.c b/gcc/testsuite/gcc.dg/tls/pr82095.c new file mode 100644 index 0000000..5713a3b --- /dev/null +++ b/gcc/testsuite/gcc.dg/tls/pr82095.c @@ -0,0 +1,16 @@ +/* PR middle-end/82095 */ +/* { dg-do compile } */ +/* { dg-options "-Og -fno-tree-ccp" } */ +/* { dg-require-effective-target tls } */ +/* { dg-add-options tls } */ + +static int b; +static __thread int c; + +void +foo (void) +{ + if (b) + if (c) + b = 1; +} diff --git a/gcc/varasm.c b/gcc/varasm.c index f2a12f0..6177eec 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6562,8 +6562,9 @@ categorize_decl_for_section (const_tree decl, int reloc) /* Note that this would be *just* SECCAT_BSS, except that there's no concept of a read-only thread-local-data section. */ if (ret == SECCAT_BSS - || (flag_zero_initialized_in_bss - && initializer_zerop (DECL_INITIAL (decl)))) + || DECL_INITIAL (decl) == NULL + || (flag_zero_initialized_in_bss + && initializer_zerop (DECL_INITIAL (decl)))) ret = SECCAT_TBSS; else ret = SECCAT_TDATA; |