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

Reply via email to