AaronBallman wrote:

> > > > Oh, I see, you're suggesting we remove the `getStdNamespace` check from 
> > > > this PR. Yeah, I think that's reasonable.
> > > 
> > > 
> > > Yep, that is my suggestion, sorry I was insufficiently clear.
> > > > But I'd somewhat question whether this PR and warning really has 
> > > > anything to do with the attribute names being "reserved" at that point 
> > > > -- we're not checking whether they're reserved or not, and it really 
> > > > doesn't matter. Warning on a `#define` that clobbers the name of a 
> > > > standard attribute is just generally a good thing to do, regardless of 
> > > > whether you're using the standard library.
> > > 
> > > 
> > > I agree with this 100%. The link to the 'reserved by the standard' is I 
> > > think a good additional justification.
> > > I think the proposal, complaining about these as reserved, is a good 
> > > idea/good patch. BUT I think getting caught up in the "well, when is it 
> > > technically NOT UB" is a waste of time, given that the warning is a good 
> > > idea even without that justification.
> > 
> > 
> > I think the warning is justified even without a standard library header 
> > being included, but I also wonder if that means putting this under 
> > `-Wreserved-identifier` is the wrong home and maybe this is a 
> > `-Wattributes` warning group instead. We could reword the diagnostic to 
> > something along the lines of "macro name conflicts with the name of a 
> > %select{vendor attribute prefix|standard attribute|attribute name}0" and we 
> > warn on all three of these cases:
> > ```
> > #define msvc 12 // conflicts with [[msvc::no_unique_address]]
> > #define annotate 12 // conflicts with [[clang::annotate]]
> > #define nodiscard 12 // conflicts with [[nodiscard]]
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > WDYT?
> 
> First, I think this needs its OWN warning group, as I can see justification 
> for disabling just this.

Agreed, I didn't mean to imply otherwise, I was speaking about the top-level 
umbrella (sorry for the confusion).

> Second, I think that the 'standard' attribute interference is a level of 
> severity HIGHER than the others thanks to being in the standard (and thus, 
> perhaps, likely more to be used/interfered with).

I think the problem is the same regardless of whether the attribute is a 
standard attribute or a vendor attribute -- either way, redefining the meaning 
of something known to the implementation seems worth of letting the user know 
about.

> Third: DOES annotate conflict with attribute annotate? Isn't that a 
> function/would have to be a function macro?

Ah, good point, but the basic premise still stands.

> Fourth: I think the 'reserved name' has a level of gravitas/concreteness that 
> makes the diagnostic more meaningful/immediately obvious to folks. A 
> diagnostic of, "This name you chose for your macro might make this attribute 
> no workie" yields "Yeah, but i wont use that so I'm ok". A diagnostic of, 
> "This name is UB because the standard reserves it!" yields a level of 
> pause/consideration that we otherwise wouldn't get.

Yes, but the point is: these names aren't reserved but the pain can still 
happen. e.g., `cdecl` is not a reserved identifier, but re-defining its meaning 
can still break code in ways that could have better diagnostics: 
https://godbolt.org/z/vTfWPsYj9. Though, I suppose to reduce the chattiness, we 
could elect to diagnose when we see an attribute that is ill-formed due to the 
macro. e.g.,
```
#define cdecl 12
#define stdcall 100 // No warning, doesn't cause problems (yet)

void func() [[gnu::cdecl]]; // Expands to `[[gnu::12]] which is an error, so 
warn on the #define above
```
> SO I think the diagnostic being associated with it being reserved is 
> COMPLETELY valid/justifiable. I think "this is a bad idea, UB or not" is a 
> reason to not try at all to suppress this if we think you're not ACTUALLY 
> breaking the rule (by not including an StdLib header).

If we're only going to diagnose conflicts with standard attribute names, then I 
can squint enough to agree. But I think that's an arbitrary limitation; we all 
just agreed that this isn't about using a reserved identifier so much as about 
writing a macro which will conflict with uses of attributes of the same name.

https://github.com/llvm/llvm-project/pull/106036
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to