(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr69554-1.c
       1  /* { dg-options "-fdiagnostics-show-caret" } */
       2  
       3  /* Various versions of the same C error, with a variety of line spacing,
       4     and of columns, to exercise the line-span handling in
       5     diagnostic-show-locus.c (PR other/69554).  */
       6  
       7  /* All on one line.  */
       8  
       9  int test_1 (const char *p, const char *q)
      10  {
      11    return (p + 1) + (q + 1); /* { dg-error "invalid operands" } */
      12  /* { dg-begin-multiline-output "" }
      13     return (p + 1) + (q + 1);
      14            ~~~~~~~ ^ ~~~~~~~
      15               |         |
      16               |         const char *
      17               const char *
      18     { dg-end-multiline-output "" } */
      19  }
      20  
      21  /* On separate lines, but without intervening lines.
      22     This can be printed as a single span of lines.  */
      23  
      24  int test_2 (const char *p, const char *q)
      25  {
      26    return (p + 1)
      27             +  /* { dg-error "invalid operands" } */
      28              (q + 1);
      29  /* { dg-begin-multiline-output "" }
      30     return (p + 1)
      31            ~~~~~~~
      32               |
      33               const char *
      34              +
      35              ^
      36               (q + 1);
      37               ~~~~~~~
      38                  |
      39                  const char *
      40     { dg-end-multiline-output "" } */
      41  }
      42  
      43  /* On separate lines, with an intervening line between lines 1 and 2.
      44     This is printed as 2 "spans" of lines, broken up by the intervening
      45     line.  */
      46  
      47  int test_3 (const char *p, const char *q)
      48  {
      49    return (p + 1) /* { dg-locus "10" } */
      50  
      51             +  /* { dg-error "invalid operands" } */
      52               (q + 1);
      53  /* { dg-locus "12" "" { target *-*-* } "51" } */
      54  /* { dg-begin-multiline-output "" }
      55     return (p + 1)
      56            ~~~~~~~
      57               |
      58               const char *
      59     { dg-end-multiline-output "" } */
      60  /* { dg-begin-multiline-output "" }
      61              +
      62              ^
      63                (q + 1);
      64                ~~~~~~~
      65                   |
      66                   const char *
      67     { dg-end-multiline-output "" } */
      68  }
      69  
      70  /* As above, but the intervening line is between lines 2 and 3,
      71     so that the 2 spans are grouped the other way.  */
      72  
      73  int test_4 (const char *p, const char *q)
      74  {
      75    return (p + 1)
      76             +  /* { dg-error "invalid operands" } */
      77  
      78               (q + 1); /* { dg-locus "14" } */
      79  /* { dg-begin-multiline-output "" }
      80     return (p + 1)
      81            ~~~~~~~
      82               |
      83               const char *
      84              +
      85              ^
      86     { dg-end-multiline-output "" } */
      87  /* { dg-begin-multiline-output "" }
      88                (q + 1);
      89                ~~~~~~~
      90                   |
      91                   const char *
      92     { dg-end-multiline-output "" } */
      93  }
      94  
      95  /* On separate lines, with intervening lines.
      96     This is printed as 3 "spans" of lines, each span being an
      97     individual line.  */
      98  
      99  int test_5 (const char *p, const char *q)
     100  {
     101    return (p + 1) /* { dg-locus "10" } */
     102  
     103             +  /* { dg-error "invalid operands" } */
     104  
     105               (q + 1); /* { dg-locus "14" } */
     106  /* { dg-locus "12" "" { target *-*-* } "103" } */
     107  /* { dg-begin-multiline-output "" }
     108     return (p + 1)
     109            ~~~~~~~
     110               |
     111               const char *
     112     { dg-end-multiline-output "" } */
     113  /* { dg-begin-multiline-output "" }
     114              +
     115              ^
     116     { dg-end-multiline-output "" } */
     117  /* { dg-begin-multiline-output "" }
     118                (q + 1);
     119                ~~~~~~~
     120                   |
     121                   const char *
     122     { dg-end-multiline-output "" } */
     123  }
     124  
     125  /* On separate lines, with numerous intervening lines.
     126     This is printed as 3 "spans" of lines, each span being an
     127     individual line.  */
     128  
     129  int test_6 (const char *p, const char *q)
     130  {
     131    return (p + 1) /* { dg-locus "10" } */
     132  	  /* Lorem ipsum dolor sit amet, consectetur adipiscing elit.
     133  	     Maecenas nisl sapien, rutrum non euismod et, rutrum ac felis.
     134  	     Morbi nec nisi ipsum. Quisque pulvinar ante nec urna rhoncus,
     135  	     a cursus nisi commodo. Praesent euismod neque lectus, at
     136  	     dapibus ipsum gravida in. Pellentesque tempor massa eu viverra
     137  	     feugiat. Proin eleifend pulvinar urna, ut dapibus metus vehicula
     138  	     ac. Suspendisse rutrum finibus quam, ac dignissim diam blandit
     139  	     maximus. In blandit viverra pulvinar. Praesent vel tellus
     140  	     elementum, placerat lacus quis, ornare lectus. Donec ac
     141  	     eleifend nulla, sit amet condimentum risus. Vestibulum aliquam
     142  	     maximus ante non pellentesque. Praesent mollis ante in risus
     143  	     feugiat hendrerit. Praesent feugiat maximus urna nec blandit. */
     144             +  /* { dg-error "invalid operands" } */
     145  	  /* Vestibulum ac nunc eget enim tempor tristique. Suspendisse
     146  	     potenti. Nam et sollicitudin enim. Morbi sed tincidunt lectus.
     147  	     Sed facilisis velit at ante maximus feugiat. Sed vestibulum mi
     148  	     id leo tempor, sed ullamcorper sapien efficitur. Vestibulum purus
     149  	     lacus, dignissim non magna at, tincidunt luctus nisl. Cum sociis
     150  	     natoque penatibus et magnis dis parturient montes, nascetur
     151  	     ridiculus mus. Donec elit elit, laoreet a dolor quis, eleifend
     152  	     dapibus metus. Proin lectus turpis, eleifend nec pharetra eu,
     153  	     fermentum in lacus. Morbi sit amet mauris orci. Nam sagittis,
     154  	     nibh vel fermentum dictum, purus ex hendrerit odio, feugiat
     155  	     fringilla sapien elit vitae nisl. Fusce mattis commodo risus
     156  	     nec convallis. */
     157               (q + 1); /* { dg-locus "14" } */
     158  /* { dg-locus "12" "" { target *-*-* } "144" } */
     159  /* { dg-begin-multiline-output "" }
     160     return (p + 1)
     161            ~~~~~~~
     162               |
     163               const char *
     164     { dg-end-multiline-output "" } */
     165  /* { dg-begin-multiline-output "" }
     166              +
     167              ^
     168     { dg-end-multiline-output "" } */
     169  /* { dg-begin-multiline-output "" }
     170                (q + 1);
     171                ~~~~~~~
     172                   |
     173                   const char *
     174     { dg-end-multiline-output "" } */
     175  }