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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D91659: A... Shivanshu Goyal via Phabricator via cfe-commits
    • [PATCH] D916... Shivanshu Goyal via Phabricator via cfe-commits
    • [PATCH] D916... Shivanshu Goyal via Phabricator via cfe-commits
    • [PATCH] D916... Richard Smith - zygoloid via Phabricator via cfe-commits
    • [PATCH] D916... Richard Smith - zygoloid via Phabricator via cfe-commits
    • [PATCH] D916... Reid Kleckner via Phabricator via cfe-commits
    • [PATCH] D916... Richard Smith - zygoloid via Phabricator via cfe-commits

Reply via email to