(root)/
glibc-2.38/
sysdeps/
x86/
tst-ldbl-nonnormal-printf.c
       1  /* Test printf with x86-specific non-normal long double value.
       2     Copyright (C) 2020-2023 Free Software Foundation, Inc.
       3  
       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 <stdio.h>
      21  #include <string.h>
      22  #include <support/check.h>
      23  
      24  /* Fill the stack with non-zero values.  This makes a crash in
      25     snprintf more likely.  */
      26  static void __attribute__ ((noinline, noclone))
      27  fill_stack (void)
      28  {
      29    char buffer[65536];
      30    memset (buffer, 0xc0, sizeof (buffer));
      31    asm ("" ::: "memory");
      32  }
      33  
      34  static int
      35  do_test (void)
      36  {
      37    fill_stack ();
      38  
      39    long double value;
      40    memcpy (&value, "\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04", 10);
      41  
      42    char buf[30];
      43    int ret = snprintf (buf, sizeof (buf), "%Lg", value);
      44    TEST_COMPARE (ret, strlen (buf));
      45    TEST_COMPARE_STRING (buf, "nan");
      46    return 0;
      47  }
      48  
      49  #include <support/test-driver.c>