> On 27 Nov 2017, at 17:25, Tom Sheffler <[email protected]> wrote: > > I have the following code > > [mutarray enumerateObjectsWithOptions:NSEnumerationReverse > usingBlock:^(NSObject *o, NSUInteger idx, BOOL *stop) { > ...}]; > > This compiles and runs fine on one installation of gnustep on Ubuntu16, but > on a different installation, I get the following runtime error: > > Calling [GSMutableArray -enumerateObjectsWithOptions:usingBlock:] with > incorrect signature. Method has v32@0:8Q16^{?=^vii^?}24, selector has > v32@0:8Q16@?24 > > I believe my failing installation has an older version of gnustep-base. Both > use clang 3.8.0-2ubuntu4. Both installations of gnustep are from git repos. > I believe the failing one is an older installation, so I am not very > concerned about it. But I am wary. > > Has anyone else seen this? I tried modifying the block in a number of ways, > and couldn’t find an incantation that worked.
It looks as if the caller knows that this is a block (encoding: @?), but the callee is not block aware. If GNUstep is compiled by a compiler without blocks support, then it falls back to declaring the methods taking a pointer to a block structure and calling them by manually dereferencing the field that contains the invoke function. There’s nothing to worry about here, unless you want to override the enumerateObjectsWithOptions:usingBlock: method in a subclass, at which point you’ll have some surprising behaviour! Recompiling GNUstep-base with clang (possibly including rerunning configure if this is a configure-time check) should make this go away. David _______________________________________________ Discuss-gnustep mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnustep
