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.
This commit is contained in:
parent
b292746ff7
commit
5505a9eab9
1 changed files with 19 additions and 6 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue