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