dexonsmith added inline comments.
================ Comment at: clang/test/Sema/warn-strict-prototypes.m:20 + // know it's a block when diagnosing. + void (^block2)(void) = ^void() { // expected-warning {{a function declaration without a prototype is deprecated in all versions of C}} }; ---------------- efriedma wrote: > dexonsmith wrote: > > dexonsmith wrote: > > > This is a definition, so the compiler knows that there are no parameters. > > > Why would we warn here? Reading > > > https://discourse.llvm.org/t/rfc-enabling-wstrict-prototypes-by-default-in-c/60521/18 > > > it looks to me like an example of what @rnk was referring to, about > > > churning code to add `(void)` and then return back to `()` later. > > > > > > (cc: @steven_wu and @rjmccall as well) > > Specifically, `^void() { /* anything */}` is the definition of a block with > > zero parameters. Maybe pedantically it's lacking a prototype, but the > > compiler knows (since this is the definition) how many parameters there are. > > > > (Same goes for `void() { /* anything */ }` at global scope; is that > > triggering `-Wstrict-prototypes` now too?) > To be clear, you're asking specifically about the following two cases where > the behavior with -Wstrict-prototypes changed, right? I don't think this was > really discussed in the RFC. > > ``` > // Block > void (^f1)(void) = ^(){}; > > // Function definition > void f(void); > void f(){} > ``` > > Note that the behavior of the following did not change: > > ``` > void (^f1)(void) = ^{}; // no warning > void f2(){} // warning since clang 11. > ``` Right, specifically those two cases that changed. Thanks for clarifying. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122895/new/ https://reviews.llvm.org/D122895 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits