(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
memset-inline-10.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target arm_thumb2_ok } */
       3  /* { dg-options "-march=armv7-a -mfloat-abi=hard -mfpu=neon -O2" } */
       4  /* { dg-skip-if "need SIMD instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
       5  /* { dg-skip-if "need SIMD instructions" { *-*-* } { "-mfpu=vfp*" } { "" } } */
       6  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
       7  
       8  #define BUF 100
       9  long a[BUF];
      10  
      11  typedef unsigned int size_t;
      12  typedef unsigned int wchar_t;
      13  void *memset (void *s, int c, size_t n);
      14  struct printf_info
      15  {
      16    int prec;
      17    int width;
      18    wchar_t spec;
      19    unsigned int is_long_double:1;
      20    unsigned int is_short:1;
      21    unsigned int is_long:1;
      22    unsigned int alt:1;
      23    unsigned int space:1;
      24    unsigned int left:1;
      25    unsigned int showsign:1;
      26    unsigned int group:1;
      27    unsigned int extra:1;
      28    unsigned int is_char:1;
      29    unsigned int wide:1;
      30    unsigned int i18n:1;
      31    unsigned int __pad:4;
      32    unsigned short int user;
      33    wchar_t pad;
      34  };
      35  
      36  void bar (int *alt, int *space, int *left, int *showsign,
      37  	  int *group,
      38  	  int *is_long_double,
      39  	  int *is_short,
      40  	  int *is_long,
      41  	  int *width,
      42  	  int *prec,
      43  	  int *use_outdigits,
      44  	  unsigned int *pad,
      45  	  wchar_t *spec);
      46  void __printf_fp (char *s, struct printf_info *pinfo);
      47  int foo(char *s)
      48  {
      49    int alt = 0;
      50    int space = 0;
      51    int left = 0;
      52    int showsign = 0;
      53    int group = 0;
      54    int is_long_double = 0;
      55    int is_short = 0;
      56    int is_long = 0;
      57    int width = 0;
      58    int prec = -1;
      59    int use_outdigits = 0;
      60    unsigned int pad = L' ';
      61    wchar_t spec;
      62  
      63    bar (&alt, &space, &left, &showsign, &group, &is_long_double,
      64         &is_short, &is_long, &width, &prec, &use_outdigits, &pad, &spec);
      65  
      66    a[1] = a[0] + a[2] + a[3] + a[4] + a[5] + a[6];
      67    a[2] = a[1] + a[3] + a[5] + a[5] + a[6] + a[7];
      68    a[3] = a[2] + a[5] + a[7] + a[6] + a[7] + a[8];
      69    a[4] = a[3] + a[7] + a[11] + a[7] + a[8] + a[9];
      70    a[5] = a[5] + a[11] + a[13] + a[8] + a[9] + a[10];
      71    a[6] = a[7] + a[13] + a[17] + a[9] + a[10] + a[11];
      72    a[7] = a[11] + a[17] + a[19] + a[10] + a[11] + a[12];
      73    a[8] = a[17] + a[19] + a[23] + a[29] + a[31] + a[37];
      74  
      75    {
      76      struct printf_info info;
      77      memset (&info, 0, sizeof (struct printf_info));
      78      info.prec = prec;
      79      info.width = width;
      80      info.spec = spec;
      81      info.is_long_double = is_long_double;
      82      info.is_short = is_short;
      83      info.is_long = is_long;
      84      info.alt = alt;
      85      info.space = space;
      86      info.left = left;
      87      info.showsign = showsign;
      88      info.group = group;
      89      info.pad = pad;
      90      info.extra = 0;
      91      info.i18n = use_outdigits;
      92      info.wide = sizeof (wchar_t) != 1;
      93  
      94      __printf_fp (s, &info);
      95    }
      96  
      97    return 0;
      98  }
      99