-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[Clang] Prevent potential null pointer dereferences #117176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-clang Author: None (smanna12) ChangesThis commit addresses several null pointer issues identified by static analysis by replacing dyn_cast<> with cast<> and getAs<> with castAs<> in various parts of the Clang codebase. The cast and castAs method is used to ensure that the type is correctly cast, which helps prevent potential null pointer dereferences. Changes:
Full diff: https://github.com/llvm/llvm-project/pull/117176.diff 3 Files Affected:
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 14fbadbc35ae5d..23df7878a3bf29 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -3558,7 +3558,7 @@ ASTContext::adjustType(QualType Orig,
llvm::function_ref<QualType(QualType)> Adjust) const {
switch (Orig->getTypeClass()) {
case Type::Attributed: {
- const auto *AT = dyn_cast<AttributedType>(Orig);
+ const auto *AT = cast<AttributedType>(Orig);
return getAttributedType(AT->getAttrKind(),
adjustType(AT->getModifiedType(), Adjust),
adjustType(AT->getEquivalentType(), Adjust),
diff --git a/clang/lib/Sema/SemaFunctionEffects.cpp b/clang/lib/Sema/SemaFunctionEffects.cpp
index 6fe4d2353a2282..c5c1e3fb41a2ff 100644
--- a/clang/lib/Sema/SemaFunctionEffects.cpp
+++ b/clang/lib/Sema/SemaFunctionEffects.cpp
@@ -627,7 +627,7 @@ class Analyzer {
IsNoexcept = isNoexcept(FD);
} else if (auto *BD = dyn_cast<BlockDecl>(D)) {
if (auto *TSI = BD->getSignatureAsWritten()) {
- auto *FPT = TSI->getType()->getAs<FunctionProtoType>();
+ auto *FPT = TSI->getType()->castAs<FunctionProtoType>();
IsNoexcept = FPT->isNothrow() || BD->hasAttr<NoThrowAttr>();
}
}
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index f4fc0f2ddc27a6..a1adc66ddb9ce9 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1908,9 +1908,9 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
return true;
// ensure both args have 3 elements
int NumElementsArg1 =
- TheCall->getArg(0)->getType()->getAs<VectorType>()->getNumElements();
+ TheCall->getArg(0)->getType()->casAs<VectorType>()->getNumElements();
int NumElementsArg2 =
- TheCall->getArg(1)->getType()->getAs<VectorType>()->getNumElements();
+ TheCall->getArg(1)->getType()->castAs<VectorType>()->getNumElements();
if (NumElementsArg1 != 3) {
int LessOrMore = NumElementsArg1 > 3 ? 1 : 0;
|
|
@llvm/pr-subscribers-hlsl Author: None (smanna12) ChangesThis commit addresses several null pointer issues identified by static analysis by replacing dyn_cast<> with cast<> and getAs<> with castAs<> in various parts of the Clang codebase. The cast and castAs method is used to ensure that the type is correctly cast, which helps prevent potential null pointer dereferences. Changes:
Full diff: https://github.com/llvm/llvm-project/pull/117176.diff 3 Files Affected:
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 14fbadbc35ae5d..23df7878a3bf29 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -3558,7 +3558,7 @@ ASTContext::adjustType(QualType Orig,
llvm::function_ref<QualType(QualType)> Adjust) const {
switch (Orig->getTypeClass()) {
case Type::Attributed: {
- const auto *AT = dyn_cast<AttributedType>(Orig);
+ const auto *AT = cast<AttributedType>(Orig);
return getAttributedType(AT->getAttrKind(),
adjustType(AT->getModifiedType(), Adjust),
adjustType(AT->getEquivalentType(), Adjust),
diff --git a/clang/lib/Sema/SemaFunctionEffects.cpp b/clang/lib/Sema/SemaFunctionEffects.cpp
index 6fe4d2353a2282..c5c1e3fb41a2ff 100644
--- a/clang/lib/Sema/SemaFunctionEffects.cpp
+++ b/clang/lib/Sema/SemaFunctionEffects.cpp
@@ -627,7 +627,7 @@ class Analyzer {
IsNoexcept = isNoexcept(FD);
} else if (auto *BD = dyn_cast<BlockDecl>(D)) {
if (auto *TSI = BD->getSignatureAsWritten()) {
- auto *FPT = TSI->getType()->getAs<FunctionProtoType>();
+ auto *FPT = TSI->getType()->castAs<FunctionProtoType>();
IsNoexcept = FPT->isNothrow() || BD->hasAttr<NoThrowAttr>();
}
}
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index f4fc0f2ddc27a6..a1adc66ddb9ce9 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -1908,9 +1908,9 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
return true;
// ensure both args have 3 elements
int NumElementsArg1 =
- TheCall->getArg(0)->getType()->getAs<VectorType>()->getNumElements();
+ TheCall->getArg(0)->getType()->casAs<VectorType>()->getNumElements();
int NumElementsArg2 =
- TheCall->getArg(1)->getType()->getAs<VectorType>()->getNumElements();
+ TheCall->getArg(1)->getType()->castAs<VectorType>()->getNumElements();
if (NumElementsArg1 != 3) {
int LessOrMore = NumElementsArg1 > 3 ? 1 : 0;
|
AaronBallman
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Fznamznon
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My concerns are resolved, sorry for holding this!
|
Thank you everyone for reviews. |
No worries. Thank you |
This commit addresses several null pointer issues identified by static analysis by replacing dyn_cast<> with cast<> and getAs<> with castAs<> in various parts of the Clang codebase. The cast and castAs method is used to ensure that the type is correctly cast, which helps prevent potential null pointer dereferences.
Changes:
ASTContext.cpp:
Replaced dyn_cast with cast to ensure that the type is correctly cast to AttributedType.
SemaFunctionEffects.cpp:
Replaced getAs with castAs to ensure that the type is correctly cast to FunctionProtoType.
SemaHLSL.cpp:
Replaced getAs with castAs to ensure that the type is correctly cast to VectorType.