summaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaStmtAsm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaStmtAsm.cpp')
-rw-r--r--clang/lib/Sema/SemaStmtAsm.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp
index cd8b98c7444e..0438af752a69 100644
--- a/clang/lib/Sema/SemaStmtAsm.cpp
+++ b/clang/lib/Sema/SemaStmtAsm.cpp
@@ -885,18 +885,19 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
for (StringRef NextMember : Members) {
const RecordType *RT = nullptr;
if (VarDecl *VD = dyn_cast<VarDecl>(FoundDecl))
- RT = VD->getType()->getAs<RecordType>();
+ RT = VD->getType()->getAsCanonical<RecordType>();
else if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(FoundDecl)) {
MarkAnyDeclReferenced(TD->getLocation(), TD, /*OdrUse=*/false);
// MS InlineAsm often uses struct pointer aliases as a base
QualType QT = TD->getUnderlyingType();
if (const auto *PT = QT->getAs<PointerType>())
QT = PT->getPointeeType();
- RT = QT->getAs<RecordType>();
+ RT = QT->getAsCanonical<RecordType>();
} else if (TypeDecl *TD = dyn_cast<TypeDecl>(FoundDecl))
- RT = Context.getTypeDeclType(TD)->getAs<RecordType>();
+ RT = QualType(Context.getCanonicalTypeDeclType(TD))
+ ->getAsCanonical<RecordType>();
else if (FieldDecl *TD = dyn_cast<FieldDecl>(FoundDecl))
- RT = TD->getType()->getAs<RecordType>();
+ RT = TD->getType()->getAsCanonical<RecordType>();
if (!RT)
return true;
@@ -944,16 +945,15 @@ Sema::LookupInlineAsmVarDeclField(Expr *E, StringRef Member,
/*FirstQualifierFoundInScope=*/nullptr, NameInfo, /*TemplateArgs=*/nullptr);
}
- const RecordType *RT = T->getAs<RecordType>();
+ auto *RD = T->getAsRecordDecl();
// FIXME: Diagnose this as field access into a scalar type.
- if (!RT)
+ if (!RD)
return ExprResult();
LookupResult FieldResult(*this, &Context.Idents.get(Member), AsmLoc,
LookupMemberName);
- if (!LookupQualifiedName(FieldResult,
- RT->getOriginalDecl()->getDefinitionOrSelf()))
+ if (!LookupQualifiedName(FieldResult, RD))
return ExprResult();
// Only normal and indirect field results will work.