(root)/
glibc-2.38/
nptl/
tst-thread-setspecific.c
       1  /* Test to verify that passing a pointer to an uninitialized object
       2     to pthread_setspecific doesn't trigger bogus uninitialized warnings.
       3     Copyright (C) 2021-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #include <pthread.h>
      21  #include <stdlib.h>
      22  #include <libc-diag.h>
      23  
      24  /* Turn uninitialized warnings into errors to detect the problem.
      25     See BZ #27714.  */
      26  
      27  DIAG_PUSH_NEEDS_COMMENT;
      28  DIAG_IGNORE_NEEDS_COMMENT (6, "-Wmaybe-uninitialized");
      29  DIAG_IGNORE_NEEDS_COMMENT (6, "-Wuninitialized");
      30  
      31  static int
      32  do_test (void)
      33  {
      34    void *p = malloc (1);   /* Deliberately uninitialized.  */
      35    pthread_setspecific (pthread_self (), p);
      36  
      37    void *q = pthread_getspecific (pthread_self ());
      38  
      39    return p == q;
      40  }
      41  
      42  DIAG_POP_NEEDS_COMMENT;
      43  
      44  #include <support/test-driver.c>