================ @@ -1952,6 +1952,8 @@ def enum_value(self): underlying_type = self.type if underlying_type.kind == TypeKind.ENUM: underlying_type = underlying_type.get_declaration().enum_type + if underlying_type.kind == TypeKind.ELABORATED: ---------------- fursov wrote:
My educated guess: the call chain looks like this: enum_type (cindex.py) -> clang_getEnumDeclIntegerType (clang/tools/libclang/CXType.cpp) -> getIntegerType (clang/include/clang/AST/Decl.h) Let's use this example: `using TUintType = uint8_t; enum class ETUintType : TUintType { A = 0xff, B = 0x20 }; ` >From what I can see, e.g. from ast dumper (clang/lib/AST/TextNodeDumper.cpp, >TextNodeDumper::VisitEnumDecl), first it dumps scoped class, then name >(ETUintType), then it uses function dumpType() to print the type: first, the >one that has been provided by getIntegerType(), but then it is desugared. EnumDecl 0x5580b1f62490 <line:5:1, line:9:1> line:5:12 class ETUintType 'TUintType':'unsigned char' This leads me to the conclusion, that getIntegerType() on the AST parser on purpose returns whatever type that enum is defined against without resolving to the target canonical type. But I would like to hear the opinion from experts. https://github.com/llvm/llvm-project/pull/108769 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits