[cfe-dev] Get underlying type of QualType if it's TypedefType
Романенков Кирилл via cfe-dev
cfe-dev at lists.llvm.org
Wed Apr 12 14:51:00 PDT 2017
Hi,
You can use getCanonicalType() to look through the typedefs, for example:
QualType SrcCanonType = SrcExpr()->getType().getCanonicalType(),
DestCanonType = DestType.getCanonicalType();
if (const BuiltinType *Src = SrcCanonType->getAs<BuiltinType>())
if (const BuiltinType *Dest = DestCanonType->getAs<BuiltinType>()) {
if (Src.getKind() == Dest.getKind()) {
// do something
} else {
// do something else
}
}
Kirill
> Date: Wed, 12 Apr 2017 23:11:29 +0800
> From: 陳韋任 via cfe-dev <cfe-dev at lists.llvm.org>
> To: cfe-dev at lists.llvm.org
> Subject: [cfe-dev] Get underlying type of QualType if it's TypedefType
> Message-ID:
> <CAFSLk9eRMBhHqLXR2WGWH7YLRgYe_eXNb0s8yXS6A=Y5MeTrZg at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Hi All,
>
> I have SrcType and DestType used in explicit cast, and I'd like to check
> if the type conversion is valid in CastOperation::CheckCStyleCast [1]. The
> code snippet below (just get the idea, the code is not runable),
>
> Builtin *Src = dyn_cast<BuiltinType>(SrcExpr.get()->getType());
> Builtin *Dest = dyn_cast<BuiltinType>(DestType);
>
> if (Src.getKind() == Dest.getKind()) {
> // do something
> } else {
> // do something else
> }
>
> The problem is the SrcType and DestType might be typedef. For example,
>
> typedef foo FOO;
>
> FOO b = (FOO)(a);
>
> Src and Dest might be nullptr due to the fail dyn_cast, and I will get
> segfault while calling getKind() upon them.
> I am not familiar with Clang, so is there a better way that I can get the
> underlying type if SrcType and DestType
> are typedef?
>
> Thanks.
>
> [1] https://clang.llvm.org/doxygen/SemaCast_8cpp_source.html
>
> Regards,
> chenwj
More information about the cfe-dev
mailing list