aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
authorDinar Temirbulatov <Dinar.Temirbulatov@arm.com>2024-04-19 13:59:13 +0000
committerDinar Temirbulatov <Dinar.Temirbulatov@arm.com>2024-04-19 14:02:02 +0000
commit9a07d7ea9b37a5b537fc8099cc5744f44da29abc (patch)
tree0ea2d812e7a41f624ec7d179674edce17e7ebb2c /clang/lib/Sema/SemaChecking.cpp
parenta5757c5b65f1894de16f549212b1c37793312703 (diff)
downloadllvm-9a07d7ea9b37a5b537fc8099cc5744f44da29abc.zip
llvm-9a07d7ea9b37a5b537fc8099cc5744f44da29abc.tar.gz
llvm-9a07d7ea9b37a5b537fc8099cc5744f44da29abc.tar.bz2
[Sema] Check if types are resolved before querying function description.
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 6778bc6..73e76e0 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -3507,11 +3507,15 @@ bool Sema::ParseSVEImmChecks(
static ArmStreamingType getArmStreamingFnType(const FunctionDecl *FD) {
if (FD->hasAttr<ArmLocallyStreamingAttr>())
return ArmStreaming;
- if (const auto *T = FD->getType()->getAs<FunctionProtoType>()) {
- if (T->getAArch64SMEAttributes() & FunctionType::SME_PStateSMEnabledMask)
- return ArmStreaming;
- if (T->getAArch64SMEAttributes() & FunctionType::SME_PStateSMCompatibleMask)
- return ArmStreamingCompatible;
+ if (const Type *Ty = FD->getType().getTypePtrOrNull()) {
+ if (const auto *FPT = Ty->getAs<FunctionProtoType>()) {
+ if (FPT->getAArch64SMEAttributes() &
+ FunctionType::SME_PStateSMEnabledMask)
+ return ArmStreaming;
+ if (FPT->getAArch64SMEAttributes() &
+ FunctionType::SME_PStateSMCompatibleMask)
+ return ArmStreamingCompatible;
+ }
}
return ArmNonStreaming;
}