rsmith added inline comments.
================
Comment at: clang/lib/Sema/SemaDecl.cpp:15752-15754
+ bool AnonymousEnumEligible = getLangOpts().MSVCCompat &&
+ (Kind == TTK_Enum) &&
+ Tag->getDeclName().isEmpty();
----------------
shivanshu3 wrote:
> shivanshu3 wrote:
> > rsmith wrote:
> > > In the anonymous union case, we also need to check for qualifiers on the
> > > typedef type, and more broadly perhaps we should be using
> > > `getAnonDeclWithTypedefName` here too. Presumably the new case should
> > > also only apply for `TUK_Reference`.
> > I added a check for TUK_Reference. But I don't fully understand your other
> > comment about checking the qualifiers on the typedef type. Could you please
> > explain a little more?
> @rsmith Since my newest iteration removes the restriction for the enum to be
> anonymous, I'm guessing I can mark this comment as resolved?
Regarding qualifiers:
```
enum A { e };
typedef const A B;
void f() {
enum ::B b = e; // OK?
b = e; // OK?
}
```
MSVC's behavior here is very strange -- they behave exactly as if the `enum`
keyword were not present. The first commented line above is accepted, and the
second is rejected because we're assigning to an object of type `const A`.
If we want to be compatible with this kind of thing, then I think we need a
larger-scale restructuring: `ActOnTag` would need a way to say "no, wait, this
isn't a tag at all, use this non-tag type instead". I don't know how common
this kind of code is, but perhaps we could instead reject the first line above
(because the typedef isn't for *exactly* the enum type).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91659/new/
https://reviews.llvm.org/D91659
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits