https://github.com/tahonermann created 
https://github.com/llvm/llvm-project/pull/130188

Static analysis identified two uses of `getAs()` for which the result pointer 
was unconditionally dereferenced. Source code inspection confirmed that the 
target type is assured by prior checks. This change replaces these uses of 
`getAs()` with `castAs()`.

The first case, in `clang/lib/CodeGen/Targets/AArch64.cpp`, performs a cast to 
`BuiltinType` following a check for `isBuiltinType()`.

The second case, in `clang/lib/Sema/SemaTemplateVariadic.cpp`, performs a cast 
to `PackExpansionType` on the result of a call to `getAsType()` on an object of 
type `TemplateArgument` following confirmation that `isPackExpansion()` 
returned true and that `getKind()` returned `TemplateArgument::Type`. 
Inspection of `isPackExpansion()` revealed that it only returns true when the 
template argument kind is `TemplateArgument::Type` if 
`isa<PackExpansionType>(getAsType())` is true.

>From ffb1b55a12a499c294b5e550065718d25eece575 Mon Sep 17 00:00:00 2001
From: Tom Honermann <tom.honerm...@intel.com>
Date: Thu, 6 Mar 2025 14:05:08 -0800
Subject: [PATCH] [Clang][NFC] Change uses of getAs() to castAs() where the
 target type is assured.

Static analysis identified two uses of getAs() for which the result pointer
was unconditionally dereferenced. Source code inspection confirmed that the
target type is assured by prior checks. This change replaces these uses of
getAs() with castAs().

The first case, in clang/lib/CodeGen/Targets/AArch64.cpp, performs a cast
to BuiltinType following a check for isBuiltinType().

The second case, in clang/lib/Sema/SemaTemplateVariadic.cpp, performs a cast
to PackExpansionType on the result of a call to getAsType() on an object of
type TemplateArgument following confirmation that isPackExpansion() returned
true and that getKind() returned TemplateArgument::Type. Inspection of
isPackExpansion() revealed that it only returns true when the template argument
kind is TemplateArgument::Type if isa<PackExpansionType>(getAsType()) is true.
---
 clang/lib/CodeGen/Targets/AArch64.cpp   | 2 +-
 clang/lib/Sema/SemaTemplateVariadic.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp 
b/clang/lib/CodeGen/Targets/AArch64.cpp
index d6e0e720a0941..073ca3cc82690 100644
--- a/clang/lib/CodeGen/Targets/AArch64.cpp
+++ b/clang/lib/CodeGen/Targets/AArch64.cpp
@@ -763,7 +763,7 @@ bool AArch64ABIInfo::passAsPureScalableType(
     return false;
 
   bool isPredicate;
-  switch (Ty->getAs<BuiltinType>()->getKind()) {
+  switch (Ty->castAs<BuiltinType>()->getKind()) {
 #define SVE_VECTOR_TYPE(Name, MangledName, Id, SingletonId)                    
\
   case BuiltinType::Id:                                                        
\
     isPredicate = false;                                                       
\
diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp 
b/clang/lib/Sema/SemaTemplateVariadic.cpp
index fad00f7648848..d9256dbd07d7a 100644
--- a/clang/lib/Sema/SemaTemplateVariadic.cpp
+++ b/clang/lib/Sema/SemaTemplateVariadic.cpp
@@ -834,7 +834,7 @@ bool Sema::CheckParameterPacksForExpansion(
 
             if (TA.getKind() == TemplateArgument::Type)
               return !TA.getAsType()
-                          ->getAs<PackExpansionType>()
+                          ->castAs<PackExpansionType>()
                           ->getNumExpansions();
 
             if (TA.getKind() == TemplateArgument::Expression)

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to