[PATCH] D123627: Correctly diagnose prototype redeclaration errors in C

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 9 08:05:50 PDT 2022


aaron.ballman added a comment.

In D123627#3707789 <https://reviews.llvm.org/D123627#3707789>, @aaron.ballman wrote:

> In D123627#3707635 <https://reviews.llvm.org/D123627#3707635>, @efriedma wrote:
>
>> If the declaration we're redeclaring is a builtin, should the diagnostic be in the "-Wincompatible-library-redeclaration" warning group?  With this patch, we treat redefinitions of builtins without a prototype differently from redefinitions with a prototype, for example:
>>
>>   void acos() {} // error
>>   void acos(void) {} // warning
>>
>> Just ran into some code in Android which is using the first form.
>
> Er, I keep going back and forth on it. My initial inclination is that this is closing a hole where we would incorrectly decide that these function signatures are compatible enough to merge together when that's not the case, so an error is appropriate. But the same can be said for redeclaring a builtin with an incorrect prototype rather than declaring it without any prototype. Given that these builtins are declared for the user automagically, I think I come down on this being a case we'd rather warn instead of err. It'd be weird to allow the user to define `void printf(void) {}` but not `void printf();` (except in C2x mode).
>
> If we make a change here, I think it'd be good to get it done for Clang 15. I'm not certain I've got the bandwidth to make this change in that timeframe though (I can hopefully start on this sometime this week, but I have prior commitments with deadlines that take priority).

I filed https://reviews.llvm.org/D131499 for this.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123627/new/

https://reviews.llvm.org/D123627



More information about the cfe-commits mailing list