aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2020-10-07 19:41:45 +0100
committerIain Sandoe <iain@sandoe.co.uk>2020-10-11 17:13:35 +0100
commit04103ecbaa59ccacc977256ae02e2f63dfd90258 (patch)
tree52031c83616d4d50805f6d4e9f4b60c20ea4d0be
parentcc3014d80e1072c376687f6fcfa421953a58fdd1 (diff)
downloadgcc-04103ecbaa59ccacc977256ae02e2f63dfd90258.zip
gcc-04103ecbaa59ccacc977256ae02e2f63dfd90258.tar.gz
gcc-04103ecbaa59ccacc977256ae02e2f63dfd90258.tar.bz2
testsuite, Objective-c++ : Update diagnostic plugin test.
The @selector() and @protocol() operators produce var decls these do not work with the example plugin. Unfortunatetely, unlike the ObjC front end, it is not so easy to construct a substitute expression that works reliably. Where it does not work we xfail for now. gcc/testsuite/ChangeLog: * obj-c++.dg/plugin/diagnostic-test-expressions-1.mm: Adjust testcase to include expressions for @selector and @protocol. XFAIL where this is still not sufficient to obtain a disgnostic range.
-rw-r--r--gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm33
1 files changed, 23 insertions, 10 deletions
diff --git a/gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm b/gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm
index 609fe3d..988b290 100644
--- a/gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm
+++ b/gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm
@@ -1,10 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-O -fdiagnostics-show-caret" } */
+/* { dg-excess-errors "tree range 0:0-0:0" { target { *-*-darwin* } } } */
/* This file is similar to diagnostic-test-expressions-1.c
(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
@@ -17,7 +20,7 @@ extern void __emit_expression_range (int dummy, ...);
- (void) test_sending_messages;
+ (void) test_class_dot_name;
- (void) test_at_selector;
-- (void) test_at_protocol;
+- (void) test_at_protocol:(int)i;
- (void) test_at_encode:(int)i;
@end
@@ -49,27 +52,37 @@ extern void __emit_expression_range (int dummy, ...);
}
+ (void) test_class_dot_name
{
- __emit_expression_range ( 0, tests.func2 ); /* { dg-warning "range" } */
+ __emit_expression_range ( 0, tests.func2 ); /* { dg-warning "range" } */
/* { dg-begin-multiline-output "" }
__emit_expression_range ( 0, tests.func2 );
~~~~~~^~~~~
- { dg-end-multiline-output "" } */
+ { 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. This isn't reliable here,
+ unfortunately. */
+ SEL aSel;
+ __emit_expression_range ( 0, aSel = @selector(foo) ); /* { dg-warning "range" } */
/* { dg-begin-multiline-output "" }
- __emit_expression_range ( 0, @selector(func0) );
- ^~~~~~~~~~~~~~~~
- { dg-end-multiline-output "" } */
+ __emit_expression_range ( 0, aSel = @selector(foo) );
+ ~~~~~^~~~~~~~~~~~~~~~
+ { dg-end-multiline-output "" { xfail { *-*-darwin* } } } */
}
-- (void) test_at_protocol
+- (void) test_at_protocol:(int)i
{
- __emit_expression_range ( 0, @protocol(prot) ); /* { dg-warning "range" } */
+ /* As for @selector(), the NeXT runtime generates a a var decl for
+ @protocol(); Unfortunately, we can't so easily fabricate a mechanism to
+ handle this (C++ FE turns the assignment op into a NOP). */
+ __emit_expression_range ( 0, @protocol(prot) ); /* { dg-warning "range" "" { xfail { *-*-darwin* && lp64 } } } */
/* { dg-begin-multiline-output "" }
__emit_expression_range ( 0, @protocol(prot) );
^~~~~~~~~~~~~~~
- { dg-end-multiline-output "" } */
+ { dg-end-multiline-output "" { xfail { *-*-darwin* && lp64 } } } */
}
- (void) test_at_encode:(int)i
{