[Lldb-commits] [clang] [clang-tools-extra] [lldb] [Clang] [NFC] Rename `isAnyPointerType()` and `getPointeeOrArrayElementType()`. (PR #122938)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Jan 14 09:11:48 PST 2025
https://github.com/Sirraide created https://github.com/llvm/llvm-project/pull/122938
## Changes
tl;dr: The names are inaccurate and continue to cause confusion.
This pr currently makes the following changes:
- Rename `isAnyPointerType()` to `isPointerOrObjCObjectPointerType()`.
- Rename `getPointeeOrArrayElementType()` to `getPointerOrObjCPointerOrArrayElementType()`.
- Introduce `getPointerLikeOrArrayElementType()` which actually *is* a superset of the functionality that `getPointeeType()` provides (I don’t think we can call this `getPointeeOrArrayElementType()` because that would effectively just mean that the behaviour of this function changes all of a sudden, which may cause even more confusion for people that are not aware that we’re making this change). A function like this that actually supports member pointers is needed for #121525.
- Elaborate on what types `getPointeeType()` actually supports in a comment. `getPointeeType()` actually ends up being fine imo because it *does* actually handle anything that could reasonably be conceived of as having a ‘pointee’.
## Open Questions
- The names for the first two are rather verbose; I’m open to suggestions as to better names for these functions since that was the best that I managed to come up with...
- I’ve already discussed this somewhat with @AaronBallman and @cor3ntin, and I think that we probably don’t want to introduce any new helpers like `isAnyPointerType()` that claim to handle ‘all pointer types’, mainly because a lot of the calls to `isAnyPointerType()` are currently of the form `if (Ty->isAnyPointerType() || Ty->someOtherPredicate())`, where `someOtherPredicate()` may check for `ReferenceType`, `MemberPointerType`, etc. It seems that nearly every call site is different in what ‘pointer-like types’ it cares about, so a general helper is unlikely to be of any use pretty much ever.
- I’m planning to do a general clean-up pass and look at all call sites of what used to be `isAnyPointerType()` to see if there is anything weird—so far, two instances of rather obvious dead code have surfaced as a result of the renaming (see below)—but my plan is to do that as a follow-up pr.
- Additionally, there are a few places we could probably clean up by either introducing or using newer helper functions, e.g. we now have `isPointerOrReferenceType()`, so it would be possible to replace every instance of `Ty->isPointerType() || Ty->isReferenceType()` with `Ty->isPointerOrReferenceType()` and additionally introduce new helpers for common combinations of these predicates. At the same time, that sounds a bit like a reformatting pass with extra steps, and we usually tend to eschew these because they interact poorly with `git blame` from what I recall, so I’m not sure if that’s a good idea.
- @AaronBallman There is an AST matcher with the name `isAnyPointer()`, which uses `isAnyPointerType()`. I’m not sure what exactly we want to do with that one.
## Background
In the `Type` class, we currently have the following function:
```c++
bool isAnyPointerType() const;
```
which, one might reasonably assume, ought to return `true` if `this` is ‘any pointer type’, whatever that means. It turns out that what that actually ends up meaning is:
```
// Any C pointer or ObjC object pointer
```
That is, it does not include
- Member pointers,
- Block pointers,
- `nullptr_t`.
Of course, one might argue that e.g. member pointers aren’t actually pointers but offsets, which is true, but we still *call* them `MemberPointerType`s, so by name alone, they are still ‘a kind of pointer’.
Searching for occurrences yields several cases where someone has fallen for this and misunderstood what ‘any pointer type’ was actually supposed to mean. I’ve renamed it to `isPointerOrObjCObjectPointerType()`, so these misuses end up being rather apparent. There seem to be at least two places that are currently in the code base where someone got confused about this:
- Here, we end up checking if `Pointee` is a pointer or Objective-C pointer... or Objective-C pointer.
https://github.com/llvm/llvm-project/blob/1c26eb363147bd10be797d3d77603fb793b2bc0f/clang/lib/Sema/SemaAPINotes.cpp#L51-L52
- Here, it would seem that both of these `if` statements together end up being functionally equivalent to
`if (!Ty->isObjectPointerType()) return false;`
https://github.com/llvm/llvm-project/blob/1c26eb363147bd10be797d3d77603fb793b2bc0f/clang/lib/ARCMigrate/ObjCMT.cpp#L1044-L1050
Additionally, I can recall several instances of me either reading or writing code that uses `isAnyPointerType()` and then getting confused why something wasn’t working properly, and I’ve heard similar sentiment from others.
Another possible instance of that might be `getPointeeOrArrayElementType()`. You’d think based on its name that it’s an extension of `getPointeeType()` that also handles arrays, but that’s wrong: the former calls `isAnyPointerType()` before delegating to `getPointeeType()`, which means that unlike `getPointeeType()`, this function does not handle block or member pointers at all. Confusion about this fact in particular just a few days ago is what prompted me to address this issue.
>From 4caca7ae06da82c322c8844cc8214fdba5bd252f Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:22:23 +0100
Subject: [PATCH 1/6] [Clang] [NFC] Rename isAnyPointerType()
---
.../clang-tidy/bugprone/InfiniteLoopCheck.cpp | 2 +-
.../cppcoreguidelines/InitVariablesCheck.cpp | 2 +-
.../readability/IdentifierNamingCheck.cpp | 12 ++---
.../SuspiciousCallArgumentCheck.cpp | 2 +-
.../clang-tidy/utils/ExceptionAnalyzer.cpp | 2 +-
clang/include/clang/AST/CanonicalType.h | 2 +-
clang/include/clang/AST/Type.h | 8 ++--
clang/include/clang/ASTMatchers/ASTMatchers.h | 4 +-
.../Core/PathSensitive/MemRegion.h | 2 +-
.../Core/PathSensitive/SMTConv.h | 10 ++---
.../Core/PathSensitive/SValBuilder.h | 3 +-
.../StaticAnalyzer/Core/PathSensitive/SVals.h | 2 +-
clang/lib/ARCMigrate/ObjCMT.cpp | 4 +-
clang/lib/AST/ASTContext.cpp | 6 +--
clang/lib/AST/Expr.cpp | 4 +-
clang/lib/AST/ExprCXX.cpp | 2 +-
clang/lib/AST/ExprConstant.cpp | 2 +-
clang/lib/AST/MicrosoftMangle.cpp | 2 +-
clang/lib/Analysis/ThreadSafetyCommon.cpp | 2 +-
clang/lib/Analysis/UninitializedValues.cpp | 2 +-
clang/lib/CodeGen/CGCall.cpp | 2 +-
clang/lib/CodeGen/CGOpenMPRuntime.cpp | 18 ++++----
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 4 +-
clang/lib/CodeGen/CGStmtOpenMP.cpp | 8 ++--
clang/lib/CodeGen/CodeGenTypes.cpp | 2 +-
clang/lib/ExtractAPI/DeclarationFragments.cpp | 2 +-
clang/lib/Frontend/ASTUnit.cpp | 2 +-
clang/lib/Sema/SemaAPINotes.cpp | 2 +-
clang/lib/Sema/SemaARM.cpp | 20 ++++-----
clang/lib/Sema/SemaCast.cpp | 18 ++++----
clang/lib/Sema/SemaChecking.cpp | 8 ++--
clang/lib/Sema/SemaCodeComplete.cpp | 2 +-
clang/lib/Sema/SemaDecl.cpp | 6 +--
clang/lib/Sema/SemaDeclAttr.cpp | 12 ++---
clang/lib/Sema/SemaExpr.cpp | 44 +++++++++----------
clang/lib/Sema/SemaExprCXX.cpp | 6 +--
clang/lib/Sema/SemaLookup.cpp | 2 +-
clang/lib/Sema/SemaOpenACC.cpp | 2 +-
clang/lib/Sema/SemaOpenMP.cpp | 28 ++++++------
clang/lib/Sema/SemaOverload.cpp | 10 ++---
clang/lib/Sema/SemaRISCV.cpp | 2 +-
clang/lib/Sema/SemaSYCL.cpp | 2 +-
clang/lib/Sema/SemaTemplateDeduction.cpp | 2 +-
clang/lib/Sema/SemaType.cpp | 8 ++--
.../Checkers/CStringChecker.cpp | 2 +-
.../Checkers/CheckObjCInstMethSignature.cpp | 2 +-
.../Checkers/FuchsiaHandleChecker.cpp | 2 +-
.../Checkers/NullabilityChecker.cpp | 2 +-
.../Checkers/TrustNonnullChecker.cpp | 2 +-
.../Checkers/TrustReturnsNonnullChecker.cpp | 2 +-
.../UninitializedObject/UninitializedObject.h | 2 +-
.../Core/BugReporterVisitors.cpp | 4 +-
clang/lib/StaticAnalyzer/Core/CallEvent.cpp | 4 +-
clang/lib/StaticAnalyzer/Core/DynamicType.cpp | 4 +-
clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp | 2 +-
.../StaticAnalyzer/Core/SimpleSValBuilder.cpp | 2 +-
.../Transformer/SourceCodeBuilders.cpp | 2 +-
clang/lib/Tooling/Transformer/Stencil.cpp | 4 +-
.../TypeSystem/Clang/TypeSystemClang.cpp | 2 +-
59 files changed, 162 insertions(+), 163 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
index b7f0c08b2a7d4b..f4c5523184630f 100644
--- a/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
@@ -93,7 +93,7 @@ static bool isVarThatIsPossiblyChanged(const Decl *Func, const Stmt *LoopStmt,
if (T.isVolatileQualified())
return true;
- if (!T->isAnyPointerType() && !T->isReferenceType())
+ if (!T->isPointerOrObjCObjectPointerType() && !T->isReferenceType())
break;
T = T->getPointeeType();
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
index 3eef2fd12cc8e5..be1673d5c08c98 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
@@ -95,7 +95,7 @@ void InitVariablesCheck::check(const MatchFinder::MatchResult &Result) {
else if (TypePtr->isFloatingType()) {
InitializationString = " = NAN";
AddMathInclude = true;
- } else if (TypePtr->isAnyPointerType()) {
+ } else if (TypePtr->isPointerOrObjCObjectPointerType()) {
if (getLangOpts().CPlusPlus11)
InitializationString = " = nullptr";
else
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 3f63eec2c51a8c..27031c2d6aeb25 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1218,7 +1218,7 @@ StyleKind IdentifierNamingCheck::findStyleKind(
return SK_ConstexprVariable;
if (!Type.isNull() && Type.isConstQualified()) {
- if (Type.getTypePtr()->isAnyPointerType() &&
+ if (Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_ConstantPointerParameter])
return SK_ConstantPointerParameter;
@@ -1232,7 +1232,7 @@ StyleKind IdentifierNamingCheck::findStyleKind(
if (Decl->isParameterPack() && NamingStyles[SK_ParameterPack])
return SK_ParameterPack;
- if (!Type.isNull() && Type.getTypePtr()->isAnyPointerType() &&
+ if (!Type.isNull() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_PointerParameter])
return SK_PointerParameter;
@@ -1508,7 +1508,7 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticDataMember() && NamingStyles[SK_ClassConstant])
return SK_ClassConstant;
- if (Var->isFileVarDecl() && Type.getTypePtr()->isAnyPointerType() &&
+ if (Var->isFileVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_GlobalConstantPointer])
return SK_GlobalConstantPointer;
@@ -1518,7 +1518,7 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticLocal() && NamingStyles[SK_StaticConstant])
return SK_StaticConstant;
- if (Var->isLocalVarDecl() && Type.getTypePtr()->isAnyPointerType() &&
+ if (Var->isLocalVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_LocalConstantPointer])
return SK_LocalConstantPointer;
@@ -1535,7 +1535,7 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticDataMember() && NamingStyles[SK_ClassMember])
return SK_ClassMember;
- if (Var->isFileVarDecl() && Type.getTypePtr()->isAnyPointerType() &&
+ if (Var->isFileVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_GlobalPointer])
return SK_GlobalPointer;
@@ -1545,7 +1545,7 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticLocal() && NamingStyles[SK_StaticVariable])
return SK_StaticVariable;
- if (Var->isLocalVarDecl() && Type.getTypePtr()->isAnyPointerType() &&
+ if (Var->isLocalVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_LocalPointer])
return SK_LocalPointer;
diff --git a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index c5eaff88e0ed3b..108c8d2e0a29ff 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -472,7 +472,7 @@ static bool areTypesCompatible(QualType ArgType, QualType ParamType,
// Unless argument and param are both multilevel pointers, the types are not
// convertible.
- if (!(ParamType->isAnyPointerType() && ArgType->isAnyPointerType()))
+ if (!(ParamType->isPointerOrObjCObjectPointerType() && ArgType->isPointerOrObjCObjectPointerType()))
return false;
return arePointerTypesCompatible(ArgType, ParamType, IsParamContinuouslyConst,
diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp
index 0fea7946a59f95..eec39d97a94a72 100644
--- a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp
+++ b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp
@@ -84,7 +84,7 @@ inline bool isPointerOrPointerToMember(const Type *T) {
}
std::optional<QualType> getPointeeOrArrayElementQualType(QualType T) {
- if (T->isAnyPointerType() || T->isMemberPointerType())
+ if (T->isPointerOrObjCObjectPointerType() || T->isMemberPointerType())
return T->getPointeeType();
if (T->isArrayType())
diff --git a/clang/include/clang/AST/CanonicalType.h b/clang/include/clang/AST/CanonicalType.h
index 6699284d215bd0..8c0b9aa39df941 100644
--- a/clang/include/clang/AST/CanonicalType.h
+++ b/clang/include/clang/AST/CanonicalType.h
@@ -286,7 +286,7 @@ class CanProxyBase {
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isDerivedType)
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isScalarType)
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isAggregateType)
- LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isAnyPointerType)
+ LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isPointerOrObjCObjectPointerType)
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isVoidPointerType)
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isFunctionPointerType)
LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isMemberFunctionPointerType)
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 78677df578c4bc..fed1647da43534 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -2536,7 +2536,7 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
bool isPointerType() const;
bool isPointerOrReferenceType() const;
bool isSignableType() const;
- bool isAnyPointerType() const; // Any C pointer or ObjC object pointer
+ bool isPointerOrObjCObjectPointerType() const; // Any C pointer or ObjC object pointer
bool isCountAttributedType() const;
bool isBlockPointerType() const;
bool isVoidPointerType() const;
@@ -8196,7 +8196,7 @@ inline bool Type::isPointerOrReferenceType() const {
return isPointerType() || isReferenceType();
}
-inline bool Type::isAnyPointerType() const {
+inline bool Type::isPointerOrObjCObjectPointerType() const {
return isPointerType() || isObjCObjectPointerType();
}
@@ -8656,7 +8656,7 @@ inline bool Type::isUndeducedType() const {
inline bool Type::isOverloadableType() const {
if (!isDependentType())
return isRecordType() || isEnumeralType();
- return !isArrayType() && !isFunctionType() && !isAnyPointerType() &&
+ return !isArrayType() && !isFunctionType() && !isPointerOrObjCObjectPointerType() &&
!isMemberPointerType();
}
@@ -8692,7 +8692,7 @@ inline const Type *Type::getBaseElementTypeUnsafe() const {
inline const Type *Type::getPointeeOrArrayElementType() const {
const Type *type = this;
- if (type->isAnyPointerType())
+ if (type->isPointerOrObjCObjectPointerType())
return type->getPointeeType().getTypePtr();
else if (type->isArrayType())
return type->getBaseElementTypeUnsafe();
diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h
index 239fcba4e5e057..d9f505c5645f06 100644
--- a/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -4156,7 +4156,7 @@ AST_MATCHER_P(QualType, asString, std::string, Name) {
AST_MATCHER_P(
QualType, pointsTo, internal::Matcher<QualType>,
InnerMatcher) {
- return (!Node.isNull() && Node->isAnyPointerType() &&
+ return (!Node.isNull() && Node->isPointerOrObjCObjectPointerType() &&
InnerMatcher.matches(Node->getPointeeType(), Finder, Builder));
}
@@ -6605,7 +6605,7 @@ AST_MATCHER(QualType, isAnyCharacter) {
/// varDecl(hasType(isAnyPointer()))
/// matches "int *i" and "Foo *f", but not "int j".
AST_MATCHER(QualType, isAnyPointer) {
- return Node->isAnyPointerType();
+ return Node->isPointerOrObjCObjectPointerType();
}
/// Matches QualType nodes that are const-qualified, i.e., that
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
index f88bf70d72398c..15e01bdbcd6ed5 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
@@ -787,7 +787,7 @@ class SymbolicRegion : public SubRegion {
// Because pointer arithmetic is represented by ElementRegion layers,
// the base symbol here should not contain any arithmetic.
assert(isa_and_nonnull<SymbolData>(s));
- assert(s->getType()->isAnyPointerType() ||
+ assert(s->getType()->isPointerOrObjCObjectPointerType() ||
s->getType()->isReferenceType() ||
s->getType()->isBlockPointerType());
assert(isa<UnknownSpaceRegion>(sreg) || isa<HeapSpaceRegion>(sreg) ||
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
index fcc9c02999b3b0..ef5bf4b50371db 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
@@ -264,7 +264,7 @@ class SMTConv {
uint64_t FromBitWidth) {
if ((FromTy->isIntegralOrEnumerationType() &&
ToTy->isIntegralOrEnumerationType()) ||
- (FromTy->isAnyPointerType() ^ ToTy->isAnyPointerType()) ||
+ (FromTy->isPointerOrObjCObjectPointerType() ^ ToTy->isPointerOrObjCObjectPointerType()) ||
(FromTy->isBlockPointerType() ^ ToTy->isBlockPointerType()) ||
(FromTy->isReferenceType() ^ ToTy->isReferenceType())) {
@@ -365,7 +365,7 @@ class SMTConv {
// If the two operands are pointers and the operation is a subtraction,
// the result is of type ptrdiff_t, which is signed
- if (LTy->isAnyPointerType() && RTy->isAnyPointerType() && Op == BO_Sub) {
+ if (LTy->isPointerOrObjCObjectPointerType() && RTy->isPointerOrObjCObjectPointerType() && Op == BO_Sub) {
*RetTy = Ctx.getPointerDiffType();
}
}
@@ -509,7 +509,7 @@ class SMTConv {
Solver->mkFloat(Zero));
}
- if (Ty->isIntegralOrEnumerationType() || Ty->isAnyPointerType() ||
+ if (Ty->isIntegralOrEnumerationType() || Ty->isPointerOrObjCObjectPointerType() ||
Ty->isBlockPointerType() || Ty->isReferenceType()) {
// Skip explicit comparison for boolean types
@@ -613,7 +613,7 @@ class SMTConv {
return;
}
- if ((LTy->isAnyPointerType() || RTy->isAnyPointerType()) ||
+ if ((LTy->isPointerOrObjCObjectPointerType() || RTy->isPointerOrObjCObjectPointerType()) ||
(LTy->isBlockPointerType() || RTy->isBlockPointerType()) ||
(LTy->isReferenceType() || RTy->isReferenceType())) {
// TODO: Refactor to Sema::FindCompositePointerType(), and
@@ -624,7 +624,7 @@ class SMTConv {
// Cast the non-pointer type to the pointer type.
// TODO: Be more strict about this.
- if ((LTy->isAnyPointerType() ^ RTy->isAnyPointerType()) ||
+ if ((LTy->isPointerOrObjCObjectPointerType() ^ RTy->isPointerOrObjCObjectPointerType()) ||
(LTy->isBlockPointerType() ^ RTy->isBlockPointerType()) ||
(LTy->isReferenceType() ^ RTy->isReferenceType())) {
if (LTy->isNullPtrType() || LTy->isBlockPointerType() ||
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
index 54430d426a82a8..93e6b08644807a 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
@@ -356,8 +356,7 @@ class SValBuilder {
/// space.
/// \param type pointer type.
loc::ConcreteInt makeNullWithType(QualType type) {
- // We cannot use the `isAnyPointerType()`.
- assert((type->isPointerType() || type->isObjCObjectPointerType() ||
+ assert((type->isPointerOrObjCObjectPointerType() ||
type->isBlockPointerType() || type->isNullPtrType() ||
type->isReferenceType()) &&
"makeNullWithType must use pointer type");
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
index aeb57b28077c61..c6c6951ba32198 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
@@ -260,7 +260,7 @@ class Loc : public DefinedSVal {
void dumpToStream(raw_ostream &Out) const;
static bool isLocType(QualType T) {
- return T->isAnyPointerType() || T->isBlockPointerType() ||
+ return T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType() ||
T->isReferenceType() || T->isNullPtrType();
}
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp
index c1bc7c762088f2..47c130379d5126 100644
--- a/clang/lib/ARCMigrate/ObjCMT.cpp
+++ b/clang/lib/ARCMigrate/ObjCMT.cpp
@@ -1042,7 +1042,7 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx,
}
static bool TypeIsInnerPointer(QualType T) {
- if (!T->isAnyPointerType())
+ if (!T->isPointerOrObjCObjectPointerType())
return false;
if (T->isObjCObjectPointerType() || T->isObjCBuiltinType() ||
T->isBlockPointerType() || T->isFunctionPointerType() ||
@@ -1366,7 +1366,7 @@ static bool IsVoidStarType(QualType Ty) {
/// CF object types or of the "void *" variety. It returns true if we don't care about the type
/// such as a non-pointer or pointers which have no ownership issues (such as "int *").
static bool AuditedType (QualType AT) {
- if (!AT->isAnyPointerType() && !AT->isBlockPointerType())
+ if (!AT->isPointerOrObjCObjectPointerType() && !AT->isBlockPointerType())
return true;
// FIXME. There isn't much we can say about CF pointer type; or is there?
if (ento::coreFoundation::isCFObjectRef(AT) ||
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index be1dd29d462788..d6fdb035294068 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -2980,7 +2980,7 @@ bool ASTContext::isSentinelNullExpr(const Expr *E) {
// nullptr_t is always treated as null.
if (E->getType()->isNullPtrType()) return true;
- if (E->getType()->isAnyPointerType() &&
+ if (E->getType()->isPointerOrObjCObjectPointerType() &&
E->IgnoreParenCasts()->isNullPointerConstant(*this,
Expr::NPC_ValueDependentIsNull))
return true;
@@ -3518,7 +3518,7 @@ QualType ASTContext::getObjCGCQualType(QualType T,
if (const auto *ptr = T->getAs<PointerType>()) {
QualType Pointee = ptr->getPointeeType();
- if (Pointee->isAnyPointerType()) {
+ if (Pointee->isPointerOrObjCObjectPointerType()) {
QualType ResultType = getObjCGCQualType(Pointee, GCAttr);
return getPointerType(ResultType);
}
@@ -10101,7 +10101,7 @@ Qualifiers::GC ASTContext::getObjCGCAttrKind(QualType Ty) const {
QualType CT = Ty->getCanonicalTypeInternal();
while (const auto *AT = dyn_cast<ArrayType>(CT))
CT = AT->getElementType();
- assert(CT->isAnyPointerType() || CT->isBlockPointerType());
+ assert(CT->isPointerOrObjCObjectPointerType() || CT->isBlockPointerType());
#endif
}
return GCAttrs;
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index f6a4ed970cb23f..b7de5a5b9e6232 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -1872,7 +1872,7 @@ bool CastExpr::CastConsistency() const {
case CK_AnyPointerToBlockPointerCast:
assert(getType()->isBlockPointerType());
- assert(getSubExpr()->getType()->isAnyPointerType() &&
+ assert(getSubExpr()->getType()->isPointerOrObjCObjectPointerType() &&
!getSubExpr()->getType()->isBlockPointerType());
goto CheckNoBasePath;
@@ -5199,7 +5199,7 @@ QualType ArraySectionExpr::getBaseOriginalType(const Expr *Base) {
OriginalTy = PVD->getOriginalType().getNonReferenceType();
for (unsigned Cnt = 0; Cnt < ArraySectionCount; ++Cnt) {
- if (OriginalTy->isAnyPointerType())
+ if (OriginalTy->isPointerOrObjCObjectPointerType())
OriginalTy = OriginalTy->getPointeeType();
else if (OriginalTy->isArrayType())
OriginalTy = OriginalTy->castAsArrayTypeUnsafe()->getElementType();
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index 5bf5d6adf525a8..dd7d09f7833672 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -733,7 +733,7 @@ CXXRecordDecl *CXXMemberCallExpr::getRecordDecl() const {
if (!ThisArg)
return nullptr;
- if (ThisArg->getType()->isAnyPointerType())
+ if (ThisArg->getType()->isPointerOrObjCObjectPointerType())
return ThisArg->getType()->getPointeeType()->getAsCXXRecordDecl();
return ThisArg->getType()->getAsCXXRecordDecl();
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 2e680d1569f60f..c596a29b479480 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -2361,7 +2361,7 @@ static bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc,
if (auto *FD = dyn_cast_or_null<FunctionDecl>(BaseVD);
FD && FD->isImmediateFunction()) {
Info.FFDiag(Loc, diag::note_consteval_address_accessible)
- << !Type->isAnyPointerType();
+ << !Type->isPointerOrObjCObjectPointerType();
Info.Note(FD->getLocation(), diag::note_declared_at);
return false;
}
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index edeeaeaa9ae17c..63a1a53c4e74a1 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2570,7 +2570,7 @@ void MicrosoftCXXNameMangler::mangleType(QualType T, SourceRange Range,
return;
}
- bool IsPointer = T->isAnyPointerType() || T->isMemberPointerType() ||
+ bool IsPointer = T->isPointerOrObjCObjectPointerType() || T->isMemberPointerType() ||
T->isReferenceType() || T->isBlockPointerType();
switch (QMM) {
diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp
index 13cd7e26dc16f3..19030477842236 100644
--- a/clang/lib/Analysis/ThreadSafetyCommon.cpp
+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp
@@ -383,7 +383,7 @@ static const ValueDecl *getValueDeclFromSExpr(const til::SExpr *E) {
static bool hasAnyPointerType(const til::SExpr *E) {
auto *VD = getValueDeclFromSExpr(E);
- if (VD && VD->getType()->isAnyPointerType())
+ if (VD && VD->getType()->isPointerOrObjCObjectPointerType())
return true;
if (const auto *C = dyn_cast<til::Cast>(E))
return C->castOpcode() == til::CAST_objToPtr;
diff --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp
index bf2f7306186507..ad6870f49dd993 100644
--- a/clang/lib/Analysis/UninitializedValues.cpp
+++ b/clang/lib/Analysis/UninitializedValues.cpp
@@ -417,7 +417,7 @@ void ClassifyRefs::VisitOMPExecutableDirective(OMPExecutableDirective *ED) {
}
static bool isPointerToConst(const QualType &QT) {
- return QT->isAnyPointerType() && QT->getPointeeType().isConstQualified();
+ return QT->isPointerOrObjCObjectPointerType() && QT->getPointeeType().isConstQualified();
}
static bool hasTrivialBody(CallExpr *CE) {
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 0fde4d8ee296bd..4840f1af5c201f 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -2929,7 +2929,7 @@ static const NonNullAttr *getNonNullAttr(const Decl *FD, const ParmVarDecl *PVD,
// In the former case, LLVM IR cannot represent the constraint. In
// the latter case, we have no guarantee that the transparent union
// is in fact passed as a pointer.
- if (!ArgType->isAnyPointerType() && !ArgType->isBlockPointerType())
+ if (!ArgType->isPointerOrObjCObjectPointerType() && !ArgType->isBlockPointerType())
return nullptr;
// First, check attribute on parameter itself.
if (PVD) {
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 1868b57cea9039..f61c2f9d32861c 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -7067,7 +7067,7 @@ class MappableExprsHandler {
// reference. References are ignored for mapping purposes.
QualType Ty =
I->getAssociatedDeclaration()->getType().getNonReferenceType();
- if (Ty->isAnyPointerType() && std::next(I) != CE) {
+ if (Ty->isPointerOrObjCObjectPointerType() && std::next(I) != CE) {
// No need to generate individual map information for the pointer, it
// can be associated with the combined storage if shared memory mode is
// active or the base declaration is not global variable.
@@ -7192,8 +7192,8 @@ class MappableExprsHandler {
OAShE ||
(OASE && ArraySectionExpr::getBaseOriginalType(OASE)
.getCanonicalType()
- ->isAnyPointerType()) ||
- I->getAssociatedExpression()->getType()->isAnyPointerType();
+ ->isPointerOrObjCObjectPointerType()) ||
+ I->getAssociatedExpression()->getType()->isPointerOrObjCObjectPointerType();
bool IsMemberReference = isa<MemberExpr>(I->getAssociatedExpression()) &&
MapDecl &&
MapDecl->getType()->isLValueReferenceType();
@@ -7687,7 +7687,7 @@ class MappableExprsHandler {
// 'private ptr' and 'map to' flag. Return the right flags if the captured
// declaration is known as first-private in this handler.
if (FirstPrivateDecls.count(Cap.getCapturedVar())) {
- if (Cap.getCapturedVar()->getType()->isAnyPointerType())
+ if (Cap.getCapturedVar()->getType()->isPointerOrObjCObjectPointerType())
return OpenMPOffloadMappingFlags::OMP_MAP_TO |
OpenMPOffloadMappingFlags::OMP_MAP_PTR_AND_OBJ;
return OpenMPOffloadMappingFlags::OMP_MAP_PRIVATE |
@@ -8032,7 +8032,7 @@ class MappableExprsHandler {
const ValueDecl *VD = cast_or_null<ValueDecl>(D);
bool HasMapBasePtr = false;
bool HasMapArraySec = false;
- if (VD && VD->getType()->isAnyPointerType()) {
+ if (VD && VD->getType()->isPointerOrObjCObjectPointerType()) {
for (const auto &M : Data.second) {
HasMapBasePtr = any_of(M, [](const MapInfo &L) {
return isa_and_present<DeclRefExpr>(L.VarRef);
@@ -8533,9 +8533,9 @@ class MappableExprsHandler {
assert(VDecl == VD && "We got information for the wrong declaration??");
assert(!Components.empty() &&
"Not expecting declaration with no component lists.");
- if (VD && E && VD->getType()->isAnyPointerType() && isa<DeclRefExpr>(E))
+ if (VD && E && VD->getType()->isPointerOrObjCObjectPointerType() && isa<DeclRefExpr>(E))
HasMapBasePtr = true;
- if (VD && E && VD->getType()->isAnyPointerType() &&
+ if (VD && E && VD->getType()->isPointerOrObjCObjectPointerType() &&
(isa<ArraySectionExpr>(E) || isa<ArraySubscriptExpr>(E)))
HasMapArraySec = true;
DeclComponentLists.emplace_back(Components, C->getMapType(),
@@ -8752,7 +8752,7 @@ class MappableExprsHandler {
CombinedInfo.DevicePtrDecls.push_back(nullptr);
CombinedInfo.DevicePointers.push_back(DeviceInfoTy::None);
CombinedInfo.Pointers.push_back(CV);
- if (!RI.getType()->isAnyPointerType()) {
+ if (!RI.getType()->isPointerOrObjCObjectPointerType()) {
// We have to signal to the runtime captures passed by value that are
// not pointers.
CombinedInfo.Types.push_back(
@@ -8784,7 +8784,7 @@ class MappableExprsHandler {
CombinedInfo.BasePointers.push_back(CV);
CombinedInfo.DevicePtrDecls.push_back(nullptr);
CombinedInfo.DevicePointers.push_back(DeviceInfoTy::None);
- if (I != FirstPrivateDecls.end() && ElementType->isAnyPointerType()) {
+ if (I != FirstPrivateDecls.end() && ElementType->isPointerOrObjCObjectPointerType()) {
Address PtrAddr = CGF.EmitLoadOfReference(CGF.MakeAddrLValue(
CV, ElementType, CGF.getContext().getDeclAlign(VD),
AlignmentSource::Decl));
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index dbb19f2a8d825a..23389a45e2639a 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -216,7 +216,7 @@ class CheckVarsEscapingDeclContext final
if (((Attr->getCaptureKind() != OMPC_map) &&
!isOpenMPPrivate(Attr->getCaptureKind())) ||
((Attr->getCaptureKind() == OMPC_map) &&
- !FD->getType()->isAnyPointerType()))
+ !FD->getType()->isPointerOrObjCObjectPointerType()))
return;
}
if (!FD->getType()->isReferenceType()) {
@@ -1962,7 +1962,7 @@ llvm::Function *CGOpenMPRuntimeGPU::createParallelDataSharingWrapper(
CGFContext.getPointerType(ElemTy),
CI->getLocation());
if (CI->capturesVariableByCopy() &&
- !CI->getCapturedVar()->getType()->isAnyPointerType()) {
+ !CI->getCapturedVar()->getType()->isPointerOrObjCObjectPointerType()) {
Arg = castValueToType(CGF, Arg, ElemTy, CGFContext.getUIntPtrType(),
CI->getLocation());
}
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index 2b4ca65e169a6e..d21ef3acd6b380 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -394,7 +394,7 @@ void CodeGenFunction::GenerateOpenMPCapturedVars(
// If the field is not a pointer, we need to save the actual value
// and load it as a void pointer.
- if (!CurField->getType()->isAnyPointerType()) {
+ if (!CurField->getType()->isPointerOrObjCObjectPointerType()) {
ASTContext &Ctx = getContext();
Address DstAddr = CreateMemTemp(
Ctx.getUIntPtrType(),
@@ -520,7 +520,7 @@ static llvm::Function *emitOutlinedFunctionPrologue(
// deal with pointers. We can pass in the same way the VLA type sizes to the
// outlined function.
if (FO.UIntPtrCastRequired &&
- ((I->capturesVariableByCopy() && !ArgType->isAnyPointerType()) ||
+ ((I->capturesVariableByCopy() && !ArgType->isPointerOrObjCObjectPointerType()) ||
I->capturesVariableArrayType()))
ArgType = Ctx.getUIntPtrType();
@@ -601,7 +601,7 @@ static llvm::Function *emitOutlinedFunctionPrologue(
}
// If we are capturing a pointer by copy we don't need to do anything, just
// use the value that we get from the arguments.
- if (I->capturesVariableByCopy() && FD->getType()->isAnyPointerType()) {
+ if (I->capturesVariableByCopy() && FD->getType()->isPointerOrObjCObjectPointerType()) {
const VarDecl *CurVD = I->getCapturedVar();
if (!FO.RegisterCastedArgsOnly)
LocalAddrs.insert({Args[Cnt], {CurVD, LocalAddr}});
@@ -638,7 +638,7 @@ static llvm::Function *emitOutlinedFunctionPrologue(
{Args[Cnt], {Var, ArgAddr.withAlignment(Ctx.getDeclAlign(Var))}});
}
} else if (I->capturesVariableByCopy()) {
- assert(!FD->getType()->isAnyPointerType() &&
+ assert(!FD->getType()->isPointerOrObjCObjectPointerType() &&
"Not expecting a captured pointer.");
const VarDecl *Var = I->getCapturedVar();
LocalAddrs.insert({Args[Cnt],
diff --git a/clang/lib/CodeGen/CodeGenTypes.cpp b/clang/lib/CodeGen/CodeGenTypes.cpp
index 09191a4901f493..90deed4d48db7e 100644
--- a/clang/lib/CodeGen/CodeGenTypes.cpp
+++ b/clang/lib/CodeGen/CodeGenTypes.cpp
@@ -832,7 +832,7 @@ CodeGenTypes::getCGRecordLayout(const RecordDecl *RD) {
}
bool CodeGenTypes::isPointerZeroInitializable(QualType T) {
- assert((T->isAnyPointerType() || T->isBlockPointerType()) && "Invalid type");
+ assert((T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType()) && "Invalid type");
return isZeroInitializable(T);
}
diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp
index 66c03863293c2f..9057a1247f0edd 100644
--- a/clang/lib/ExtractAPI/DeclarationFragments.cpp
+++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp
@@ -513,7 +513,7 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType(
// ^---------------- ^
// pointer to const int
// ```
- if (SQT.Ty->isAnyPointerType())
+ if (SQT.Ty->isPointerOrObjCObjectPointerType())
return TypeFragments.appendSpace().append(std::move(QualsFragments));
return QualsFragments.appendSpace().append(std::move(TypeFragments));
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 8df5465ad990da..5aa578c8876e3a 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2137,7 +2137,7 @@ void AugmentedCodeCompleteConsumer::ProcessCodeCompleteResults(Sema &S,
if (C->Kind == CXCursor_MacroDefinition) {
Priority = getMacroUsagePriority(C->Completion->getTypedText(),
S.getLangOpts(),
- Context.getPreferredType()->isAnyPointerType());
+ Context.getPreferredType()->isPointerOrObjCObjectPointerType());
} else if (C->Type) {
CanQualType Expected
= S.Context.getCanonicalType(
diff --git a/clang/lib/Sema/SemaAPINotes.cpp b/clang/lib/Sema/SemaAPINotes.cpp
index 4f79775bc5e913..5cbee667924cd5 100644
--- a/clang/lib/Sema/SemaAPINotes.cpp
+++ b/clang/lib/Sema/SemaAPINotes.cpp
@@ -48,7 +48,7 @@ static bool isIndirectPointerType(QualType Type) {
if (Pointee.isNull())
return false;
- return Pointee->isAnyPointerType() || Pointee->isObjCObjectPointerType() ||
+ return Pointee->isPointerOrObjCObjectPointerType() || Pointee->isObjCObjectPointerType() ||
Pointee->isMemberPointerType();
}
diff --git a/clang/lib/Sema/SemaARM.cpp b/clang/lib/Sema/SemaARM.cpp
index db418d80e0e09c..82d5e33a7e8078 100644
--- a/clang/lib/Sema/SemaARM.cpp
+++ b/clang/lib/Sema/SemaARM.cpp
@@ -37,7 +37,7 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
if (FirstArg.isInvalid())
return true;
QualType FirstArgType = FirstArg.get()->getType();
- if (!FirstArgType->isAnyPointerType())
+ if (!FirstArgType->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer)
<< "first" << FirstArgType << Arg0->getSourceRange();
TheCall->setArg(0, FirstArg.get());
@@ -64,7 +64,7 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
if (FirstArg.isInvalid())
return true;
QualType FirstArgType = FirstArg.get()->getType();
- if (!FirstArgType->isAnyPointerType())
+ if (!FirstArgType->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer)
<< "first" << FirstArgType << Arg0->getSourceRange();
TheCall->setArg(0, FirstArg.get());
@@ -86,7 +86,7 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
if (FirstArg.isInvalid())
return true;
QualType FirstArgType = FirstArg.get()->getType();
- if (!FirstArgType->isAnyPointerType())
+ if (!FirstArgType->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer)
<< "first" << FirstArgType << Arg0->getSourceRange();
@@ -108,7 +108,7 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
return true;
QualType FirstArgType = FirstArg.get()->getType();
- if (!FirstArgType->isAnyPointerType())
+ if (!FirstArgType->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer)
<< "first" << FirstArgType << Arg0->getSourceRange();
TheCall->setArg(0, FirstArg.get());
@@ -138,17 +138,17 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
};
// argument should be either a pointer or null
- if (!ArgTypeA->isAnyPointerType() && !isNull(ArgA))
+ if (!ArgTypeA->isPointerOrObjCObjectPointerType() && !isNull(ArgA))
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer)
<< "first" << ArgTypeA << ArgA->getSourceRange();
- if (!ArgTypeB->isAnyPointerType() && !isNull(ArgB))
+ if (!ArgTypeB->isPointerOrObjCObjectPointerType() && !isNull(ArgB))
return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer)
<< "second" << ArgTypeB << ArgB->getSourceRange();
// Ensure Pointee types are compatible
- if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) &&
- ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {
+ if (ArgTypeA->isPointerOrObjCObjectPointerType() && !isNull(ArgA) &&
+ ArgTypeB->isPointerOrObjCObjectPointerType() && !isNull(ArgB)) {
QualType pointeeA = ArgTypeA->getPointeeType();
QualType pointeeB = ArgTypeB->getPointeeType();
if (!Context.typesAreCompatible(
@@ -162,7 +162,7 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
}
// at least one argument should be pointer type
- if (!ArgTypeA->isAnyPointerType() && !ArgTypeB->isAnyPointerType())
+ if (!ArgTypeA->isPointerOrObjCObjectPointerType() && !ArgTypeB->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer)
<< ArgTypeA << ArgTypeB << ArgA->getSourceRange();
@@ -924,7 +924,7 @@ bool SemaARM::CheckARMBuiltinExclusiveCall(unsigned BuiltinID,
TheCall->setArg(IsLdrex ? 0 : 1, PointerArg);
// In general, we allow ints, floats and pointers to be loaded and stored.
- if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
+ if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType()) {
Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr)
<< PointerArg->getType() << 0 << PointerArg->getSourceRange();
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp
index f98857f852b5af..bcc777ec62bc3b 100644
--- a/clang/lib/Sema/SemaCast.cpp
+++ b/clang/lib/Sema/SemaCast.cpp
@@ -596,7 +596,7 @@ static CastAwayConstnessKind
unwrapCastAwayConstnessLevel(ASTContext &Context, QualType &T1, QualType &T2) {
enum { None, Ptr, MemPtr, BlockPtr, Array };
auto Classify = [](QualType T) {
- if (T->isAnyPointerType()) return Ptr;
+ if (T->isPointerOrObjCObjectPointerType()) return Ptr;
if (T->isMemberPointerType()) return MemPtr;
if (T->isBlockPointerType()) return BlockPtr;
// We somewhat-arbitrarily don't look through VLA types here. This is at
@@ -682,10 +682,10 @@ CastsAwayConstness(Sema &Self, QualType SrcType, QualType DestType,
return CastAwayConstnessKind::CACK_None;
if (!DestType->isReferenceType()) {
- assert((SrcType->isAnyPointerType() || SrcType->isMemberPointerType() ||
+ assert((SrcType->isPointerOrObjCObjectPointerType() || SrcType->isMemberPointerType() ||
SrcType->isBlockPointerType()) &&
"Source type is not pointer or pointer to member.");
- assert((DestType->isAnyPointerType() || DestType->isMemberPointerType() ||
+ assert((DestType->isPointerOrObjCObjectPointerType() || DestType->isMemberPointerType() ||
DestType->isBlockPointerType()) &&
"Destination type is not pointer or pointer to member.");
}
@@ -2450,7 +2450,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
Kind = CK_NoOp;
TryCastResult Result = TC_NotApplicable;
if (SrcType->isIntegralOrEnumerationType() ||
- SrcType->isAnyPointerType() ||
+ SrcType->isPointerOrObjCObjectPointerType() ||
SrcType->isMemberPointerType() ||
SrcType->isBlockPointerType()) {
Result = TC_Success;
@@ -2458,9 +2458,9 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
return Result;
}
- bool destIsPtr = DestType->isAnyPointerType() ||
+ bool destIsPtr = DestType->isPointerOrObjCObjectPointerType() ||
DestType->isBlockPointerType();
- bool srcIsPtr = SrcType->isAnyPointerType() ||
+ bool srcIsPtr = SrcType->isPointerOrObjCObjectPointerType() ||
SrcType->isBlockPointerType();
if (!destIsPtr && !srcIsPtr) {
// Except for std::nullptr_t->integer and lvalue->reference, which are
@@ -2902,8 +2902,8 @@ static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,
QualType SrcType = SrcExpr.get()->getType();
if (DestType.getUnqualifiedType()->isVoidType())
return;
- if ((SrcType->isAnyPointerType() || SrcType->isBlockPointerType())
- && (DestType->isAnyPointerType() || DestType->isBlockPointerType()))
+ if ((SrcType->isPointerOrObjCObjectPointerType() || SrcType->isBlockPointerType())
+ && (DestType->isPointerOrObjCObjectPointerType() || DestType->isBlockPointerType()))
return;
if (SrcType->isIntegerType() && DestType->isIntegerType() &&
(SrcType->isBooleanType() == DestType->isBooleanType()) &&
@@ -3318,7 +3318,7 @@ static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
return;
QualType SrcType = SrcExpr.get()->getType();
- if (!((SrcType->isAnyPointerType() && DestType->isAnyPointerType()) ||
+ if (!((SrcType->isPointerOrObjCObjectPointerType() && DestType->isPointerOrObjCObjectPointerType()) ||
DestType->isLValueReferenceType()))
return;
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 881907ac311a30..629938ea30d6bb 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2571,7 +2571,7 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
bool ReturnsPointer = BuiltinID == Builtin::BIaddressof ||
BuiltinID == Builtin::BI__addressof;
if (!(Param->isReferenceType() &&
- (ReturnsPointer ? Result->isAnyPointerType()
+ (ReturnsPointer ? Result->isPointerOrObjCObjectPointerType()
: Result->isReferenceType()) &&
Context.hasSameUnqualifiedType(Param->getPointeeType(),
Result->getPointeeType()))) {
@@ -4281,7 +4281,7 @@ ExprResult Sema::BuiltinAtomicOverloaded(ExprResult TheCallResult) {
}
QualType ValType = pointerType->getPointeeType();
- if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
+ if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType()) {
Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr)
<< FirstArg->getType() << 0 << FirstArg->getSourceRange();
@@ -4658,7 +4658,7 @@ ExprResult Sema::BuiltinNontemporalOverloaded(ExprResult TheCallResult) {
// Strip any qualifiers off ValType.
ValType = ValType.getUnqualifiedType();
- if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
+ if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType() &&
!ValType->isVectorType()) {
Diag(DRE->getBeginLoc(),
@@ -10950,7 +10950,7 @@ static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T,
return;
// Return if target type is a safe conversion.
- if (T->isAnyPointerType() || T->isBlockPointerType() ||
+ if (T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType() ||
T->isMemberPointerType() || !T->isScalarType() || T->isNullPtrType())
return;
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 1f398bb004fa30..91ee9685f6f750 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5012,7 +5012,7 @@ void SemaCodeCompletion::CodeCompleteExpression(
bool PreferredTypeIsPointer = false;
if (!Data.PreferredType.isNull()) {
- PreferredTypeIsPointer = Data.PreferredType->isAnyPointerType() ||
+ PreferredTypeIsPointer = Data.PreferredType->isPointerOrObjCObjectPointerType() ||
Data.PreferredType->isMemberPointerType() ||
Data.PreferredType->isBlockPointerType();
if (Data.PreferredType->isEnumeralType()) {
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 5b7275c316f74a..1dffa174f3c2f9 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -12265,7 +12265,7 @@ bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
// restricted prior to C++17.
if (auto *RT = T->getAs<ReferenceType>())
T = RT->getPointeeType();
- else if (T->isAnyPointerType())
+ else if (T->isPointerOrObjCObjectPointerType())
T = T->getPointeeType();
else if (auto *MPT = T->getAs<MemberPointerType>())
T = MPT->getPointeeType();
@@ -12499,7 +12499,7 @@ void Sema::CheckMSVCRTEntryPoint(FunctionDecl *FD) {
// Set an implicit return of 'zero' if the function can return some integral,
// enumeration, pointer or nullptr type.
if (FT->getReturnType()->isIntegralOrEnumerationType() ||
- FT->getReturnType()->isAnyPointerType() ||
+ FT->getReturnType()->isPointerOrObjCObjectPointerType() ||
FT->getReturnType()->isNullPtrType())
// DllMain is exempt because a return value of zero means it failed.
if (FD->getName() != "DllMain")
@@ -16099,7 +16099,7 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
auto findBeginLoc = [&]() {
// If the return type has `const` qualifier, we want to insert
// `static` before `const` (and not before the typename).
- if ((FD->getReturnType()->isAnyPointerType() &&
+ if ((FD->getReturnType()->isPointerOrObjCObjectPointerType() &&
FD->getReturnType()->getPointeeType().isConstQualified()) ||
FD->getReturnType().isConstQualified()) {
// But only do this if we can determine where the `const` is.
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index c1663f2d15c88b..6cf7c585529888 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -206,7 +206,7 @@ static bool threadSafetyCheckIsPointer(Sema &S, const Decl *D,
const ParsedAttr &AL) {
const auto *VD = cast<ValueDecl>(D);
QualType QT = VD->getType();
- if (QT->isAnyPointerType())
+ if (QT->isPointerOrObjCObjectPointerType())
return true;
if (const auto *RT = QT->getAs<RecordType>()) {
@@ -1267,13 +1267,13 @@ bool Sema::isValidPointerAttrType(QualType T, bool RefOkay) {
RecordDecl *UD = UT->getDecl();
for (const auto *I : UD->fields()) {
QualType QT = I->getType();
- if (QT->isAnyPointerType() || QT->isBlockPointerType())
+ if (QT->isPointerOrObjCObjectPointerType() || QT->isBlockPointerType())
return true;
}
}
}
- return T->isAnyPointerType() || T->isBlockPointerType();
+ return T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType();
}
static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL,
@@ -1545,7 +1545,7 @@ static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
switch (K) {
case OwnershipAttr::Takes:
case OwnershipAttr::Holds:
- if (!T->isAnyPointerType() && !T->isBlockPointerType())
+ if (!T->isPointerOrObjCObjectPointerType() && !T->isBlockPointerType())
Err = 0;
break;
case OwnershipAttr::Returns:
@@ -1763,7 +1763,7 @@ static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
QualType ResultType = getFunctionOrMethodResultType(D);
- if (ResultType->isAnyPointerType() || ResultType->isBlockPointerType()) {
+ if (ResultType->isPointerOrObjCObjectPointerType() || ResultType->isBlockPointerType()) {
D->addAttr(::new (S.Context) RestrictAttr(S.Context, AL));
return;
}
@@ -4129,7 +4129,7 @@ void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {
else
llvm_unreachable("Unknown decl type for align_value");
- if (!T->isDependentType() && !T->isAnyPointerType() &&
+ if (!T->isDependentType() && !T->isPointerOrObjCObjectPointerType() &&
!T->isReferenceType() && !T->isMemberPointerType()) {
Diag(AttrLoc, diag::warn_attribute_pointer_or_reference_only)
<< &TmpAttr << T << D->getSourceRange();
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index ae40895980d90a..b1b0061a77c9a4 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -662,7 +662,7 @@ ExprResult Sema::DefaultLvalueConversion(Expr *E) {
// expressions of certain types in C++.
if (getLangOpts().CPlusPlus) {
if (T == Context.OverloadTy || T->isRecordType() ||
- (T->isDependentType() && !T->isAnyPointerType() &&
+ (T->isDependentType() && !T->isPointerOrObjCObjectPointerType() &&
!T->isMemberPointerType()))
return E;
}
@@ -7974,7 +7974,7 @@ static bool checkCondition(Sema &S, const Expr *Cond,
/// true otherwise.
static bool checkConditionalNullPointer(Sema &S, ExprResult &NullExpr,
QualType PointerTy) {
- if ((!PointerTy->isAnyPointerType() && !PointerTy->isBlockPointerType()) ||
+ if ((!PointerTy->isPointerOrObjCObjectPointerType() && !PointerTy->isBlockPointerType()) ||
!NullExpr.get()->isNullPointerConstant(S.Context,
Expr::NPC_ValueDependentIsNull))
return true;
@@ -8725,7 +8725,7 @@ static void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc,
static QualType computeConditionalNullability(QualType ResTy, bool IsBin,
QualType LHSTy, QualType RHSTy,
ASTContext &Ctx) {
- if (!ResTy->isAnyPointerType())
+ if (!ResTy->isPointerOrObjCObjectPointerType())
return ResTy;
auto GetNullability = [](QualType Ty) {
@@ -10508,7 +10508,7 @@ static void checkArithmeticNull(Sema &S, ExprResult &LHS, ExprResult &RHS,
// The rest of the operations only make sense with a null pointer
// if the other expression is a pointer.
- if (LHSNull == RHSNull || NonNullType->isAnyPointerType() ||
+ if (LHSNull == RHSNull || NonNullType->isPointerOrObjCObjectPointerType() ||
NonNullType->canDecayToPointerType())
return;
@@ -10709,8 +10709,8 @@ static void diagnoseSubtractionOnNullPointer(Sema &S, SourceLocation Loc,
/// Diagnose invalid arithmetic on two function pointers.
static void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc,
Expr *LHS, Expr *RHS) {
- assert(LHS->getType()->isAnyPointerType());
- assert(RHS->getType()->isAnyPointerType());
+ assert(LHS->getType()->isPointerOrObjCObjectPointerType());
+ assert(RHS->getType()->isPointerOrObjCObjectPointerType());
S.Diag(Loc, S.getLangOpts().CPlusPlus
? diag::err_typecheck_pointer_arith_function_type
: diag::ext_gnu_ptr_func_arith)
@@ -10725,7 +10725,7 @@ static void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc,
/// Diagnose invalid arithmetic on a function pointer.
static void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc,
Expr *Pointer) {
- assert(Pointer->getType()->isAnyPointerType());
+ assert(Pointer->getType()->isPointerOrObjCObjectPointerType());
S.Diag(Loc, S.getLangOpts().CPlusPlus
? diag::err_typecheck_pointer_arith_function_type
: diag::ext_gnu_ptr_func_arith)
@@ -10743,7 +10743,7 @@ static bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc,
if (const AtomicType *ResAtomicType = ResType->getAs<AtomicType>())
ResType = ResAtomicType->getValueType();
- assert(ResType->isAnyPointerType());
+ assert(ResType->isPointerOrObjCObjectPointerType());
QualType PointeeTy = ResType->getPointeeType();
return S.RequireCompleteSizedType(
Loc, PointeeTy,
@@ -10765,7 +10765,7 @@ static bool checkArithmeticOpPointerOperand(Sema &S, SourceLocation Loc,
if (const AtomicType *ResAtomicType = ResType->getAs<AtomicType>())
ResType = ResAtomicType->getValueType();
- if (!ResType->isAnyPointerType()) return true;
+ if (!ResType->isPointerOrObjCObjectPointerType()) return true;
QualType PointeeTy = ResType->getPointeeType();
if (PointeeTy->isVoidType()) {
@@ -10793,8 +10793,8 @@ static bool checkArithmeticOpPointerOperand(Sema &S, SourceLocation Loc,
/// \returns True when the operand is valid to use (even if as an extension).
static bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc,
Expr *LHSExpr, Expr *RHSExpr) {
- bool isLHSPointer = LHSExpr->getType()->isAnyPointerType();
- bool isRHSPointer = RHSExpr->getType()->isAnyPointerType();
+ bool isLHSPointer = LHSExpr->getType()->isPointerOrObjCObjectPointerType();
+ bool isRHSPointer = RHSExpr->getType()->isPointerOrObjCObjectPointerType();
if (!isLHSPointer && !isRHSPointer) return true;
QualType LHSPointeeTy, RHSPointeeTy;
@@ -10892,7 +10892,7 @@ static void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc,
const QualType StringType = StringRefExpr->getType();
// Return if not a PointerType.
- if (!StringType->isAnyPointerType())
+ if (!StringType->isPointerOrObjCObjectPointerType())
return;
// Return if not a CharacterType.
@@ -10928,8 +10928,8 @@ static void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc,
/// Emit error when two pointers are incompatible.
static void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc,
Expr *LHSExpr, Expr *RHSExpr) {
- assert(LHSExpr->getType()->isAnyPointerType());
- assert(RHSExpr->getType()->isAnyPointerType());
+ assert(LHSExpr->getType()->isPointerOrObjCObjectPointerType());
+ assert(RHSExpr->getType()->isPointerOrObjCObjectPointerType());
S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
<< LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange()
<< RHSExpr->getSourceRange();
@@ -11007,7 +11007,7 @@ QualType Sema::CheckAdditionOperands(ExprResult &LHS, ExprResult &RHS,
return InvalidOperands(Loc, LHS, RHS);
}
}
- assert(PExp->getType()->isAnyPointerType());
+ assert(PExp->getType()->isPointerOrObjCObjectPointerType());
if (!IExp->getType()->isIntegerType())
return InvalidOperands(Loc, LHS, RHS);
@@ -11108,7 +11108,7 @@ QualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS,
}
// Either ptr - int or ptr - ptr.
- if (LHS.get()->getType()->isAnyPointerType()) {
+ if (LHS.get()->getType()->isPointerOrObjCObjectPointerType()) {
QualType lpointee = LHS.get()->getType()->getPointeeType();
// Diagnose bad cases where we step over interface counts.
@@ -11594,8 +11594,8 @@ static bool convertPointersToCompositeType(Sema &S, SourceLocation Loc,
QualType T = S.FindCompositePointerType(Loc, LHS, RHS);
if (T.isNull()) {
- if ((LHSType->isAnyPointerType() || LHSType->isMemberPointerType()) &&
- (RHSType->isAnyPointerType() || RHSType->isMemberPointerType()))
+ if ((LHSType->isPointerOrObjCObjectPointerType() || LHSType->isMemberPointerType()) &&
+ (RHSType->isPointerOrObjCObjectPointerType() || RHSType->isMemberPointerType()))
diagnoseDistinctPointerComparison(S, Loc, LHS, RHS, /*isError*/true);
else
S.InvalidOperands(Loc, LHS, RHS);
@@ -12165,10 +12165,10 @@ static QualType checkArithmeticOrEnumeralCompare(Sema &S, ExprResult &LHS,
}
void Sema::CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE) {
- if (!NullE.get()->getType()->isAnyPointerType())
+ if (!NullE.get()->getType()->isPointerOrObjCObjectPointerType())
return;
int NullValue = PP.isMacroDefined("NULL") ? 0 : 1;
- if (!E.get()->getType()->isAnyPointerType() &&
+ if (!E.get()->getType()->isPointerOrObjCObjectPointerType() &&
E.get()->isNullPointerConstant(Context,
Expr::NPC_ValueDependentIsNotNull) ==
Expr::NPCK_ZeroExpression) {
@@ -12605,8 +12605,8 @@ QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS,
return computeResultTy();
}
}
- if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) ||
- (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {
+ if ((LHSType->isPointerOrObjCObjectPointerType() && RHSType->isIntegerType()) ||
+ (LHSType->isIntegerType() && RHSType->isPointerOrObjCObjectPointerType())) {
unsigned DiagID = 0;
bool isError = false;
if (LangOpts.DebuggerSupport) {
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 1e39d69e8b230f..7ba98ed49ebb76 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -5293,7 +5293,7 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
return false;
return T->isIncompleteArrayType();
case UTT_IsPointer:
- return T->isAnyPointerType();
+ return T->isPointerOrObjCObjectPointerType();
case UTT_IsLvalueReference:
return T->isLValueReferenceType();
case UTT_IsRvalueReference:
@@ -7276,9 +7276,9 @@ QualType Sema::FindCompositePointerType(SourceLocation Loc,
// where at least one is a pointer or pointer to member type or
// std::nullptr_t is:
- bool T1IsPointerLike = T1->isAnyPointerType() || T1->isMemberPointerType() ||
+ bool T1IsPointerLike = T1->isPointerOrObjCObjectPointerType() || T1->isMemberPointerType() ||
T1->isNullPtrType();
- bool T2IsPointerLike = T2->isAnyPointerType() || T2->isMemberPointerType() ||
+ bool T2IsPointerLike = T2->isPointerOrObjCObjectPointerType() || T2->isMemberPointerType() ||
T2->isNullPtrType();
if (!T1IsPointerLike && !T2IsPointerLike)
return QualType();
diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp
index e1171d4284c763..7a49bed5500675 100644
--- a/clang/lib/Sema/SemaLookup.cpp
+++ b/clang/lib/Sema/SemaLookup.cpp
@@ -5481,7 +5481,7 @@ bool FunctionCallFilterCCC::ValidateCandidate(const TypoCorrection &candidate) {
QualType ValType = cast<ValueDecl>(ND)->getType();
if (ValType.isNull())
continue;
- if (ValType->isAnyPointerType() || ValType->isReferenceType())
+ if (ValType->isPointerOrObjCObjectPointerType() || ValType->isReferenceType())
ValType = ValType->getPointeeType();
if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
if (FPT->getNumParams() == NumArgs)
diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp
index 9ded913638fb3e..47db0d9a089160 100644
--- a/clang/lib/Sema/SemaOpenACC.cpp
+++ b/clang/lib/Sema/SemaOpenACC.cpp
@@ -2635,7 +2635,7 @@ ExprResult SemaOpenACC::ActOnArraySectionExpr(Expr *Base, SourceLocation LBLoc,
QualType OriginalBaseTy = ArraySectionExpr::getBaseOriginalType(Base);
QualType ResultTy;
if (!Base->isTypeDependent()) {
- if (OriginalBaseTy->isAnyPointerType()) {
+ if (OriginalBaseTy->isPointerOrObjCObjectPointerType()) {
ResultTy = OriginalBaseTy->getPointeeType();
} else if (OriginalBaseTy->isArrayType()) {
ResultTy = OriginalBaseTy->getAsArrayTypeUnsafe()->getElementType();
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index b83b2b12f4a230..3849733973327e 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -2090,7 +2090,7 @@ getVariableCategoryFromDecl(const LangOptions &LO, const ValueDecl *VD) {
return OMPC_DEFAULTMAP_scalar;
return OMPC_DEFAULTMAP_aggregate;
}
- if (VD->getType().getNonReferenceType()->isAnyPointerType())
+ if (VD->getType().getNonReferenceType()->isPointerOrObjCObjectPointerType())
return OMPC_DEFAULTMAP_pointer;
if (VD->getType().getNonReferenceType()->isScalarType())
return OMPC_DEFAULTMAP_scalar;
@@ -2222,7 +2222,7 @@ bool SemaOpenMP::isOpenMPCapturedByRef(const ValueDecl *D, unsigned Level,
// (except for reduction variables).
// Defaultmap scalar is mutual exclusive to defaultmap pointer
IsByRef = (DSAStack->isForceCaptureByReferenceInTargetExecutable() &&
- !Ty->isAnyPointerType()) ||
+ !Ty->isPointerOrObjCObjectPointerType()) ||
!Ty->isScalarType() ||
DSAStack->isDefaultmapCapturedByRef(
Level, getVariableCategoryFromDecl(getLangOpts(), D)) ||
@@ -8879,7 +8879,7 @@ std::pair<Expr *, Expr *> OpenMPIterationSpaceChecker::buildMinMaxValues(
return std::make_pair(nullptr, nullptr);
// Convert to the ptrdiff_t, if original type is pointer.
- if (VarType->isAnyPointerType() &&
+ if (VarType->isPointerOrObjCObjectPointerType() &&
!SemaRef.Context.hasSameType(
Diff.get()->getType(),
SemaRef.Context.getUnsignedPointerDiffType())) {
@@ -17344,7 +17344,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
OpenMPDirectiveKind CurrDir = DSAStack->getCurrentDirective();
// Variably modified types are not supported for tasks.
- if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() &&
+ if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType() &&
isOpenMPTaskingDirective(CurrDir)) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_private) << Type
@@ -17619,7 +17619,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
}
// Variably modified types are not supported for tasks.
- if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() &&
+ if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType() &&
isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_firstprivate) << Type
@@ -19744,7 +19744,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
}
// Variably modified types are not supported.
- if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {
+ if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType()) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_copyprivate) << Type
<< getOpenMPDirectiveName(DSAStack->getCurrentDirective());
@@ -20490,7 +20490,7 @@ class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {
bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {
Expr *E = AE->getBase()->IgnoreParenImpCasts();
- if (!E->getType()->isAnyPointerType() && !E->getType()->isArrayType()) {
+ if (!E->getType()->isPointerOrObjCObjectPointerType() && !E->getType()->isArrayType()) {
if (!NoDiagnose) {
SemaRef.Diag(ELoc, diag::err_omp_expected_base_var_name)
<< 0 << AE->getSourceRange();
@@ -20540,7 +20540,7 @@ class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {
if (CurType->isReferenceType())
CurType = CurType->getPointeeType();
- bool IsPointer = CurType->isAnyPointerType();
+ bool IsPointer = CurType->isPointerOrObjCObjectPointerType();
if (!IsPointer && !CurType->isArrayType()) {
SemaRef.Diag(ELoc, diag::err_omp_expected_base_var_name)
@@ -20814,7 +20814,7 @@ static bool checkMapConflicts(
SI->getAssociatedExpression())) {
Type = OASE->getBase()->getType()->getPointeeType();
}
- if (Type.isNull() || Type->isAnyPointerType() ||
+ if (Type.isNull() || Type->isPointerOrObjCObjectPointerType() ||
checkArrayExpressionDoesNotReferToWholeSize(
SemaRef, SI->getAssociatedExpression(), Type))
break;
@@ -20866,7 +20866,7 @@ static bool checkMapConflicts(
// storage in the device data environment, all of the original storage
// must have corresponding storage in the device data environment.
//
- if (DerivedType->isAnyPointerType()) {
+ if (DerivedType->isPointerOrObjCObjectPointerType()) {
if (CI == CE || SI == SE) {
SemaRef.Diag(
DerivedLoc,
@@ -20910,7 +20910,7 @@ static bool checkMapConflicts(
if (It != Begin && It->getAssociatedDeclaration()
->getType()
.getCanonicalType()
- ->isAnyPointerType()) {
+ ->isPointerOrObjCObjectPointerType()) {
IsEnclosedByDataEnvironmentExpr = false;
EnclosingExpr = nullptr;
return false;
@@ -23776,7 +23776,7 @@ ExprResult SemaOpenMP::ActOnOMPArraySectionExpr(
// Perform default conversions.
QualType OriginalTy = ArraySectionExpr::getBaseOriginalType(Base);
QualType ResultTy;
- if (OriginalTy->isAnyPointerType()) {
+ if (OriginalTy->isPointerOrObjCObjectPointerType()) {
ResultTy = OriginalTy->getPointeeType();
} else if (OriginalTy->isArrayType()) {
ResultTy = OriginalTy->getAsArrayTypeUnsafe()->getElementType();
@@ -23843,7 +23843,7 @@ ExprResult SemaOpenMP::ActOnOMPArraySectionExpr(
diag::err_omp_section_incomplete_type, Base))
return ExprError();
- if (LowerBound && !OriginalTy->isAnyPointerType()) {
+ if (LowerBound && !OriginalTy->isPointerOrObjCObjectPointerType()) {
Expr::EvalResult Result;
if (LowerBound->EvaluateAsInt(Result, Context)) {
// OpenMP 5.0, [2.1.5 Array Sections]
@@ -24010,7 +24010,7 @@ ExprResult SemaOpenMP::ActOnOMPIteratorExpr(Scope *S,
DeclTy->containsUnexpandedParameterPack() ||
DeclTy->isInstantiationDependentType();
if (!IsDeclTyDependent) {
- if (!DeclTy->isIntegralType(Context) && !DeclTy->isAnyPointerType()) {
+ if (!DeclTy->isIntegralType(Context) && !DeclTy->isPointerOrObjCObjectPointerType()) {
// OpenMP 5.0, 2.1.6 Iterators, Restrictions, C/C++
// The iterator-type must be an integral or pointer type.
Diag(StartLoc, diag::err_omp_iterator_not_integral_or_pointer)
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 34c287926b1d7d..dc944763095d5e 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -301,7 +301,7 @@ isPointerConversionToVoidPointer(ASTContext& Context) const {
if (First == ICK_Array_To_Pointer)
FromType = Context.getArrayDecayedType(FromType);
- if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
+ if (Second == ICK_Pointer_Conversion && FromType->isPointerOrObjCObjectPointerType())
if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
return ToPtrType->getPointeeType()->isVoidType();
@@ -2371,7 +2371,7 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
FromType = ToType.getUnqualifiedType();
} else if (ToType->isBooleanType() &&
(FromType->isArithmeticType() ||
- FromType->isAnyPointerType() ||
+ FromType->isPointerOrObjCObjectPointerType() ||
FromType->isBlockPointerType() ||
FromType->isMemberPointerType())) {
// Boolean conversions (C++ 4.12).
@@ -3439,7 +3439,7 @@ bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
Kind = CK_BitCast;
- if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
+ if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isPointerOrObjCObjectPointerType() &&
From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
Expr::NPCK_ZeroExpression) {
if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
@@ -8632,7 +8632,7 @@ BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
// the type cannot be restrict-qualified.
if ((CVR & Qualifiers::Restrict) &&
(!hasRestrict ||
- (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
+ (!(PointeeTy->isPointerOrObjCObjectPointerType() || PointeeTy->isReferenceType()))))
continue;
// Build qualified pointee type.
@@ -9034,7 +9034,7 @@ class BuiltinOperatorOverloadBuilder {
// Add restrict version only if there are conversions to a restrict type
// and our candidate type is a non-restrict-qualified pointer.
- if (HasRestrict && CandidateTy->isAnyPointerType() &&
+ if (HasRestrict && CandidateTy->isPointerOrObjCObjectPointerType() &&
!CandidateTy.isRestrictQualified()) {
ParamTypes[0]
= S.Context.getLValueReferenceType(
diff --git a/clang/lib/Sema/SemaRISCV.cpp b/clang/lib/Sema/SemaRISCV.cpp
index 163f7129a7b42b..9aa0c13c759f82 100644
--- a/clang/lib/Sema/SemaRISCV.cpp
+++ b/clang/lib/Sema/SemaRISCV.cpp
@@ -1339,7 +1339,7 @@ bool SemaRISCV::CheckBuiltinFunctionCall(const TargetInfo &TI,
QualType ValType = PtrType->getPointeeType();
ValType = ValType.getUnqualifiedType();
- if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
+ if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType() &&
!ValType->isVectorType() && !ValType->isRVVSizelessBuiltinType()) {
Diag(DRE->getBeginLoc(),
diff --git a/clang/lib/Sema/SemaSYCL.cpp b/clang/lib/Sema/SemaSYCL.cpp
index ce53990fdcb18f..8c7769a1ec05c1 100644
--- a/clang/lib/Sema/SemaSYCL.cpp
+++ b/clang/lib/Sema/SemaSYCL.cpp
@@ -114,7 +114,7 @@ void SemaSYCL::deepTypeCheckForDevice(SourceLocation UsedAt,
// In case pointer/array/reference type is met get pointee type, then
// proceed with that type.
- while (NextTy->isAnyPointerType() || NextTy->isArrayType() ||
+ while (NextTy->isPointerOrObjCObjectPointerType() || NextTy->isArrayType() ||
NextTy->isReferenceType()) {
if (NextTy->isArrayType())
NextTy = QualType{NextTy->getArrayElementTypeNoTypeQual(), 0};
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 1c1f6e30ab7b83..d786689d6d853a 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -3795,7 +3795,7 @@ CheckOriginalCallArgDeduction(Sema &S, TemplateDeductionInfo &Info,
// function types (recursively).
bool ObjCLifetimeConversion = false;
QualType ResultTy;
- if ((A->isAnyPointerType() || A->isMemberPointerType()) &&
+ if ((A->isPointerOrObjCObjectPointerType() || A->isMemberPointerType()) &&
(S.IsQualificationConversion(A, DeducedA, false,
ObjCLifetimeConversion) ||
S.IsFunctionConversion(A, DeducedA, ResultTy)))
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 2ccf5a8e1d6f31..a7b386acbc2a5e 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -1595,7 +1595,7 @@ QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc,
unsigned DiagID = 0;
QualType ProblemTy;
- if (T->isAnyPointerType() || T->isReferenceType() ||
+ if (T->isPointerOrObjCObjectPointerType() || T->isReferenceType() ||
T->isMemberPointerType()) {
QualType EltTy;
if (T->isObjCObjectPointerType())
@@ -7365,10 +7365,10 @@ static bool CheckNullabilityTypeSpecifier(
const Type *pointeeType = nullptr;
if (Desugared->isArrayType())
pointeeType = Desugared->getArrayElementTypeNoTypeQual();
- else if (Desugared->isAnyPointerType())
+ else if (Desugared->isPointerOrObjCObjectPointerType())
pointeeType = Desugared->getPointeeType().getTypePtr();
- if (pointeeType && (pointeeType->isAnyPointerType() ||
+ if (pointeeType && (pointeeType->isPointerOrObjCObjectPointerType() ||
pointeeType->isObjCObjectPointerType() ||
pointeeType->isMemberPointerType())) {
S.Diag(NullabilityLoc, diag::err_nullability_cs_multilevel)
@@ -9807,7 +9807,7 @@ QualType Sema::BuiltinAddPointer(QualType BaseType, SourceLocation Loc) {
QualType Sema::BuiltinRemovePointer(QualType BaseType, SourceLocation Loc) {
// We don't want block pointers or ObjectiveC's id type.
- if (!BaseType->isAnyPointerType() || BaseType->isObjCIdType())
+ if (!BaseType->isPointerOrObjCObjectPointerType() || BaseType->isObjCIdType())
return BaseType;
return BaseType->getPointeeType();
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index 1a14f38e34f0e1..73eeac8789ba78 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -2649,7 +2649,7 @@ void CStringChecker::evalSprintfCommon(CheckerContext &C, const CallEvent &Call,
for (const auto &[ArgIdx, ArgExpr] : VariadicArguments) {
// We consider only string buffers
if (const QualType type = ArgExpr->getType();
- !type->isAnyPointerType() ||
+ !type->isPointerOrObjCObjectPointerType() ||
!type->getPointeeType()->isAnyCharacterType())
continue;
SourceArgExpr Source = {{ArgExpr, unsigned(ArgIdx)}};
diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
index c8fe5c2ccf384e..863358d2609545 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
@@ -30,7 +30,7 @@ static bool AreTypesCompatible(QualType Derived, QualType Ancestor,
// Right now don't compare the compatibility of pointers. That involves
// looking at subtyping relationships. FIXME: Future patch.
- if (Derived->isAnyPointerType() && Ancestor->isAnyPointerType())
+ if (Derived->isPointerOrObjCObjectPointerType() && Ancestor->isPointerOrObjCObjectPointerType())
return true;
return C.typesAreCompatible(Derived, Ancestor);
diff --git a/clang/lib/StaticAnalyzer/Checkers/FuchsiaHandleChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/FuchsiaHandleChecker.cpp
index 079bc61a87d963..171fb601ea80db 100644
--- a/clang/lib/StaticAnalyzer/Checkers/FuchsiaHandleChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/FuchsiaHandleChecker.cpp
@@ -274,7 +274,7 @@ class FuchsiaHandleSymbolVisitor final : public SymbolVisitor {
static SmallVector<SymbolRef, 1024>
getFuchsiaHandleSymbols(QualType QT, SVal Arg, ProgramStateRef State) {
int PtrToHandleLevel = 0;
- while (QT->isAnyPointerType() || QT->isReferenceType()) {
+ while (QT->isPointerOrObjCObjectPointerType() || QT->isReferenceType()) {
++PtrToHandleLevel;
QT = QT->getPointeeType();
}
diff --git a/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
index 04472bb3895a78..a3d27e13f4d702 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
@@ -311,7 +311,7 @@ static NullConstraint getNullConstraint(DefinedOrUnknownSVal Val,
}
static bool isValidPointerType(QualType T) {
- return T->isAnyPointerType() || T->isBlockPointerType();
+ return T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType();
}
const SymbolicRegion *
diff --git a/clang/lib/StaticAnalyzer/Checkers/TrustNonnullChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/TrustNonnullChecker.cpp
index e2f8bd541c9670..25c6eadb912649 100644
--- a/clang/lib/StaticAnalyzer/Checkers/TrustNonnullChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/TrustNonnullChecker.cpp
@@ -155,7 +155,7 @@ class TrustNonnullChecker : public Checker<check::PostCall,
/// a non-null pointer.
bool isNonNullPtr(const CallEvent &Call, CheckerContext &C) const {
QualType ExprRetType = Call.getResultType();
- if (!ExprRetType->isAnyPointerType())
+ if (!ExprRetType->isPointerOrObjCObjectPointerType())
return false;
if (getNullabilityAnnotation(ExprRetType) == Nullability::Nonnull)
diff --git a/clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp
index d80559c6a91522..0a0a22e2fdbca9 100644
--- a/clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp
@@ -42,7 +42,7 @@ class TrustReturnsNonnullChecker : public Checker<check::PostCall> {
bool isNonNullPtr(const CallEvent &Call) const {
QualType ExprRetType = Call.getResultType();
const Decl *CallDeclaration = Call.getDecl();
- if (!ExprRetType->isAnyPointerType() || !CallDeclaration)
+ if (!ExprRetType->isPointerOrObjCObjectPointerType() || !CallDeclaration)
return false;
return CallDeclaration->hasAttr<ReturnsNonNullAttr>();
diff --git a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h
index e35778e6480c5b..fae816bf7240f6 100644
--- a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h
+++ b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h
@@ -328,7 +328,7 @@ inline bool isPrimitiveType(const QualType &T) {
}
inline bool isDereferencableType(const QualType &T) {
- return T->isAnyPointerType() || T->isReferenceType();
+ return T->isPointerOrObjCObjectPointerType() || T->isReferenceType();
}
// Template method definitions.
diff --git a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
index a9b4dbb39b5bd6..41e7ff797c91dd 100644
--- a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
+++ b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
@@ -767,7 +767,7 @@ bool NoStoreFuncVisitor::prettyPrintRegionName(const RegionVector &FieldChain,
return false;
const auto *DR = cast<DeclRegion>(R);
- Sep = DR->getValueType()->isAnyPointerType() ? "->" : ".";
+ Sep = DR->getValueType()->isPointerOrObjCObjectPointerType() ? "->" : ".";
DR->getDecl()->getDeclName().print(os, PP);
}
@@ -3337,7 +3337,7 @@ UndefOrNullArgVisitor::VisitNode(const ExplodedNode *N, BugReporterContext &BRC,
assert(ParamDecl && "Formal parameter has no decl?");
QualType T = ParamDecl->getType();
- if (!(T->isAnyPointerType() || T->isReferenceType())) {
+ if (!(T->isPointerOrObjCObjectPointerType() || T->isReferenceType())) {
// Function can only change the value passed in by address.
continue;
}
diff --git a/clang/lib/StaticAnalyzer/Core/CallEvent.cpp b/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
index bb4a39f68280cd..db0dc968ae24f0 100644
--- a/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
+++ b/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
@@ -87,7 +87,7 @@ static bool isCallback(QualType T) {
// Check if a callback is passed inside a struct (for both, struct passed by
// reference and by value). Dig just one level into the struct for now.
- if (T->isAnyPointerType() || T->isReferenceType())
+ if (T->isPointerOrObjCObjectPointerType() || T->isReferenceType())
T = T->getPointeeType();
if (const RecordType *RT = T->getAsStructureType()) {
@@ -212,7 +212,7 @@ static bool isPointerToConst(QualType Ty) {
return false;
if (!PointeeTy.isConstQualified())
return false;
- if (PointeeTy->isAnyPointerType())
+ if (PointeeTy->isPointerOrObjCObjectPointerType())
return false;
return true;
}
diff --git a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
index 06052cb99fd18d..480c65217a564b 100644
--- a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
+++ b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
@@ -117,7 +117,7 @@ ProgramStateRef setDynamicTypeAndCastInfo(ProgramStateRef State,
return State;
if (CastSucceeds) {
- assert((CastToTy->isAnyPointerType() || CastToTy->isReferenceType()) &&
+ assert((CastToTy->isPointerOrObjCObjectPointerType() || CastToTy->isReferenceType()) &&
"DynamicTypeInfo should always be a pointer.");
State = State->set<DynamicTypeMap>(MR, CastToTy);
}
@@ -206,7 +206,7 @@ static raw_ostream &printJson(const DynamicTypeInfo &DTI, raw_ostream &Out,
Out << "null";
} else {
QualType ToPrint = DTI.getType();
- if (ToPrint->isAnyPointerType())
+ if (ToPrint->isPointerOrObjCObjectPointerType())
ToPrint = ToPrint->getPointeeType();
Out << '\"' << ToPrint << "\", \"sub_classable\": "
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp
index 7a900780384a91..56f1d88173df2c 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp
@@ -1101,7 +1101,7 @@ void ExprEngine::VisitIncrementDecrementOperator(const UnaryOperator* U,
SVal RHS;
SVal Result;
- if (U->getType()->isAnyPointerType())
+ if (U->getType()->isPointerOrObjCObjectPointerType())
RHS = svalBuilder.makeArrayIndex(1);
else if (U->getType()->isIntegralOrEnumerationType())
RHS = svalBuilder.makeIntVal(1, U->getType());
diff --git a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
index afb0273d23bd45..67c277c2b673ee 100644
--- a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
+++ b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
@@ -1179,7 +1179,7 @@ SVal SimpleSValBuilder::evalBinOpLN(ProgramStateRef state,
// hierarchy to provide typed regions for all non-void pointers would be
// better. For instance, we cannot extend this towards LocAsInteger
// operations, where result type of the expression is integer.
- if (resultTy->isAnyPointerType())
+ if (resultTy->isPointerOrObjCObjectPointerType())
elementType = resultTy->getPointeeType();
}
diff --git a/clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp b/clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
index 10588a383da0be..4bf4d69f5f9109 100644
--- a/clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
+++ b/clang/lib/Tooling/Transformer/SourceCodeBuilders.cpp
@@ -220,7 +220,7 @@ std::optional<std::string> tooling::buildAccess(const Expr &RawExpression,
const Expr *E = RawExpression.IgnoreImplicitAsWritten();
- if (E->getType()->isAnyPointerType() ||
+ if (E->getType()->isPointerOrObjCObjectPointerType() ||
treatLikePointer(E->getType(), Classification, Context)) {
// Strip off operator-> calls. They can only occur inside an actual arrow
// member access, so we treat them as equivalent to an actual object
diff --git a/clang/lib/Tooling/Transformer/Stencil.cpp b/clang/lib/Tooling/Transformer/Stencil.cpp
index c39a71b5983fc3..db512494e67c88 100644
--- a/clang/lib/Tooling/Transformer/Stencil.cpp
+++ b/clang/lib/Tooling/Transformer/Stencil.cpp
@@ -166,7 +166,7 @@ class UnaryOperationStencil : public StencilInterface {
Source = tooling::buildDereference(*E, *Match.Context);
break;
case UnaryNodeOperator::MaybeDeref:
- if (E->getType()->isAnyPointerType() ||
+ if (E->getType()->isPointerOrObjCObjectPointerType() ||
tooling::isKnownPointerLikeType(E->getType(), *Match.Context)) {
// Strip off any operator->. This can only occur inside an actual arrow
// member access, so we treat it as equivalent to an actual object
@@ -186,7 +186,7 @@ class UnaryOperationStencil : public StencilInterface {
Source = tooling::buildAddressOf(*E, *Match.Context);
break;
case UnaryNodeOperator::MaybeAddressOf:
- if (E->getType()->isAnyPointerType() ||
+ if (E->getType()->isPointerOrObjCObjectPointerType() ||
tooling::isKnownPointerLikeType(E->getType(), *Match.Context)) {
// Strip off any operator->. This can only occur inside an actual arrow
// member access, so we treat it as equivalent to an actual object
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
index 47051f2e68090f..a49b3eea4ec82b 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -4048,7 +4048,7 @@ TypeSystemClang::GetMinimumLanguage(lldb::opaque_compiler_type_t type) {
// If the type is a reference, then resolve it to what it refers to first:
clang::QualType qual_type(GetCanonicalQualType(type).getNonReferenceType());
- if (qual_type->isAnyPointerType()) {
+ if (qual_type->isPointerOrObjCObjectPointerType()) {
if (qual_type->isObjCObjectPointerType())
return lldb::eLanguageTypeObjC;
if (qual_type->getPointeeCXXRecordDecl())
>From 1c26eb363147bd10be797d3d77603fb793b2bc0f Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:30:48 +0100
Subject: [PATCH 2/6] clang-format
---
.../readability/IdentifierNamingCheck.cpp | 15 ++++++---
.../SuspiciousCallArgumentCheck.cpp | 3 +-
clang/include/clang/AST/Type.h | 7 +++--
.../Core/PathSensitive/SMTConv.h | 17 ++++++----
clang/lib/AST/ASTContext.cpp | 4 +--
clang/lib/AST/MicrosoftMangle.cpp | 5 +--
clang/lib/Analysis/UninitializedValues.cpp | 3 +-
clang/lib/CodeGen/CGCall.cpp | 3 +-
clang/lib/CodeGen/CGOpenMPRuntime.cpp | 19 +++++++-----
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 4 ++-
clang/lib/CodeGen/CGStmtOpenMP.cpp | 6 ++--
clang/lib/CodeGen/CodeGenTypes.cpp | 3 +-
clang/lib/Frontend/ASTUnit.cpp | 6 ++--
clang/lib/Sema/SemaAPINotes.cpp | 4 +--
clang/lib/Sema/SemaARM.cpp | 6 ++--
clang/lib/Sema/SemaCast.cpp | 31 ++++++++++++-------
clang/lib/Sema/SemaChecking.cpp | 6 ++--
clang/lib/Sema/SemaCodeComplete.cpp | 7 +++--
clang/lib/Sema/SemaDeclAttr.cpp | 3 +-
clang/lib/Sema/SemaExpr.cpp | 22 ++++++++-----
clang/lib/Sema/SemaExprCXX.cpp | 8 ++---
clang/lib/Sema/SemaLookup.cpp | 3 +-
clang/lib/Sema/SemaOpenMP.cpp | 16 ++++++----
clang/lib/Sema/SemaOverload.cpp | 11 ++++---
clang/lib/Sema/SemaRISCV.cpp | 3 +-
clang/lib/Sema/SemaSYCL.cpp | 4 +--
.../Checkers/CheckObjCInstMethSignature.cpp | 3 +-
clang/lib/StaticAnalyzer/Core/DynamicType.cpp | 3 +-
28 files changed, 138 insertions(+), 87 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 27031c2d6aeb25..dc740377c4db14 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1232,7 +1232,8 @@ StyleKind IdentifierNamingCheck::findStyleKind(
if (Decl->isParameterPack() && NamingStyles[SK_ParameterPack])
return SK_ParameterPack;
- if (!Type.isNull() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
+ if (!Type.isNull() &&
+ Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_PointerParameter])
return SK_PointerParameter;
@@ -1508,7 +1509,8 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticDataMember() && NamingStyles[SK_ClassConstant])
return SK_ClassConstant;
- if (Var->isFileVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
+ if (Var->isFileVarDecl() &&
+ Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_GlobalConstantPointer])
return SK_GlobalConstantPointer;
@@ -1518,7 +1520,8 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticLocal() && NamingStyles[SK_StaticConstant])
return SK_StaticConstant;
- if (Var->isLocalVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
+ if (Var->isLocalVarDecl() &&
+ Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_LocalConstantPointer])
return SK_LocalConstantPointer;
@@ -1535,7 +1538,8 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticDataMember() && NamingStyles[SK_ClassMember])
return SK_ClassMember;
- if (Var->isFileVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
+ if (Var->isFileVarDecl() &&
+ Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_GlobalPointer])
return SK_GlobalPointer;
@@ -1545,7 +1549,8 @@ StyleKind IdentifierNamingCheck::findStyleKindForVar(
if (Var->isStaticLocal() && NamingStyles[SK_StaticVariable])
return SK_StaticVariable;
- if (Var->isLocalVarDecl() && Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
+ if (Var->isLocalVarDecl() &&
+ Type.getTypePtr()->isPointerOrObjCObjectPointerType() &&
NamingStyles[SK_LocalPointer])
return SK_LocalPointer;
diff --git a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index 108c8d2e0a29ff..dc6b459e05bdfb 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -472,7 +472,8 @@ static bool areTypesCompatible(QualType ArgType, QualType ParamType,
// Unless argument and param are both multilevel pointers, the types are not
// convertible.
- if (!(ParamType->isPointerOrObjCObjectPointerType() && ArgType->isPointerOrObjCObjectPointerType()))
+ if (!(ParamType->isPointerOrObjCObjectPointerType() &&
+ ArgType->isPointerOrObjCObjectPointerType()))
return false;
return arePointerTypesCompatible(ArgType, ParamType, IsParamContinuouslyConst,
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index fed1647da43534..437343788227bc 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -2536,7 +2536,8 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
bool isPointerType() const;
bool isPointerOrReferenceType() const;
bool isSignableType() const;
- bool isPointerOrObjCObjectPointerType() const; // Any C pointer or ObjC object pointer
+ bool isPointerOrObjCObjectPointerType()
+ const; // Any C pointer or ObjC object pointer
bool isCountAttributedType() const;
bool isBlockPointerType() const;
bool isVoidPointerType() const;
@@ -8656,8 +8657,8 @@ inline bool Type::isUndeducedType() const {
inline bool Type::isOverloadableType() const {
if (!isDependentType())
return isRecordType() || isEnumeralType();
- return !isArrayType() && !isFunctionType() && !isPointerOrObjCObjectPointerType() &&
- !isMemberPointerType();
+ return !isArrayType() && !isFunctionType() &&
+ !isPointerOrObjCObjectPointerType() && !isMemberPointerType();
}
/// Determines whether this type is written as a typedef-name.
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
index ef5bf4b50371db..d175b6d2886095 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
@@ -264,7 +264,8 @@ class SMTConv {
uint64_t FromBitWidth) {
if ((FromTy->isIntegralOrEnumerationType() &&
ToTy->isIntegralOrEnumerationType()) ||
- (FromTy->isPointerOrObjCObjectPointerType() ^ ToTy->isPointerOrObjCObjectPointerType()) ||
+ (FromTy->isPointerOrObjCObjectPointerType() ^
+ ToTy->isPointerOrObjCObjectPointerType()) ||
(FromTy->isBlockPointerType() ^ ToTy->isBlockPointerType()) ||
(FromTy->isReferenceType() ^ ToTy->isReferenceType())) {
@@ -365,7 +366,8 @@ class SMTConv {
// If the two operands are pointers and the operation is a subtraction,
// the result is of type ptrdiff_t, which is signed
- if (LTy->isPointerOrObjCObjectPointerType() && RTy->isPointerOrObjCObjectPointerType() && Op == BO_Sub) {
+ if (LTy->isPointerOrObjCObjectPointerType() &&
+ RTy->isPointerOrObjCObjectPointerType() && Op == BO_Sub) {
*RetTy = Ctx.getPointerDiffType();
}
}
@@ -509,8 +511,9 @@ class SMTConv {
Solver->mkFloat(Zero));
}
- if (Ty->isIntegralOrEnumerationType() || Ty->isPointerOrObjCObjectPointerType() ||
- Ty->isBlockPointerType() || Ty->isReferenceType()) {
+ if (Ty->isIntegralOrEnumerationType() ||
+ Ty->isPointerOrObjCObjectPointerType() || Ty->isBlockPointerType() ||
+ Ty->isReferenceType()) {
// Skip explicit comparison for boolean types
bool isSigned = Ty->isSignedIntegerOrEnumerationType();
@@ -613,7 +616,8 @@ class SMTConv {
return;
}
- if ((LTy->isPointerOrObjCObjectPointerType() || RTy->isPointerOrObjCObjectPointerType()) ||
+ if ((LTy->isPointerOrObjCObjectPointerType() ||
+ RTy->isPointerOrObjCObjectPointerType()) ||
(LTy->isBlockPointerType() || RTy->isBlockPointerType()) ||
(LTy->isReferenceType() || RTy->isReferenceType())) {
// TODO: Refactor to Sema::FindCompositePointerType(), and
@@ -624,7 +628,8 @@ class SMTConv {
// Cast the non-pointer type to the pointer type.
// TODO: Be more strict about this.
- if ((LTy->isPointerOrObjCObjectPointerType() ^ RTy->isPointerOrObjCObjectPointerType()) ||
+ if ((LTy->isPointerOrObjCObjectPointerType() ^
+ RTy->isPointerOrObjCObjectPointerType()) ||
(LTy->isBlockPointerType() ^ RTy->isBlockPointerType()) ||
(LTy->isReferenceType() ^ RTy->isReferenceType())) {
if (LTy->isNullPtrType() || LTy->isBlockPointerType() ||
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index d6fdb035294068..9d4743bd0a0aa7 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -2981,8 +2981,8 @@ bool ASTContext::isSentinelNullExpr(const Expr *E) {
if (E->getType()->isNullPtrType()) return true;
if (E->getType()->isPointerOrObjCObjectPointerType() &&
- E->IgnoreParenCasts()->isNullPointerConstant(*this,
- Expr::NPC_ValueDependentIsNull))
+ E->IgnoreParenCasts()->isNullPointerConstant(
+ *this, Expr::NPC_ValueDependentIsNull))
return true;
// Unfortunately, __null has type 'int'.
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 63a1a53c4e74a1..ce8ca88b7f4258 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2570,8 +2570,9 @@ void MicrosoftCXXNameMangler::mangleType(QualType T, SourceRange Range,
return;
}
- bool IsPointer = T->isPointerOrObjCObjectPointerType() || T->isMemberPointerType() ||
- T->isReferenceType() || T->isBlockPointerType();
+ bool IsPointer = T->isPointerOrObjCObjectPointerType() ||
+ T->isMemberPointerType() || T->isReferenceType() ||
+ T->isBlockPointerType();
switch (QMM) {
case QMM_Drop:
diff --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp
index ad6870f49dd993..9cce3c0961cbed 100644
--- a/clang/lib/Analysis/UninitializedValues.cpp
+++ b/clang/lib/Analysis/UninitializedValues.cpp
@@ -417,7 +417,8 @@ void ClassifyRefs::VisitOMPExecutableDirective(OMPExecutableDirective *ED) {
}
static bool isPointerToConst(const QualType &QT) {
- return QT->isPointerOrObjCObjectPointerType() && QT->getPointeeType().isConstQualified();
+ return QT->isPointerOrObjCObjectPointerType() &&
+ QT->getPointeeType().isConstQualified();
}
static bool hasTrivialBody(CallExpr *CE) {
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 4840f1af5c201f..3bdb0216ce28cf 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -2929,7 +2929,8 @@ static const NonNullAttr *getNonNullAttr(const Decl *FD, const ParmVarDecl *PVD,
// In the former case, LLVM IR cannot represent the constraint. In
// the latter case, we have no guarantee that the transparent union
// is in fact passed as a pointer.
- if (!ArgType->isPointerOrObjCObjectPointerType() && !ArgType->isBlockPointerType())
+ if (!ArgType->isPointerOrObjCObjectPointerType() &&
+ !ArgType->isBlockPointerType())
return nullptr;
// First, check attribute on parameter itself.
if (PVD) {
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index f61c2f9d32861c..ba42f1e39889ae 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -7188,12 +7188,13 @@ class MappableExprsHandler {
dyn_cast<OMPArrayShapingExpr>(I->getAssociatedExpression());
const auto *UO = dyn_cast<UnaryOperator>(I->getAssociatedExpression());
const auto *BO = dyn_cast<BinaryOperator>(I->getAssociatedExpression());
- bool IsPointer =
- OAShE ||
- (OASE && ArraySectionExpr::getBaseOriginalType(OASE)
- .getCanonicalType()
- ->isPointerOrObjCObjectPointerType()) ||
- I->getAssociatedExpression()->getType()->isPointerOrObjCObjectPointerType();
+ bool IsPointer = OAShE ||
+ (OASE && ArraySectionExpr::getBaseOriginalType(OASE)
+ .getCanonicalType()
+ ->isPointerOrObjCObjectPointerType()) ||
+ I->getAssociatedExpression()
+ ->getType()
+ ->isPointerOrObjCObjectPointerType();
bool IsMemberReference = isa<MemberExpr>(I->getAssociatedExpression()) &&
MapDecl &&
MapDecl->getType()->isLValueReferenceType();
@@ -8533,7 +8534,8 @@ class MappableExprsHandler {
assert(VDecl == VD && "We got information for the wrong declaration??");
assert(!Components.empty() &&
"Not expecting declaration with no component lists.");
- if (VD && E && VD->getType()->isPointerOrObjCObjectPointerType() && isa<DeclRefExpr>(E))
+ if (VD && E && VD->getType()->isPointerOrObjCObjectPointerType() &&
+ isa<DeclRefExpr>(E))
HasMapBasePtr = true;
if (VD && E && VD->getType()->isPointerOrObjCObjectPointerType() &&
(isa<ArraySectionExpr>(E) || isa<ArraySubscriptExpr>(E)))
@@ -8784,7 +8786,8 @@ class MappableExprsHandler {
CombinedInfo.BasePointers.push_back(CV);
CombinedInfo.DevicePtrDecls.push_back(nullptr);
CombinedInfo.DevicePointers.push_back(DeviceInfoTy::None);
- if (I != FirstPrivateDecls.end() && ElementType->isPointerOrObjCObjectPointerType()) {
+ if (I != FirstPrivateDecls.end() &&
+ ElementType->isPointerOrObjCObjectPointerType()) {
Address PtrAddr = CGF.EmitLoadOfReference(CGF.MakeAddrLValue(
CV, ElementType, CGF.getContext().getDeclAlign(VD),
AlignmentSource::Decl));
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index 23389a45e2639a..127d0d73f22d0c 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -1962,7 +1962,9 @@ llvm::Function *CGOpenMPRuntimeGPU::createParallelDataSharingWrapper(
CGFContext.getPointerType(ElemTy),
CI->getLocation());
if (CI->capturesVariableByCopy() &&
- !CI->getCapturedVar()->getType()->isPointerOrObjCObjectPointerType()) {
+ !CI->getCapturedVar()
+ ->getType()
+ ->isPointerOrObjCObjectPointerType()) {
Arg = castValueToType(CGF, Arg, ElemTy, CGFContext.getUIntPtrType(),
CI->getLocation());
}
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index d21ef3acd6b380..04f16cfaceead3 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -520,7 +520,8 @@ static llvm::Function *emitOutlinedFunctionPrologue(
// deal with pointers. We can pass in the same way the VLA type sizes to the
// outlined function.
if (FO.UIntPtrCastRequired &&
- ((I->capturesVariableByCopy() && !ArgType->isPointerOrObjCObjectPointerType()) ||
+ ((I->capturesVariableByCopy() &&
+ !ArgType->isPointerOrObjCObjectPointerType()) ||
I->capturesVariableArrayType()))
ArgType = Ctx.getUIntPtrType();
@@ -601,7 +602,8 @@ static llvm::Function *emitOutlinedFunctionPrologue(
}
// If we are capturing a pointer by copy we don't need to do anything, just
// use the value that we get from the arguments.
- if (I->capturesVariableByCopy() && FD->getType()->isPointerOrObjCObjectPointerType()) {
+ if (I->capturesVariableByCopy() &&
+ FD->getType()->isPointerOrObjCObjectPointerType()) {
const VarDecl *CurVD = I->getCapturedVar();
if (!FO.RegisterCastedArgsOnly)
LocalAddrs.insert({Args[Cnt], {CurVD, LocalAddr}});
diff --git a/clang/lib/CodeGen/CodeGenTypes.cpp b/clang/lib/CodeGen/CodeGenTypes.cpp
index 90deed4d48db7e..742c7b2bfc7803 100644
--- a/clang/lib/CodeGen/CodeGenTypes.cpp
+++ b/clang/lib/CodeGen/CodeGenTypes.cpp
@@ -832,7 +832,8 @@ CodeGenTypes::getCGRecordLayout(const RecordDecl *RD) {
}
bool CodeGenTypes::isPointerZeroInitializable(QualType T) {
- assert((T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType()) && "Invalid type");
+ assert((T->isPointerOrObjCObjectPointerType() || T->isBlockPointerType()) &&
+ "Invalid type");
return isZeroInitializable(T);
}
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 5aa578c8876e3a..819b096c431f4b 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2135,9 +2135,9 @@ void AugmentedCodeCompleteConsumer::ProcessCodeCompleteResults(Sema &S,
CodeCompletionString *Completion = C->Completion;
if (!Context.getPreferredType().isNull()) {
if (C->Kind == CXCursor_MacroDefinition) {
- Priority = getMacroUsagePriority(C->Completion->getTypedText(),
- S.getLangOpts(),
- Context.getPreferredType()->isPointerOrObjCObjectPointerType());
+ Priority = getMacroUsagePriority(
+ C->Completion->getTypedText(), S.getLangOpts(),
+ Context.getPreferredType()->isPointerOrObjCObjectPointerType());
} else if (C->Type) {
CanQualType Expected
= S.Context.getCanonicalType(
diff --git a/clang/lib/Sema/SemaAPINotes.cpp b/clang/lib/Sema/SemaAPINotes.cpp
index 5cbee667924cd5..c9c4717ca9d17a 100644
--- a/clang/lib/Sema/SemaAPINotes.cpp
+++ b/clang/lib/Sema/SemaAPINotes.cpp
@@ -48,8 +48,8 @@ static bool isIndirectPointerType(QualType Type) {
if (Pointee.isNull())
return false;
- return Pointee->isPointerOrObjCObjectPointerType() || Pointee->isObjCObjectPointerType() ||
- Pointee->isMemberPointerType();
+ return Pointee->isPointerOrObjCObjectPointerType() ||
+ Pointee->isObjCObjectPointerType() || Pointee->isMemberPointerType();
}
/// Apply nullability to the given declaration.
diff --git a/clang/lib/Sema/SemaARM.cpp b/clang/lib/Sema/SemaARM.cpp
index 82d5e33a7e8078..f8df8b36c62d14 100644
--- a/clang/lib/Sema/SemaARM.cpp
+++ b/clang/lib/Sema/SemaARM.cpp
@@ -162,7 +162,8 @@ bool SemaARM::BuiltinARMMemoryTaggingCall(unsigned BuiltinID,
}
// at least one argument should be pointer type
- if (!ArgTypeA->isPointerOrObjCObjectPointerType() && !ArgTypeB->isPointerOrObjCObjectPointerType())
+ if (!ArgTypeA->isPointerOrObjCObjectPointerType() &&
+ !ArgTypeB->isPointerOrObjCObjectPointerType())
return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer)
<< ArgTypeA << ArgTypeB << ArgA->getSourceRange();
@@ -924,7 +925,8 @@ bool SemaARM::CheckARMBuiltinExclusiveCall(unsigned BuiltinID,
TheCall->setArg(IsLdrex ? 0 : 1, PointerArg);
// In general, we allow ints, floats and pointers to be loaded and stored.
- if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
+ if (!ValType->isIntegerType() &&
+ !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType()) {
Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr)
<< PointerArg->getType() << 0 << PointerArg->getSourceRange();
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp
index bcc777ec62bc3b..479337df148ff6 100644
--- a/clang/lib/Sema/SemaCast.cpp
+++ b/clang/lib/Sema/SemaCast.cpp
@@ -596,12 +596,16 @@ static CastAwayConstnessKind
unwrapCastAwayConstnessLevel(ASTContext &Context, QualType &T1, QualType &T2) {
enum { None, Ptr, MemPtr, BlockPtr, Array };
auto Classify = [](QualType T) {
- if (T->isPointerOrObjCObjectPointerType()) return Ptr;
- if (T->isMemberPointerType()) return MemPtr;
- if (T->isBlockPointerType()) return BlockPtr;
+ if (T->isPointerOrObjCObjectPointerType())
+ return Ptr;
+ if (T->isMemberPointerType())
+ return MemPtr;
+ if (T->isBlockPointerType())
+ return BlockPtr;
// We somewhat-arbitrarily don't look through VLA types here. This is at
// least consistent with the behavior of UnwrapSimilarTypes.
- if (T->isConstantArrayType() || T->isIncompleteArrayType()) return Array;
+ if (T->isConstantArrayType() || T->isIncompleteArrayType())
+ return Array;
return None;
};
@@ -682,10 +686,11 @@ CastsAwayConstness(Sema &Self, QualType SrcType, QualType DestType,
return CastAwayConstnessKind::CACK_None;
if (!DestType->isReferenceType()) {
- assert((SrcType->isPointerOrObjCObjectPointerType() || SrcType->isMemberPointerType() ||
- SrcType->isBlockPointerType()) &&
+ assert((SrcType->isPointerOrObjCObjectPointerType() ||
+ SrcType->isMemberPointerType() || SrcType->isBlockPointerType()) &&
"Source type is not pointer or pointer to member.");
- assert((DestType->isPointerOrObjCObjectPointerType() || DestType->isMemberPointerType() ||
+ assert((DestType->isPointerOrObjCObjectPointerType() ||
+ DestType->isMemberPointerType() ||
DestType->isBlockPointerType()) &&
"Destination type is not pointer or pointer to member.");
}
@@ -2451,8 +2456,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
TryCastResult Result = TC_NotApplicable;
if (SrcType->isIntegralOrEnumerationType() ||
SrcType->isPointerOrObjCObjectPointerType() ||
- SrcType->isMemberPointerType() ||
- SrcType->isBlockPointerType()) {
+ SrcType->isMemberPointerType() || SrcType->isBlockPointerType()) {
Result = TC_Success;
}
return Result;
@@ -2902,8 +2906,10 @@ static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,
QualType SrcType = SrcExpr.get()->getType();
if (DestType.getUnqualifiedType()->isVoidType())
return;
- if ((SrcType->isPointerOrObjCObjectPointerType() || SrcType->isBlockPointerType())
- && (DestType->isPointerOrObjCObjectPointerType() || DestType->isBlockPointerType()))
+ if ((SrcType->isPointerOrObjCObjectPointerType() ||
+ SrcType->isBlockPointerType()) &&
+ (DestType->isPointerOrObjCObjectPointerType() ||
+ DestType->isBlockPointerType()))
return;
if (SrcType->isIntegerType() && DestType->isIntegerType() &&
(SrcType->isBooleanType() == DestType->isBooleanType()) &&
@@ -3318,7 +3324,8 @@ static void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr,
return;
QualType SrcType = SrcExpr.get()->getType();
- if (!((SrcType->isPointerOrObjCObjectPointerType() && DestType->isPointerOrObjCObjectPointerType()) ||
+ if (!((SrcType->isPointerOrObjCObjectPointerType() &&
+ DestType->isPointerOrObjCObjectPointerType()) ||
DestType->isLValueReferenceType()))
return;
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 629938ea30d6bb..6f2e51e69f76fc 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -4281,7 +4281,8 @@ ExprResult Sema::BuiltinAtomicOverloaded(ExprResult TheCallResult) {
}
QualType ValType = pointerType->getPointeeType();
- if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
+ if (!ValType->isIntegerType() &&
+ !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType()) {
Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr)
<< FirstArg->getType() << 0 << FirstArg->getSourceRange();
@@ -4658,7 +4659,8 @@ ExprResult Sema::BuiltinNontemporalOverloaded(ExprResult TheCallResult) {
// Strip any qualifiers off ValType.
ValType = ValType.getUnqualifiedType();
- if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
+ if (!ValType->isIntegerType() &&
+ !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType() &&
!ValType->isVectorType()) {
Diag(DRE->getBeginLoc(),
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 91ee9685f6f750..f42a7d2d20e3f7 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5012,9 +5012,10 @@ void SemaCodeCompletion::CodeCompleteExpression(
bool PreferredTypeIsPointer = false;
if (!Data.PreferredType.isNull()) {
- PreferredTypeIsPointer = Data.PreferredType->isPointerOrObjCObjectPointerType() ||
- Data.PreferredType->isMemberPointerType() ||
- Data.PreferredType->isBlockPointerType();
+ PreferredTypeIsPointer =
+ Data.PreferredType->isPointerOrObjCObjectPointerType() ||
+ Data.PreferredType->isMemberPointerType() ||
+ Data.PreferredType->isBlockPointerType();
if (Data.PreferredType->isEnumeralType()) {
EnumDecl *Enum = Data.PreferredType->castAs<EnumType>()->getDecl();
if (auto *Def = Enum->getDefinition())
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 6cf7c585529888..30fe6eba42035e 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -1763,7 +1763,8 @@ static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
QualType ResultType = getFunctionOrMethodResultType(D);
- if (ResultType->isPointerOrObjCObjectPointerType() || ResultType->isBlockPointerType()) {
+ if (ResultType->isPointerOrObjCObjectPointerType() ||
+ ResultType->isBlockPointerType()) {
D->addAttr(::new (S.Context) RestrictAttr(S.Context, AL));
return;
}
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index b1b0061a77c9a4..40db9cbfc68661 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -7974,9 +7974,10 @@ static bool checkCondition(Sema &S, const Expr *Cond,
/// true otherwise.
static bool checkConditionalNullPointer(Sema &S, ExprResult &NullExpr,
QualType PointerTy) {
- if ((!PointerTy->isPointerOrObjCObjectPointerType() && !PointerTy->isBlockPointerType()) ||
+ if ((!PointerTy->isPointerOrObjCObjectPointerType() &&
+ !PointerTy->isBlockPointerType()) ||
!NullExpr.get()->isNullPointerConstant(S.Context,
- Expr::NPC_ValueDependentIsNull))
+ Expr::NPC_ValueDependentIsNull))
return true;
NullExpr = S.ImpCastExprToType(NullExpr.get(), PointerTy, CK_NullToPointer);
@@ -10765,7 +10766,8 @@ static bool checkArithmeticOpPointerOperand(Sema &S, SourceLocation Loc,
if (const AtomicType *ResAtomicType = ResType->getAs<AtomicType>())
ResType = ResAtomicType->getValueType();
- if (!ResType->isPointerOrObjCObjectPointerType()) return true;
+ if (!ResType->isPointerOrObjCObjectPointerType())
+ return true;
QualType PointeeTy = ResType->getPointeeType();
if (PointeeTy->isVoidType()) {
@@ -11594,8 +11596,10 @@ static bool convertPointersToCompositeType(Sema &S, SourceLocation Loc,
QualType T = S.FindCompositePointerType(Loc, LHS, RHS);
if (T.isNull()) {
- if ((LHSType->isPointerOrObjCObjectPointerType() || LHSType->isMemberPointerType()) &&
- (RHSType->isPointerOrObjCObjectPointerType() || RHSType->isMemberPointerType()))
+ if ((LHSType->isPointerOrObjCObjectPointerType() ||
+ LHSType->isMemberPointerType()) &&
+ (RHSType->isPointerOrObjCObjectPointerType() ||
+ RHSType->isMemberPointerType()))
diagnoseDistinctPointerComparison(S, Loc, LHS, RHS, /*isError*/true);
else
S.InvalidOperands(Loc, LHS, RHS);
@@ -12171,7 +12175,7 @@ void Sema::CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE) {
if (!E.get()->getType()->isPointerOrObjCObjectPointerType() &&
E.get()->isNullPointerConstant(Context,
Expr::NPC_ValueDependentIsNotNull) ==
- Expr::NPCK_ZeroExpression) {
+ Expr::NPCK_ZeroExpression) {
if (const auto *CL = dyn_cast<CharacterLiteral>(E.get())) {
if (CL->getValue() == 0)
Diag(E.get()->getExprLoc(), diag::warn_pointer_compare)
@@ -12605,8 +12609,10 @@ QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS,
return computeResultTy();
}
}
- if ((LHSType->isPointerOrObjCObjectPointerType() && RHSType->isIntegerType()) ||
- (LHSType->isIntegerType() && RHSType->isPointerOrObjCObjectPointerType())) {
+ if ((LHSType->isPointerOrObjCObjectPointerType() &&
+ RHSType->isIntegerType()) ||
+ (LHSType->isIntegerType() &&
+ RHSType->isPointerOrObjCObjectPointerType())) {
unsigned DiagID = 0;
bool isError = false;
if (LangOpts.DebuggerSupport) {
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 7ba98ed49ebb76..f025c2dede44de 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -7276,10 +7276,10 @@ QualType Sema::FindCompositePointerType(SourceLocation Loc,
// where at least one is a pointer or pointer to member type or
// std::nullptr_t is:
- bool T1IsPointerLike = T1->isPointerOrObjCObjectPointerType() || T1->isMemberPointerType() ||
- T1->isNullPtrType();
- bool T2IsPointerLike = T2->isPointerOrObjCObjectPointerType() || T2->isMemberPointerType() ||
- T2->isNullPtrType();
+ bool T1IsPointerLike = T1->isPointerOrObjCObjectPointerType() ||
+ T1->isMemberPointerType() || T1->isNullPtrType();
+ bool T2IsPointerLike = T2->isPointerOrObjCObjectPointerType() ||
+ T2->isMemberPointerType() || T2->isNullPtrType();
if (!T1IsPointerLike && !T2IsPointerLike)
return QualType();
diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp
index 7a49bed5500675..a2c1fbe0d06207 100644
--- a/clang/lib/Sema/SemaLookup.cpp
+++ b/clang/lib/Sema/SemaLookup.cpp
@@ -5481,7 +5481,8 @@ bool FunctionCallFilterCCC::ValidateCandidate(const TypoCorrection &candidate) {
QualType ValType = cast<ValueDecl>(ND)->getType();
if (ValType.isNull())
continue;
- if (ValType->isPointerOrObjCObjectPointerType() || ValType->isReferenceType())
+ if (ValType->isPointerOrObjCObjectPointerType() ||
+ ValType->isReferenceType())
ValType = ValType->getPointeeType();
if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
if (FPT->getNumParams() == NumArgs)
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 3849733973327e..971f04d356a068 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -17344,8 +17344,8 @@ OMPClause *SemaOpenMP::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
OpenMPDirectiveKind CurrDir = DSAStack->getCurrentDirective();
// Variably modified types are not supported for tasks.
- if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType() &&
- isOpenMPTaskingDirective(CurrDir)) {
+ if (!Type->isPointerOrObjCObjectPointerType() &&
+ Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_private) << Type
<< getOpenMPDirectiveName(CurrDir);
@@ -17619,7 +17619,8 @@ OMPClause *SemaOpenMP::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
}
// Variably modified types are not supported for tasks.
- if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType() &&
+ if (!Type->isPointerOrObjCObjectPointerType() &&
+ Type->isVariablyModifiedType() &&
isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_firstprivate) << Type
@@ -19744,7 +19745,8 @@ OMPClause *SemaOpenMP::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
}
// Variably modified types are not supported.
- if (!Type->isPointerOrObjCObjectPointerType() && Type->isVariablyModifiedType()) {
+ if (!Type->isPointerOrObjCObjectPointerType() &&
+ Type->isVariablyModifiedType()) {
Diag(ELoc, diag::err_omp_variably_modified_type_not_supported)
<< getOpenMPClauseName(OMPC_copyprivate) << Type
<< getOpenMPDirectiveName(DSAStack->getCurrentDirective());
@@ -20490,7 +20492,8 @@ class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {
bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {
Expr *E = AE->getBase()->IgnoreParenImpCasts();
- if (!E->getType()->isPointerOrObjCObjectPointerType() && !E->getType()->isArrayType()) {
+ if (!E->getType()->isPointerOrObjCObjectPointerType() &&
+ !E->getType()->isArrayType()) {
if (!NoDiagnose) {
SemaRef.Diag(ELoc, diag::err_omp_expected_base_var_name)
<< 0 << AE->getSourceRange();
@@ -24010,7 +24013,8 @@ ExprResult SemaOpenMP::ActOnOMPIteratorExpr(Scope *S,
DeclTy->containsUnexpandedParameterPack() ||
DeclTy->isInstantiationDependentType();
if (!IsDeclTyDependent) {
- if (!DeclTy->isIntegralType(Context) && !DeclTy->isPointerOrObjCObjectPointerType()) {
+ if (!DeclTy->isIntegralType(Context) &&
+ !DeclTy->isPointerOrObjCObjectPointerType()) {
// OpenMP 5.0, 2.1.6 Iterators, Restrictions, C/C++
// The iterator-type must be an integral or pointer type.
Diag(StartLoc, diag::err_omp_iterator_not_integral_or_pointer)
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index dc944763095d5e..791f7d1d2ef9e2 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -301,7 +301,8 @@ isPointerConversionToVoidPointer(ASTContext& Context) const {
if (First == ICK_Array_To_Pointer)
FromType = Context.getArrayDecayedType(FromType);
- if (Second == ICK_Pointer_Conversion && FromType->isPointerOrObjCObjectPointerType())
+ if (Second == ICK_Pointer_Conversion &&
+ FromType->isPointerOrObjCObjectPointerType())
if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
return ToPtrType->getPointeeType()->isVoidType();
@@ -3439,7 +3440,8 @@ bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
Kind = CK_BitCast;
- if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isPointerOrObjCObjectPointerType() &&
+ if (Diagnose && !IsCStyleOrFunctionalCast &&
+ !FromType->isPointerOrObjCObjectPointerType() &&
From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
Expr::NPCK_ZeroExpression) {
if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
@@ -8631,8 +8633,8 @@ BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
// Skip over restrict if no restrict found anywhere in the types, or if
// the type cannot be restrict-qualified.
if ((CVR & Qualifiers::Restrict) &&
- (!hasRestrict ||
- (!(PointeeTy->isPointerOrObjCObjectPointerType() || PointeeTy->isReferenceType()))))
+ (!hasRestrict || (!(PointeeTy->isPointerOrObjCObjectPointerType() ||
+ PointeeTy->isReferenceType()))))
continue;
// Build qualified pointee type.
@@ -9050,7 +9052,6 @@ class BuiltinOperatorOverloadBuilder {
S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet);
}
}
-
}
/// Helper to add an overload candidate for a binary builtin with types \p L
diff --git a/clang/lib/Sema/SemaRISCV.cpp b/clang/lib/Sema/SemaRISCV.cpp
index 9aa0c13c759f82..2d82a13f80bcb8 100644
--- a/clang/lib/Sema/SemaRISCV.cpp
+++ b/clang/lib/Sema/SemaRISCV.cpp
@@ -1339,7 +1339,8 @@ bool SemaRISCV::CheckBuiltinFunctionCall(const TargetInfo &TI,
QualType ValType = PtrType->getPointeeType();
ValType = ValType.getUnqualifiedType();
- if (!ValType->isIntegerType() && !ValType->isPointerOrObjCObjectPointerType() &&
+ if (!ValType->isIntegerType() &&
+ !ValType->isPointerOrObjCObjectPointerType() &&
!ValType->isBlockPointerType() && !ValType->isFloatingType() &&
!ValType->isVectorType() && !ValType->isRVVSizelessBuiltinType()) {
Diag(DRE->getBeginLoc(),
diff --git a/clang/lib/Sema/SemaSYCL.cpp b/clang/lib/Sema/SemaSYCL.cpp
index 8c7769a1ec05c1..e09b26baf12f47 100644
--- a/clang/lib/Sema/SemaSYCL.cpp
+++ b/clang/lib/Sema/SemaSYCL.cpp
@@ -114,8 +114,8 @@ void SemaSYCL::deepTypeCheckForDevice(SourceLocation UsedAt,
// In case pointer/array/reference type is met get pointee type, then
// proceed with that type.
- while (NextTy->isPointerOrObjCObjectPointerType() || NextTy->isArrayType() ||
- NextTy->isReferenceType()) {
+ while (NextTy->isPointerOrObjCObjectPointerType() ||
+ NextTy->isArrayType() || NextTy->isReferenceType()) {
if (NextTy->isArrayType())
NextTy = QualType{NextTy->getArrayElementTypeNoTypeQual(), 0};
else
diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
index 863358d2609545..e90ff3f80e411c 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp
@@ -30,7 +30,8 @@ static bool AreTypesCompatible(QualType Derived, QualType Ancestor,
// Right now don't compare the compatibility of pointers. That involves
// looking at subtyping relationships. FIXME: Future patch.
- if (Derived->isPointerOrObjCObjectPointerType() && Ancestor->isPointerOrObjCObjectPointerType())
+ if (Derived->isPointerOrObjCObjectPointerType() &&
+ Ancestor->isPointerOrObjCObjectPointerType())
return true;
return C.typesAreCompatible(Derived, Ancestor);
diff --git a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
index 480c65217a564b..54831176afcaab 100644
--- a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
+++ b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
@@ -117,7 +117,8 @@ ProgramStateRef setDynamicTypeAndCastInfo(ProgramStateRef State,
return State;
if (CastSucceeds) {
- assert((CastToTy->isPointerOrObjCObjectPointerType() || CastToTy->isReferenceType()) &&
+ assert((CastToTy->isPointerOrObjCObjectPointerType() ||
+ CastToTy->isReferenceType()) &&
"DynamicTypeInfo should always be a pointer.");
State = State->set<DynamicTypeMap>(MR, CastToTy);
}
>From 4c4537ea05126bce4b7d1914fea8b11bae0f06eb Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:53:35 +0100
Subject: [PATCH 3/6] Rename getPointeeOrArrayElementType()
---
.../bugprone/SuspiciousMemoryComparisonCheck.cpp | 2 +-
clang-tools-extra/clang-tidy/mpi/TypeMismatchCheck.cpp | 2 +-
clang-tools-extra/clangd/SemanticHighlighting.cpp | 2 +-
clang/include/clang/AST/Type.h | 9 ++++++---
clang/lib/AST/ASTImporter.cpp | 2 +-
clang/lib/CodeGen/CGExpr.cpp | 2 +-
clang/lib/CodeGen/CGHLSLRuntime.cpp | 2 +-
clang/lib/CodeGen/CGOpenMPRuntime.cpp | 6 +++---
clang/lib/CodeGen/Targets/SystemZ.cpp | 2 +-
clang/lib/Sema/SemaChecking.cpp | 2 +-
clang/lib/Sema/SemaDecl.cpp | 6 +++---
clang/lib/Sema/SemaExpr.cpp | 4 ++--
clang/lib/Sema/SemaInit.cpp | 4 ++--
clang/lib/Sema/SemaOpenCL.cpp | 2 +-
14 files changed, 25 insertions(+), 22 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
index 84957e0b8190c0..2ecaa89d556466 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
@@ -45,7 +45,7 @@ void SuspiciousMemoryComparisonCheck::check(
for (unsigned int ArgIndex = 0; ArgIndex < 2; ++ArgIndex) {
const Expr *ArgExpr = CE->getArg(ArgIndex);
QualType ArgType = ArgExpr->IgnoreImplicit()->getType();
- const Type *PointeeType = ArgType->getPointeeOrArrayElementType();
+ const Type *PointeeType = ArgType->getPointerOrObjCPointerOrArrayElementType();
assert(PointeeType != nullptr && "PointeeType should always be available.");
QualType PointeeQualifiedType(PointeeType, 0);
diff --git a/clang-tools-extra/clang-tidy/mpi/TypeMismatchCheck.cpp b/clang-tools-extra/clang-tidy/mpi/TypeMismatchCheck.cpp
index 5abe4f77d65984..36628d0fd84be5 100644
--- a/clang-tools-extra/clang-tidy/mpi/TypeMismatchCheck.cpp
+++ b/clang-tools-extra/clang-tidy/mpi/TypeMismatchCheck.cpp
@@ -229,7 +229,7 @@ static bool isTypedefTypeMatching(const TypedefType *const Typedef,
/// \returns type of the argument
static const Type *argumentType(const CallExpr *const CE, const size_t Idx) {
const QualType QT = CE->getArg(Idx)->IgnoreImpCasts()->getType();
- return QT.getTypePtr()->getPointeeOrArrayElementType();
+ return QT.getTypePtr()->getPointerOrObjCPointerOrArrayElementType();
}
void TypeMismatchCheck::registerMatchers(MatchFinder *Finder) {
diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp
index e6d16af2495fec..238b28eb976960 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -296,7 +296,7 @@ bool isDefaultLibrary(const Decl *D) {
bool isDefaultLibrary(const Type *T) {
if (!T)
return false;
- const Type *Underlying = T->getPointeeOrArrayElementType();
+ const Type *Underlying = T->getPointerOrObjCPointerOrArrayElementType();
if (Underlying->isBuiltinType())
return true;
if (auto *TD = dyn_cast<TemplateTypeParmType>(Underlying))
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 437343788227bc..79557441a926fd 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -2863,10 +2863,13 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
/// This should never be used when type qualifiers are meaningful.
const Type *getArrayElementTypeNoTypeQual() const;
- /// If this is a pointer type, return the pointee type.
+ /// If this is a C or ObjC pointer type, return the pointee type. Notably,
+ /// this does not handle things like member pointers or block pointers.
+ ///
/// If this is an array type, return the array element type.
+ ///
/// This should never be used when type qualifiers are meaningful.
- const Type *getPointeeOrArrayElementType() const;
+ const Type *getPointerOrObjCPointerOrArrayElementType() const;
/// If this is a pointer, ObjC object pointer, or block
/// pointer, this returns the respective pointee.
@@ -8691,7 +8694,7 @@ inline const Type *Type::getBaseElementTypeUnsafe() const {
return type;
}
-inline const Type *Type::getPointeeOrArrayElementType() const {
+inline const Type *Type::getPointerOrObjCPointerOrArrayElementType() const {
const Type *type = this;
if (type->isPointerOrObjCObjectPointerType())
return type->getPointeeType().getTypePtr();
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index dec4c7221bc776..654dd050a74ada 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -1942,7 +1942,7 @@ Error ASTNodeImporter::ImportDeclParts(
FunDecl->hasBody()) {
auto getLeafPointeeType = [](const Type *T) {
while (T->isPointerType() || T->isArrayType()) {
- T = T->getPointeeOrArrayElementType();
+ T = T->getPointerOrObjCPointerOrArrayElementType();
}
return T;
};
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 6e5a21c8f01e78..5d4978f2b47c1f 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -991,7 +991,7 @@ static llvm::Value *getArrayIndexingBound(CodeGenFunction &CGF,
CodeGenFunction::SanitizerScope SanScope(&CGF);
- QualType EltTy{Base->getType()->getPointeeOrArrayElementType(), 0};
+ QualType EltTy{Base->getType()->getPointerOrObjCPointerOrArrayElementType(), 0};
if (llvm::Value *POS = CGF.LoadPassedObjectSize(Base, EltTy)) {
IndexedType = Base->getType();
return POS;
diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp
index 5679bd71581795..e924138df7b86d 100644
--- a/clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -290,7 +290,7 @@ calculateElementType(const ASTContext &Context, const clang::Type *ResourceTy) {
}
void CGHLSLRuntime::annotateHLSLResource(const VarDecl *D, GlobalVariable *GV) {
- const Type *Ty = D->getType()->getPointeeOrArrayElementType();
+ const Type *Ty = D->getType()->getPointerOrObjCPointerOrArrayElementType();
if (!Ty)
return;
const auto *RD = Ty->getAsCXXRecordDecl();
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index ba42f1e39889ae..7c130d43874ba3 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -7551,7 +7551,7 @@ class MappableExprsHandler {
// For the case that having pointer as base, we need to remove one
// level of indirection.
if (&Component != &*Components.begin())
- ElementType = ElementType->getPointeeOrArrayElementType();
+ ElementType = ElementType->getPointerOrObjCPointerOrArrayElementType();
ElementTypeSize =
Context.getTypeSizeInChars(ElementType).getQuantity();
CurStrides.push_back(
@@ -8628,10 +8628,10 @@ class MappableExprsHandler {
llvm::SmallVector<const FieldDecl *, 4> Layout;
if (!OverlappedData.empty()) {
const Type *BaseType = VD->getType().getCanonicalType().getTypePtr();
- const Type *OrigType = BaseType->getPointeeOrArrayElementType();
+ const Type *OrigType = BaseType->getPointerOrObjCPointerOrArrayElementType();
while (BaseType != OrigType) {
BaseType = OrigType->getCanonicalTypeInternal().getTypePtr();
- OrigType = BaseType->getPointeeOrArrayElementType();
+ OrigType = BaseType->getPointerOrObjCPointerOrArrayElementType();
}
if (const auto *CRD = BaseType->getAsCXXRecordDecl())
diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp
index 23c96fa5cf98cb..edf5a896848981 100644
--- a/clang/lib/CodeGen/Targets/SystemZ.cpp
+++ b/clang/lib/CodeGen/Targets/SystemZ.cpp
@@ -503,7 +503,7 @@ bool SystemZTargetCodeGenInfo::isVectorTypeBased(const Type *Ty,
// Assume pointers are dereferenced.
while (Ty->isPointerType() || Ty->isArrayType())
- Ty = Ty->getPointeeOrArrayElementType();
+ Ty = Ty->getPointerOrObjCPointerOrArrayElementType();
// Vectors >= 16 bytes expose the ABI through alignment requirements.
if (Ty->isVectorType() && Ctx.getTypeSize(Ty) / 8 >= 16)
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 6f2e51e69f76fc..4e78ea98a72005 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -13424,7 +13424,7 @@ void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
return;
const Type *EffectiveType =
- BaseExpr->getType()->getPointeeOrArrayElementType();
+ BaseExpr->getType()->getPointerOrObjCPointerOrArrayElementType();
BaseExpr = BaseExpr->IgnoreParenCasts();
const ConstantArrayType *ArrayTy =
Context.getAsConstantArrayType(BaseExpr->getType());
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 1dffa174f3c2f9..dc70dfe35153ab 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -9541,7 +9541,7 @@ static OpenCLParamType getOpenCLKernelParameterType(Sema &S, QualType PT) {
// Look into an array argument to check if it has a forbidden type.
if (PT->isArrayType()) {
- const Type *UnderlyingTy = PT->getPointeeOrArrayElementType();
+ const Type *UnderlyingTy = PT->getPointerOrObjCPointerOrArrayElementType();
// Call ourself to check an underlying type of an array. Since the
// getPointeeOrArrayElementType returns an innermost type which is not an
// array, this recursive call only happens once.
@@ -9644,7 +9644,7 @@ static void checkIsValidOpenCLKernelParameter(
// an ArrayType of a RecordType.
assert((PT->isArrayType() || PT->isRecordType()) && "Unexpected type.");
const RecordType *RecTy =
- PT->getPointeeOrArrayElementType()->getAs<RecordType>();
+ PT->getPointerOrObjCPointerOrArrayElementType()->getAs<RecordType>();
const RecordDecl *OrigRecDecl = RecTy->getDecl();
VisitStack.push_back(RecTy->getDecl());
@@ -9672,7 +9672,7 @@ static void checkIsValidOpenCLKernelParameter(
// walk around RecordDecl::fields().
assert((FieldTy->isArrayType() || FieldTy->isRecordType()) &&
"Unexpected type.");
- const Type *FieldRecTy = FieldTy->getPointeeOrArrayElementType();
+ const Type *FieldRecTy = FieldTy->getPointerOrObjCPointerOrArrayElementType();
RD = FieldRecTy->castAs<RecordType>()->getDecl();
} else {
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 40db9cbfc68661..64ea1212274737 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -17069,8 +17069,8 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
return Type->isSpecificBuiltinType(BuiltinType::Char_S) ||
Type->isSpecificBuiltinType(BuiltinType::Char_U);
};
- FDiag << (isPlainChar(FirstType->getPointeeOrArrayElementType()) ||
- isPlainChar(SecondType->getPointeeOrArrayElementType()));
+ FDiag << (isPlainChar(FirstType->getPointerOrObjCPointerOrArrayElementType()) ||
+ isPlainChar(SecondType->getPointerOrObjCPointerOrArrayElementType()));
}
// If we can fix the conversion, suggest the FixIts.
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 0dd5f468cf60bf..9f7cc798aa8ba7 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -7878,8 +7878,8 @@ ExprResult InitializationSequence::Perform(Sema &S,
if (MTETy->isIncompleteArrayType() &&
!CurInit.get()->getType()->isIncompleteArrayType() &&
S.Context.hasSameType(
- MTETy->getPointeeOrArrayElementType(),
- CurInit.get()->getType()->getPointeeOrArrayElementType()))
+ MTETy->getPointerOrObjCPointerOrArrayElementType(),
+ CurInit.get()->getType()->getPointerOrObjCPointerOrArrayElementType()))
MTETy = CurInit.get()->getType();
// Materialize the temporary into memory.
diff --git a/clang/lib/Sema/SemaOpenCL.cpp b/clang/lib/Sema/SemaOpenCL.cpp
index 9f746fffd34d0a..bbe96cfe17e210 100644
--- a/clang/lib/Sema/SemaOpenCL.cpp
+++ b/clang/lib/Sema/SemaOpenCL.cpp
@@ -324,7 +324,7 @@ bool SemaOpenCL::checkBuiltinEnqueueKernel(CallExpr *TheCall) {
// Fifth argument is always passed as a pointer to clk_event_t.
if (!Arg4->isNullPointerConstant(Context,
Expr::NPC_ValueDependentIsNotNull) &&
- !Arg4->getType()->getPointeeOrArrayElementType()->isClkEventT()) {
+ !Arg4->getType()->getPointerOrObjCPointerOrArrayElementType()->isClkEventT()) {
Diag(TheCall->getArg(4)->getBeginLoc(),
diag::err_opencl_builtin_expected_type)
<< TheCall->getDirectCallee()
>From 40eddf97d0b7a91a7f4481c281c88a7e4e7496dc Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:54:01 +0100
Subject: [PATCH 4/6] clang-format
---
.../clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp | 3 ++-
clang/lib/CodeGen/CGExpr.cpp | 3 ++-
clang/lib/CodeGen/CGOpenMPRuntime.cpp | 6 ++++--
clang/lib/Sema/SemaDecl.cpp | 3 ++-
clang/lib/Sema/SemaExpr.cpp | 6 ++++--
clang/lib/Sema/SemaInit.cpp | 4 +++-
clang/lib/Sema/SemaOpenCL.cpp | 4 +++-
7 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
index 2ecaa89d556466..7779b6725673cb 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMemoryComparisonCheck.cpp
@@ -45,7 +45,8 @@ void SuspiciousMemoryComparisonCheck::check(
for (unsigned int ArgIndex = 0; ArgIndex < 2; ++ArgIndex) {
const Expr *ArgExpr = CE->getArg(ArgIndex);
QualType ArgType = ArgExpr->IgnoreImplicit()->getType();
- const Type *PointeeType = ArgType->getPointerOrObjCPointerOrArrayElementType();
+ const Type *PointeeType =
+ ArgType->getPointerOrObjCPointerOrArrayElementType();
assert(PointeeType != nullptr && "PointeeType should always be available.");
QualType PointeeQualifiedType(PointeeType, 0);
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 5d4978f2b47c1f..bba936b3c7f3eb 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -991,7 +991,8 @@ static llvm::Value *getArrayIndexingBound(CodeGenFunction &CGF,
CodeGenFunction::SanitizerScope SanScope(&CGF);
- QualType EltTy{Base->getType()->getPointerOrObjCPointerOrArrayElementType(), 0};
+ QualType EltTy{Base->getType()->getPointerOrObjCPointerOrArrayElementType(),
+ 0};
if (llvm::Value *POS = CGF.LoadPassedObjectSize(Base, EltTy)) {
IndexedType = Base->getType();
return POS;
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 7c130d43874ba3..12631dc70da9c0 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -7551,7 +7551,8 @@ class MappableExprsHandler {
// For the case that having pointer as base, we need to remove one
// level of indirection.
if (&Component != &*Components.begin())
- ElementType = ElementType->getPointerOrObjCPointerOrArrayElementType();
+ ElementType =
+ ElementType->getPointerOrObjCPointerOrArrayElementType();
ElementTypeSize =
Context.getTypeSizeInChars(ElementType).getQuantity();
CurStrides.push_back(
@@ -8628,7 +8629,8 @@ class MappableExprsHandler {
llvm::SmallVector<const FieldDecl *, 4> Layout;
if (!OverlappedData.empty()) {
const Type *BaseType = VD->getType().getCanonicalType().getTypePtr();
- const Type *OrigType = BaseType->getPointerOrObjCPointerOrArrayElementType();
+ const Type *OrigType =
+ BaseType->getPointerOrObjCPointerOrArrayElementType();
while (BaseType != OrigType) {
BaseType = OrigType->getCanonicalTypeInternal().getTypePtr();
OrigType = BaseType->getPointerOrObjCPointerOrArrayElementType();
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index dc70dfe35153ab..0ec4575d73a358 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -9672,7 +9672,8 @@ static void checkIsValidOpenCLKernelParameter(
// walk around RecordDecl::fields().
assert((FieldTy->isArrayType() || FieldTy->isRecordType()) &&
"Unexpected type.");
- const Type *FieldRecTy = FieldTy->getPointerOrObjCPointerOrArrayElementType();
+ const Type *FieldRecTy =
+ FieldTy->getPointerOrObjCPointerOrArrayElementType();
RD = FieldRecTy->castAs<RecordType>()->getDecl();
} else {
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 64ea1212274737..65009ff80c4b49 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -17069,8 +17069,10 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
return Type->isSpecificBuiltinType(BuiltinType::Char_S) ||
Type->isSpecificBuiltinType(BuiltinType::Char_U);
};
- FDiag << (isPlainChar(FirstType->getPointerOrObjCPointerOrArrayElementType()) ||
- isPlainChar(SecondType->getPointerOrObjCPointerOrArrayElementType()));
+ FDiag << (isPlainChar(
+ FirstType->getPointerOrObjCPointerOrArrayElementType()) ||
+ isPlainChar(
+ SecondType->getPointerOrObjCPointerOrArrayElementType()));
}
// If we can fix the conversion, suggest the FixIts.
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 9f7cc798aa8ba7..f7755869c7f5b1 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -7879,7 +7879,9 @@ ExprResult InitializationSequence::Perform(Sema &S,
!CurInit.get()->getType()->isIncompleteArrayType() &&
S.Context.hasSameType(
MTETy->getPointerOrObjCPointerOrArrayElementType(),
- CurInit.get()->getType()->getPointerOrObjCPointerOrArrayElementType()))
+ CurInit.get()
+ ->getType()
+ ->getPointerOrObjCPointerOrArrayElementType()))
MTETy = CurInit.get()->getType();
// Materialize the temporary into memory.
diff --git a/clang/lib/Sema/SemaOpenCL.cpp b/clang/lib/Sema/SemaOpenCL.cpp
index bbe96cfe17e210..a636f860cc0d42 100644
--- a/clang/lib/Sema/SemaOpenCL.cpp
+++ b/clang/lib/Sema/SemaOpenCL.cpp
@@ -324,7 +324,9 @@ bool SemaOpenCL::checkBuiltinEnqueueKernel(CallExpr *TheCall) {
// Fifth argument is always passed as a pointer to clk_event_t.
if (!Arg4->isNullPointerConstant(Context,
Expr::NPC_ValueDependentIsNotNull) &&
- !Arg4->getType()->getPointerOrObjCPointerOrArrayElementType()->isClkEventT()) {
+ !Arg4->getType()
+ ->getPointerOrObjCPointerOrArrayElementType()
+ ->isClkEventT()) {
Diag(TheCall->getArg(4)->getBeginLoc(),
diag::err_opencl_builtin_expected_type)
<< TheCall->getDirectCallee()
>From f0350e1ebdf2fedadfabe99fdcbf2130dd5e3f28 Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:54:21 +0100
Subject: [PATCH 5/6] Improve documentation of getPointeeType()
---
clang/include/clang/AST/Type.h | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 79557441a926fd..0a505ebbfa1dc6 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -2871,8 +2871,15 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
/// This should never be used when type qualifiers are meaningful.
const Type *getPointerOrObjCPointerOrArrayElementType() const;
- /// If this is a pointer, ObjC object pointer, or block
- /// pointer, this returns the respective pointee.
+ /// Return the 'pointee type' for any of the following kinds of types,
+ /// and an empty QualType otherwise.
+ ///
+ /// - PointerType
+ /// - ObjCObjectPointerType
+ /// - BlockPointerType
+ /// - ReferenceType
+ /// - MemberPointerType
+ /// - DecayedType
QualType getPointeeType() const;
/// Return the specified type with any "sugar" removed from the type,
>From 4bdbbc2e20014aa2ad25231e6615b7cf9853916e Mon Sep 17 00:00:00 2001
From: Sirraide <aeternalmail at gmail.com>
Date: Mon, 13 Jan 2025 21:54:38 +0100
Subject: [PATCH 6/6] Add getPointerLikeOrArrayElementType()
---
clang/include/clang/AST/Type.h | 4 ++++
clang/lib/AST/Type.cpp | 6 ++++++
2 files changed, 10 insertions(+)
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 0a505ebbfa1dc6..80602a85fbcff4 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -2882,6 +2882,10 @@ class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
/// - DecayedType
QualType getPointeeType() const;
+ /// Return getElementType() if this is an array type, and getPointeeType()
+ /// otherwise.
+ QualType getPointerLikeOrArrayElementType() const;
+
/// Return the specified type with any "sugar" removed from the type,
/// removing any typedefs, typeofs, etc., as well as any qualifiers.
const Type *getUnqualifiedDesugaredType() const;
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index caa0ac858a1bea..38289783cd50c4 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -751,6 +751,12 @@ QualType Type::getPointeeType() const {
return {};
}
+QualType Type::getPointerLikeOrArrayElementType() const {
+ if (const auto *A = getAs<ArrayType>())
+ return A->getElementType();
+ return getPointeeType();
+}
+
const RecordType *Type::getAsStructureType() const {
// If this is directly a structure type, return it.
if (const auto *RT = dyn_cast<RecordType>(this)) {
More information about the lldb-commits
mailing list