[cfe-dev] -Wheader-guard emits warning after #undef of guard macro

Richard Smith richard at metafoo.co.uk
Wed Jan 15 13:39:51 PST 2014


On Mon, Jan 13, 2014 at 9:58 PM, Prathamesh Kulkarni <
bilbotheelffriend at gmail.com> wrote:

> On Tue, Jan 14, 2014 at 1:57 AM, Richard Trieu <rtrieu at google.com> wrote:
> > Prathamesh,
> >
> > Can you tell me more about your use case?  Is this a common pattern you
> have
> > encountered?
> Um no, it's a contrived test case.
>

Is this a reduction of a real problem? (This seems like a somewhat
legitimate complaint either way -- a macro that gets undefined probably
wasn't an include guard -- but if this actually occurs in the wild, it
would make this a higher priority issue.)


> #ifndef Macro1
> #define Macro2
> Should warning be suppressed, if Macro2 gets undefined later in the
> same header ?
> eg:  (they are literally named Macro1 and Macro2)
> #ifndef Macro1
> #define Macro2
> ...
> #undef Macro2
> #endif
>
> Is it better to suppress the warning because it's equivalent to:
> #ifndef Macro1
> #endif
>
> >
> > The header guard warning triggers on files with the following format:
> >
> > // Start of file
> > #ifndef Macro1
> > #define Macro2
> > ...
> > #endif // matches the #ifndef on the first line.
> > // End of file
> >
> > and warns when Macro1 and Macro2 are close, but not exactly the same.
>  The
> > warning already ignores cases where Macro1 and Macro2 are very different
> > (edit distance is over half the length).  A similar exemption maybe be
> > warranted in this case too.
>
> Thanks for pointing that out. However that's not the issue.
> Could you please explain in short heuristics used by clang to decide
> when the two macros are
> "sufficiently" different ? Thanks ;)
>
> >
> > Richard
> >
> >
> > On Mon, Jan 13, 2014 at 3:06 AM, Prathamesh Kulkarni
> > <bilbotheelffriend at gmail.com> wrote:
> >>
> >> For the following test-case:
> >> #ifndef FOO
> >> #define FOO2
> >>
> >> #undef FOO2
> >> #endif
> >>
> >> -Wheader-guard emits warning:
> >> ./foo.h:4:9: warning: 'FOO' is used as a header guard here, followed
> >> by #define of a different macro [-Wheader-guard]
> >> #ifndef FOO
> >>         ^~~
> >> ./foo.h:5:9: note: 'FOO2' is defined here; did you mean 'FOO'?
> >> #define FOO2
> >>         ^~~~
> >>
> >> Is this appropriate or should it suppress warning in this case
> >> since it's equivalent to the following: ?
> >> #ifndef FOO
> >> #endif
> >>
> >> Thanks and Regards,
> >> Prathamesh
> >> _______________________________________________
> >> cfe-dev mailing list
> >> cfe-dev at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >
> >
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140115/edfd17c1/attachment.html>


More information about the cfe-dev mailing list