public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [pushed] testsuite, Objective-C : Fix two plugin diagnostics tests for  Darwin.
@ 2020-10-11 15:09 Iain Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain Sandoe @ 2020-10-11 15:09 UTC (permalink / raw)
  To: GCC Patches

Hi

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, we can, in this case, make expressions that produce useful
information.

tested across the Darwin range, and on x86_64-linux
pushed to master
thanks
Iain

gcc/testsuite/ChangeLog:

	* objc.dg/plugin/diagnostic-test-expressions-1.m: Use assignment
	expressions for @selector and @protocol to obtain a useful
	diagnostic range.
---
 .../plugin/diagnostic-test-expressions-1.m    | 25 ++++++++++++++-----
 1 file 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 ed7aca39a28..23a93021e83 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
-- 
2.24.1


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-10-11 15:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-11 15:09 [pushed] testsuite, Objective-C : Fix two plugin diagnostics tests for Darwin Iain Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).