1 /* Copyright (C) 2003-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #include <stddef.h> 19 #include <stdlib.h> 20 21 static int i; 22 int bar; 23 24 static __thread void *foo [32 / sizeof (void *)] 25 __attribute__ ((tls_model ("initial-exec"), aligned (sizeof (void *)))) 26 = { &i, &bar }; 27 28 void test1(void)29test1 (void) 30 { 31 size_t s; 32 33 if (foo [0] != &i || foo [1] != &bar) 34 abort (); 35 36 foo [0] = NULL; 37 foo [1] = NULL; 38 for (s = 0; s < sizeof (foo) / sizeof (void *); ++s) 39 { 40 if (foo [s]) 41 abort (); 42 foo [s] = &foo[s]; 43 } 44 } 45 46 void test2(void)47test2 (void) 48 { 49 size_t s; 50 51 for (s = 0; s < sizeof (foo) / sizeof (void *); ++s) 52 { 53 if (foo [s] != &foo [s]) 54 abort (); 55 foo [s] = &foo [s ^ 1]; 56 } 57 } 58