1/* { dg-do compile } */
2/* { dg-options "-O -fdiagnostics-show-caret" } */
3
4/* This file is similar to diagnostic-test-expressions-1.c
5   (see the notes in that file); this file adds test
6   coverage for various Objective C constructs. */
7
8extern void __emit_expression_range (int dummy, ...);
9
10@protocol prot
11@end
12
13@interface tests <prot>
14- (int) func0;
15- (int) func1:(int)i;
16+ (int) func2;
17- (void) test_sending_messages;
18+ (void) test_class_dot_name;
19- (void) test_at_selector;
20- (void) test_at_protocol;
21- (void) test_at_encode:(int)i;
22@end
23
24@implementation tests
25- (int) func0
26{
27  return 42;
28}
29- (int) func1:(int)i
30{
31  return i * i;
32}
33+ (int) func2
34{
35  return 0;
36}
37- (void) test_sending_messages
38{
39  __emit_expression_range ( 0, [self func0] ); /* { dg-warning "range" } */
40/* { dg-begin-multiline-output "" }
41   __emit_expression_range ( 0, [self func0] );
42                                ~~~~~~~~~~~~
43   { dg-end-multiline-output "" } */
44  __emit_expression_range ( 0, [self func1:5] ); /* { dg-warning "range" } */
45/* { dg-begin-multiline-output "" }
46   __emit_expression_range ( 0, [self func1:5] );
47                                ~~~~~~~~~~~~~~
48   { dg-end-multiline-output "" } */
49}
50+ (void) test_class_dot_name
51{
52  __emit_expression_range ( 0, tests.func2 ); /* { dg-warning "range" } */
53/* { dg-begin-multiline-output "" }
54   __emit_expression_range ( 0, tests.func2 );
55                                ~~~~~~~~~~~
56   { dg-end-multiline-output "" } */
57}
58- (void) test_at_selector
59{
60  __emit_expression_range ( 0, @selector(func0) ); /* { dg-warning "range" } */
61/* { dg-begin-multiline-output "" }
62   __emit_expression_range ( 0, @selector(func0) );
63                                ^~~~~~~~~~~~~~~~
64   { dg-end-multiline-output "" } */
65}
66- (void) test_at_protocol
67{
68  __emit_expression_range ( 0, @protocol(prot) ); /* { dg-warning "range" } */
69/* { dg-begin-multiline-output "" }
70   __emit_expression_range ( 0, @protocol(prot) );
71                                ~~~~~~~~~~~~~~~
72   { dg-end-multiline-output "" } */
73}
74- (void) test_at_encode:(int)i
75{
76  /* @encode() generates a STRING_CST which doesn't retain a location
77     after parsing, so we need to access it via compound expressions
78     that can't be folded away.  */
79
80  /* Verify start.  */
81  __emit_expression_range ( 0, @encode(int) + i ); /* { dg-warning "range" } */
82/* { dg-begin-multiline-output "" }
83   __emit_expression_range ( 0, @encode(int) + i );
84                                ~~~~~~~~~~~~~^~~
85   { dg-end-multiline-output "" } */
86
87  /* Verify finish.  */
88  __emit_expression_range ( 0, i + @encode(int) ); /* { dg-warning "range" } */
89/* { dg-begin-multiline-output "" }
90   __emit_expression_range ( 0, i + @encode(int) );
91                                ~~^~~~~~~~~~~~~~
92   { dg-end-multiline-output "" } */
93}
94@end
95