Michael137 wrote: > Is my thing about the ctor understanding correct, and it's that the ctor > exists theoretically/abstractly, but not in the AST or in the generated > IR/DWARF? Could it be added/would that be sufficient? > > But, yeah, probably fine to just add the attribute, since that's the real > feature you want to know about.
Hmmm this is what the AST looks like: ``` |-EnumDecl 0xc9accd6d0 <enum.m:3:1, line:5:1> line:3:6 Enum | `-EnumConstantDecl 0xc9accd790 <line:4:5> col:5 e1 'Enum' |-VarDecl 0xc9accd848 <line:3:1, line:5:3> col:3 e 'enum Enum':'Enum' |-EnumDecl 0xc9accd8e0 <line:7:1, line:9:1> line:7:12 class EnumClass 'unsigned int' | `-EnumConstantDecl 0xc9accd9a0 <line:8:5> col:5 ec1 'EnumClass' |-VarDecl 0xc9accda58 <line:7:1, line:9:3> col:3 ec 'enum EnumClass':'EnumClass' |-EnumDecl 0xc9accdae8 <line:11:1, line:13:1> line:11:48 OpenEnum | |-EnumExtensibilityAttr 0xc9accdbb0 <col:21, col:44> Open | `-EnumConstantDecl 0xc9accdc08 <line:12:3> col:3 oe1 'OpenEnum' |-VarDecl 0xc9accdcb8 <line:11:1, line:13:3> col:3 oe 'enum OpenEnum':'OpenEnum' |-EnumDecl 0xc9accdd60 <line:15:1, line:17:1> line:15:54 class OpenEnumClass 'unsigned int' | |-EnumExtensibilityAttr 0xc9accde20 <col:27, col:50> Open | `-EnumConstantDecl 0xc9accde78 <line:16:3> col:3 oec1 'OpenEnumClass' |-VarDecl 0xc9accdf28 <line:15:1, line:17:3> col:3 oec 'enum OpenEnumClass':'OpenEnumClass' |-EnumDecl 0xc9accdfd0 <CFAvailability.h:142:43, enum.m:19:17> col:27 ns_enum 'unsigned int' | `-EnumExtensibilityAttr 0xc9acce090 <CFAvailability.h:125:45, col:68> Open |-TypedefDecl 0xc9acce148 <enum.m:19:1, col:27> col:27 ns_enum 'enum ns_enum':'ns_enum' | `-ElaboratedType 0xc9acce0f0 'enum ns_enum' sugar | `-EnumType 0xc9acce070 'ns_enum' | `-Enum 0xc9acce210 'ns_enum' |-EnumDecl 0xc9acce210 prev 0xc9accdfd0 <CFAvailability.h:142:90, enum.m:21:1> line:19:27 ns_enum 'unsigned int' | |-EnumExtensibilityAttr 0xc9acce2e0 <CFAvailability.h:125:45, col:68> Inherited Open | `-EnumConstantDecl 0xc9acce308 <enum.m:20:3> col:3 ns1 'ns_enum' `-VarDecl 0xc9acce3b8 <CFAvailability.h:142:90, enum.m:21:3> col:3 ns 'enum ns_enum':'ns_enum' ``` So yea no sign of a constructor, in either AST, IR or DWARF. So it does sound more like a hypothetical construct than something that is modelled in Clang (looking at how the `EnumExtensibilityAttr` is used in Clang I don't see any mention of constructors). Seems non-trivial to generate one, particularly just for this purpose. Also if enum constructors ever become a thing then we'll need to disambiguate this case somehow. So a dedicated attribute seemed like the only way https://github.com/llvm/llvm-project/pull/124752 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits