(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pubtypes-4.c
       1  /* { dg-do compile { target *-*-darwin* } } */
       2  /* { dg-options "-O0 -gdwarf-2 -dA" } */
       3  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
       4  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
       5  /* { dg-final { scan-assembler {long+[ \t]+0x184+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
       6  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
       7  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
       8  /* { dg-final { scan-assembler "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
       9  /* { dg-final { scan-assembler "\"enum_list_array\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
      10  /* { dg-final { scan-assembler "\"field_union\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
      11  
      12  #include <stdlib.h>
      13  #include <stdio.h>
      14  #include <string.h>
      15  
      16  struct used_struct 
      17  {
      18    int key;
      19    char *name;
      20    union field_union
      21    {
      22      char  u_c;
      23      int   u_i;
      24      long  u_l;
      25      double u_d;
      26    } u;
      27  };
      28  
      29  struct unused_struct
      30  {
      31    int key1;
      32    int f2;
      33    double f3;
      34    char *f4;
      35    struct unused_struct *next;
      36  };
      37  
      38  enum list_name_type {
      39    boy_name,
      40    girl_name,
      41    unknown
      42  };
      43  
      44  
      45  typedef enum list_name_type *enum_list_array;
      46  
      47  enum_list_array enum_list;
      48  
      49  void 
      50  foo (struct used_struct *list)
      51  {
      52    int b_count = 0;
      53    int g_count = 0;
      54    int i;
      55  
      56    enum_list = (enum_list_array) malloc (10 * sizeof (enum list_name_type));
      57  
      58    for (i = 0; i < 10; i++)
      59      {
      60        if (strncmp (list[i].name, "Alice", 5) == 0)
      61  	{
      62  	  enum_list[i] = girl_name;
      63  	  g_count++;
      64  	}
      65        else if (strncmp (list[i].name, "David", 5) == 0)
      66  	{
      67  	  enum_list[i] = boy_name;
      68  	  b_count++;
      69  	}
      70        else
      71  	enum_list[i] = unknown;
      72      }
      73  
      74  }
      75  
      76  int
      77  main (int argc, char **argv)
      78  {
      79    int i;
      80    struct used_struct *my_list;
      81  
      82    my_list = (struct used_struct *) malloc (10 * sizeof (struct used_struct));
      83    
      84    for (i = 0; i < 10; i++)
      85      {
      86        my_list[i].key = i;
      87        my_list[i].name = (char *) malloc (11);
      88        sprintf (my_list[i].name, "Alice_%d", i);
      89      }
      90  
      91    foo (my_list);
      92  
      93    for (i = 0; i < 10; i++)
      94      fprintf (stdout, "Key: %d, Name: %s\n", my_list[i].key, my_list[i].name);
      95    
      96    return 0;
      97  }