aboutsummaryrefslogtreecommitdiff
path: root/ar-lib
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2021-02-26 10:21:02 +0000
committerIain Sandoe <iain@sandoe.co.uk>2021-03-18 11:47:27 +0000
commit0cc218d42c241ed286cc5af9fb7d2e45386f7a24 (patch)
treec678573b7b4061649f125fcc6568d4b8827e6dcc /ar-lib
parent8f0c9d53ef3a9b8ba2579b53596cc2b7f5d8bf69 (diff)
downloadgcc-0cc218d42c241ed286cc5af9fb7d2e45386f7a24.zip
gcc-0cc218d42c241ed286cc5af9fb7d2e45386f7a24.tar.gz
gcc-0cc218d42c241ed286cc5af9fb7d2e45386f7a24.tar.bz2
Objective-C++ : Fix handling of unnamed message parms [PR49070].
When we are parsing an Objective-C++ message, a colon is a valid terminator for a assignment-expression. That is: [receiver meth:x:x:x:x]; Is a valid, if somewhat unreadable, construction; corresponding to a method declaration like: - (id) meth:(id)arg0 :(id)arg1 :(id)arg2 :(id)arg3; Where three of the message params have no selector name. If fact, although it might be unintentional, Objective-C/C++ can accept message selectors with all the parms unnamed (this applies to the clang implementation too, which is taken as the reference for the language). For regular C++, the pattern x:x is not valid in that position an an error is emitted with a fixit for the expected scope token. If we simply made that error conditional on !c_dialect_objc() that would regress Objective-C++ diagnostics for cases outside a message selector, so we add a state flag for this. gcc/cp/ChangeLog: PR objc++/49070 * parser.c (cp_debug_parser): Add Objective-C++ message state flag. (cp_parser_nested_name_specifier_opt): Allow colon to terminate an assignment-expression when parsing Objective- C++ messages. (cp_parser_objc_message_expression): Set and clear message parsing state on entry and exit. * parser.h (struct cp_parser): Add a context flag for Objective-C++ message state. gcc/testsuite/ChangeLog: PR objc++/49070 * obj-c++.dg/pr49070.mm: New test. * objc.dg/unnamed-parms.m: New test.
Diffstat (limited to 'ar-lib')
0 files changed, 0 insertions, 0 deletions