diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2020-10-07 09:12:36 +0100 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2020-10-11 15:55:02 +0100 |
commit | 5505a9eab9bc3b170fc9f22e8a7292464efe88f6 (patch) | |
tree | 7a107103ad8cf23fe3eff7246432d5a98503db5a /gcc/testsuite | |
parent | b292746ff7cfe708d3311ea41242c44ccbbe2693 (diff) | |
download | gcc-5505a9eab9bc3b170fc9f22e8a7292464efe88f6.zip gcc-5505a9eab9bc3b170fc9f22e8a7292464efe88f6.tar.gz gcc-5505a9eab9bc3b170fc9f22e8a7292464efe88f6.tar.bz2 |
testsuite, Objective-C : Fix two plugin diagnostics tests for Darwin.
The @selector and @protocol keywords produce a var decl without
useful location information. The current diagnostics plugin does not
look at VAR_DECLs (and it would not be helpful if it did in this
case, since a single decl is shared across all the users).
However, ee can, in this case, make expressions that produce useful
information.
gcc/testsuite/ChangeLog:
* objc.dg/plugin/diagnostic-test-expressions-1.m: Use assignment
expressions for @selector and @protocol to obtain a useful
diagnostic range.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m b/gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m index ed7aca3..23a9302 100644 --- a/gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m +++ b/gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m @@ -5,6 +5,8 @@ (see the notes in that file); this file adds test coverage for various Objective C constructs. */ +#include <objc/runtime.h> /* for SEL, Protocol */ + extern void __emit_expression_range (int dummy, ...); @protocol prot @@ -55,22 +57,33 @@ extern void __emit_expression_range (int dummy, ...); ~~~~~~~~~~~ { dg-end-multiline-output "" } */ } + - (void) test_at_selector { - __emit_expression_range ( 0, @selector(func0) ); /* { dg-warning "range" } */ + /* For the NeXT runtime, @selector() generates a a var decl which (a) isn't + handled by the plugin, and (b) if it was would not necessarily have the + right location (there is only one var decl uniqued to each selector + spelling, so the location would be that of the first occurrence). Use an + assignment expression to test the operation. */ + SEL aSel; + __emit_expression_range ( 0, aSel = @selector(foo) ); /* { dg-warning "range" } */ /* { dg-begin-multiline-output "" } - __emit_expression_range ( 0, @selector(func0) ); - ^~~~~~~~~~~~~~~~ + __emit_expression_range ( 0, aSel = @selector(foo) ); + ~~~~~^~~~~~~~~~~~~~~~ { dg-end-multiline-output "" } */ } - (void) test_at_protocol { - __emit_expression_range ( 0, @protocol(prot) ); /* { dg-warning "range" } */ + /* As for @selector(), the NeXT runtime generates a a var decl for + @protocol() handle this in a similar way. */ + Protocol *aProt; + __emit_expression_range ( 0, aProt = @protocol(prot) ); /* { dg-warning "range" "" } */ /* { dg-begin-multiline-output "" } - __emit_expression_range ( 0, @protocol(prot) ); - ~~~~~~~~~~~~~~~ + __emit_expression_range ( 0, aProt = @protocol(prot) ); + ~~~~~~^~~~~~~~~~~~~~~~~ { dg-end-multiline-output "" } */ } + - (void) test_at_encode:(int)i { /* @encode() generates a STRING_CST which doesn't retain a location |