[cfe-dev] clang ast: how do I find out whether a catch is done by const reference
Aaron Ballman
aaron at aaronballman.com
Thu Jul 16 13:50:24 PDT 2015
On Thu, Jul 16, 2015 at 4:41 PM, Tobias Langner
<randomcppprogrammer at gmail.com> wrote:
> Hi,
>
> I want to write a check that tests whether a catch is done by const reference or not. I currently have the following code but it can’t distinguish between const reference and reference:
>
> const auto *catchStmt = Result.Nodes.getNodeAs<CXXCatchStmt>("catch");
> if (catchStmt != nullptr) {
> auto caughtType = catchStmt->getCaughtType();
This returns the QualType you are looking for.
caughType.isConstant() && caughtType->isLValueReferenceType();
should tell you if it's a const-qualified lvalue reference type.
~Aaron
> auto *type = caughtType.getTypePtr();
> auto *varDecl = catchStmt->getExceptionDecl();
> if (type->isPointerType()) {
> diag(varDecl->getLocStart(),
> "catch by const reference instead of pointer");
> } else if (!type->isReferenceType()) {
> diag(varDecl->getLocStart(), "catch by const reference");
> } else {
> if (caughtType.isConstQualified() == false) {
> diag(varDecl->getLocStart(),
> "catch by const reference to avoid unnecessary copies");
> }
> }
> }
>
> I tried looking at the varDecl but from there I can’t even find out how to get the QualType. Can somebody give me a hint?
>
> Regards
> Tobias
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list