diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2020-10-30 19:06:58 +0000 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2020-11-01 20:21:41 +0000 |
commit | 7a2cc1e8438ee853900f20880ca8858c17486b10 (patch) | |
tree | 2785fa67b9e3e07a913c218f55e11e26bc220e27 | |
parent | e344ea07e4024316e1bc01f18bf7f187ad3aef89 (diff) | |
download | gcc-7a2cc1e8438ee853900f20880ca8858c17486b10.zip gcc-7a2cc1e8438ee853900f20880ca8858c17486b10.tar.gz gcc-7a2cc1e8438ee853900f20880ca8858c17486b10.tar.bz2 |
Objective-C/C++ : Improve '@' keyword locations.
When we are lexing tokens for Objective-C, we combine '@' tokens
with a following keyword (when that keyword is a valid Objective-C
one or, for Objective-C, one of the C++ keywords that can appear in
this position). The responsibility is passed on to the parser to
validate the resulting combination.
The combination of tokens was being done without applying the rule
to their locations - so that we get:
@property
^
instead of what the user might expect:
@property
^~~~~~~~~
This patch combines the source range of the keyword with that of the
'@' sign - which improves diagnostics.
gcc/c-family/ChangeLog:
* c-lex.c (c_lex_with_flags): When combining '@' with a
keyword for Objective-C, combine the location ranges too.
-rw-r--r-- | gcc/c-family/c-lex.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c index b1cef23..e81e16d 100644 --- a/gcc/c-family/c-lex.c +++ b/gcc/c-family/c-lex.c @@ -550,7 +550,11 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, returning a token of type CPP_AT_NAME and rid code RID_CLASS (not RID_AT_CLASS). The language parser needs to convert that to RID_AT_CLASS. + However, we've now spliced the '@' together with the + keyword that follows; Adjust the location so that we + get a source range covering the composite. */ + *loc = make_location (atloc, atloc, newloc); break; } /* FALLTHROUGH */ |