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