llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-modules

@llvm/pr-subscribers-backend-hexagon

Author: Matheus Izvekov (mizvekov)

<details>
<summary>Changes</summary>



---

Patch is 330.74 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/149747.diff


167 Files Affected:

- (modified) clang-tools-extra/clang-doc/Serialize.cpp (+2-2) 
- (modified) 
clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp 
(+1-1) 
- (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/SlicingCheck.cpp 
(+1-1) 
- (modified) clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp 
(+5-3) 
- (modified) clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp 
(+1-1) 
- (modified) clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp (+1-1) 
- (modified) clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp 
(+1-1) 
- (modified) 
clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp (+2-2) 
- (modified) clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp 
(+2-1) 
- (modified) clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp 
(+3-2) 
- (modified) clang-tools-extra/clang-tidy/utils/TypeTraits.cpp (+2-1) 
- (modified) clang-tools-extra/clangd/DumpAST.cpp (+1-1) 
- (modified) clang-tools-extra/clangd/FindTarget.cpp (+1-1) 
- (modified) clang-tools-extra/clangd/Hover.cpp (+1-1) 
- (modified) clang-tools-extra/clangd/IncludeFixer.cpp (+1-1) 
- (modified) clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp (+1-1) 
- (modified) clang-tools-extra/include-cleaner/lib/WalkAST.cpp (+3-3) 
- (modified) clang/include/clang/AST/Type.h (+4-4) 
- (modified) clang/lib/AST/APValue.cpp (+2-1) 
- (modified) clang/lib/AST/ASTContext.cpp (+54-37) 
- (modified) clang/lib/AST/ASTDiagnostic.cpp (+3-2) 
- (modified) clang/lib/AST/ASTImporter.cpp (+8-7) 
- (modified) clang/lib/AST/ASTStructuralEquivalence.cpp (+3-3) 
- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+5-4) 
- (modified) clang/lib/AST/ByteCode/Context.cpp (+1-1) 
- (modified) clang/lib/AST/ByteCode/InterpBuiltin.cpp (+4-3) 
- (modified) clang/lib/AST/ByteCode/Pointer.cpp (+1-1) 
- (modified) clang/lib/AST/ByteCode/Program.cpp (+4-3) 
- (modified) clang/lib/AST/ByteCode/Record.cpp (+1-1) 
- (modified) clang/lib/AST/CXXInheritance.cpp (+10-6) 
- (modified) clang/lib/AST/Decl.cpp (+20-12) 
- (modified) clang/lib/AST/DeclCXX.cpp (+14-9) 
- (modified) clang/lib/AST/DeclarationName.cpp (+3-3) 
- (modified) clang/lib/AST/Expr.cpp (+14-7) 
- (modified) clang/lib/AST/ExprConstant.cpp (+32-16) 
- (modified) clang/lib/AST/FormatString.cpp (+6-4) 
- (modified) clang/lib/AST/InheritViz.cpp (+2-2) 
- (modified) clang/lib/AST/ItaniumCXXABI.cpp (+4-4) 
- (modified) clang/lib/AST/ItaniumMangle.cpp (+14-9) 
- (modified) clang/lib/AST/JSONNodeDumper.cpp (+3-3) 
- (modified) clang/lib/AST/MicrosoftMangle.cpp (+2-2) 
- (modified) clang/lib/AST/ODRHash.cpp (+1-1) 
- (modified) clang/lib/AST/PrintfFormatString.cpp (+1-1) 
- (modified) clang/lib/AST/RecordLayoutBuilder.cpp (+4-5) 
- (modified) clang/lib/AST/ScanfFormatString.cpp (+3-2) 
- (modified) clang/lib/AST/TemplateBase.cpp (+1-1) 
- (modified) clang/lib/AST/TextNodeDumper.cpp (+3-3) 
- (modified) clang/lib/AST/Type.cpp (+123-71) 
- (modified) clang/lib/AST/TypeLoc.cpp (+2-3) 
- (modified) clang/lib/AST/TypePrinter.cpp (+4-2) 
- (modified) clang/lib/AST/VTTBuilder.cpp (+9-3) 
- (modified) clang/lib/AST/VTableBuilder.cpp (+5-3) 
- (modified) clang/lib/Analysis/ThreadSafety.cpp (+3-1) 
- (modified) clang/lib/Analysis/ThreadSafetyCommon.cpp (+2-2) 
- (modified) clang/lib/CodeGen/ABIInfo.cpp (+1-1) 
- (modified) clang/lib/CodeGen/ABIInfoImpl.cpp (+18-18) 
- (modified) clang/lib/CodeGen/CGBlocks.cpp (+2-1) 
- (modified) clang/lib/CodeGen/CGCUDANV.cpp (+2-1) 
- (modified) clang/lib/CodeGen/CGCXX.cpp (+5-3) 
- (modified) clang/lib/CodeGen/CGCall.cpp (+13-7) 
- (modified) clang/lib/CodeGen/CGClass.cpp (+29-14) 
- (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+18-14) 
- (modified) clang/lib/CodeGen/CGDecl.cpp (+5-2) 
- (modified) clang/lib/CodeGen/CGExpr.cpp (+20-9) 
- (modified) clang/lib/CodeGen/CGExprAgg.cpp (+17-8) 
- (modified) clang/lib/CodeGen/CGExprCXX.cpp (+12-8) 
- (modified) clang/lib/CodeGen/CGExprConstant.cpp (+21-8) 
- (modified) clang/lib/CodeGen/CGExprScalar.cpp (+7-4) 
- (modified) clang/lib/CodeGen/CGNonTrivialStruct.cpp (+4-2) 
- (modified) clang/lib/CodeGen/CGObjC.cpp (+3-1) 
- (modified) clang/lib/CodeGen/CGObjCMac.cpp (+4-3) 
- (modified) clang/lib/CodeGen/CGObjCRuntime.cpp (+3-1) 
- (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+9-3) 
- (modified) clang/lib/CodeGen/CodeGenFunction.cpp (+3-1) 
- (modified) clang/lib/CodeGen/CodeGenFunction.h (+1-1) 
- (modified) clang/lib/CodeGen/CodeGenModule.cpp (+4-2) 
- (modified) clang/lib/CodeGen/CodeGenTBAA.cpp (+7-6) 
- (modified) clang/lib/CodeGen/CodeGenTypes.cpp (+10-6) 
- (modified) clang/lib/CodeGen/HLSLBufferLayoutBuilder.cpp (+2-1) 
- (modified) clang/lib/CodeGen/ItaniumCXXABI.cpp (+31-16) 
- (modified) clang/lib/CodeGen/SwiftCallingConv.cpp (+5-4) 
- (modified) clang/lib/CodeGen/Targets/AArch64.cpp (+5-4) 
- (modified) clang/lib/CodeGen/Targets/AMDGPU.cpp (+3-3) 
- (modified) clang/lib/CodeGen/Targets/ARC.cpp (+3-2) 
- (modified) clang/lib/CodeGen/Targets/ARM.cpp (+5-4) 
- (modified) clang/lib/CodeGen/Targets/BPF.cpp (+3-2) 
- (modified) clang/lib/CodeGen/Targets/CSKY.cpp (+1-1) 
- (modified) clang/lib/CodeGen/Targets/Hexagon.cpp (+3-2) 
- (modified) clang/lib/CodeGen/Targets/Lanai.cpp (+3-2) 
- (modified) clang/lib/CodeGen/Targets/LoongArch.cpp (+6-4) 
- (modified) clang/lib/CodeGen/Targets/Mips.cpp (+4-4) 
- (modified) clang/lib/CodeGen/Targets/NVPTX.cpp (+3-3) 
- (modified) clang/lib/CodeGen/Targets/PPC.cpp (+5-3) 
- (modified) clang/lib/CodeGen/Targets/RISCV.cpp (+6-4) 
- (modified) clang/lib/CodeGen/Targets/SPIR.cpp (+3-3) 
- (modified) clang/lib/CodeGen/Targets/Sparc.cpp (+1-1) 
- (modified) clang/lib/CodeGen/Targets/SystemZ.cpp (+4-4) 
- (modified) clang/lib/CodeGen/Targets/WebAssembly.cpp (+2-1) 
- (modified) clang/lib/CodeGen/Targets/X86.cpp (+34-23) 
- (modified) clang/lib/CodeGen/Targets/XCore.cpp (+2-2) 
- (modified) clang/lib/ExtractAPI/TypedefUnderlyingTypeResolver.cpp (+1-1) 
- (modified) clang/lib/Index/IndexTypeSourceInfo.cpp (+1-1) 
- (modified) clang/lib/Index/USRGeneration.cpp (+7-3) 
- (modified) clang/lib/InstallAPI/Visitor.cpp (+2-2) 
- (modified) clang/lib/Interpreter/InterpreterValuePrinter.cpp (+4-4) 
- (modified) clang/lib/Interpreter/Value.cpp (+3-3) 
- (modified) clang/lib/Sema/Sema.cpp (+12-9) 
- (modified) clang/lib/Sema/SemaAccess.cpp (+5-2) 
- (modified) clang/lib/Sema/SemaAvailability.cpp (+2-2) 
- (modified) clang/lib/Sema/SemaBPF.cpp (+3-3) 
- (modified) clang/lib/Sema/SemaCUDA.cpp (+5-2) 
- (modified) clang/lib/Sema/SemaCXXScopeSpec.cpp (+1-1) 
- (modified) clang/lib/Sema/SemaCast.cpp (+22-23) 
- (modified) clang/lib/Sema/SemaChecking.cpp (+47-22) 
- (modified) clang/lib/Sema/SemaCodeComplete.cpp (+6-7) 
- (modified) clang/lib/Sema/SemaCoroutine.cpp (+3-1) 
- (modified) clang/lib/Sema/SemaDecl.cpp (+33-17) 
- (modified) clang/lib/Sema/SemaDeclAttr.cpp (+11-6) 
- (modified) clang/lib/Sema/SemaDeclCXX.cpp (+36-19) 
- (modified) clang/lib/Sema/SemaDeclObjC.cpp (+12-5) 
- (modified) clang/lib/Sema/SemaExpr.cpp (+25-14) 
- (modified) clang/lib/Sema/SemaExprCXX.cpp (+15-8) 
- (modified) clang/lib/Sema/SemaExprObjC.cpp (+5-4) 
- (modified) clang/lib/Sema/SemaHLSL.cpp (+7-5) 
- (modified) clang/lib/Sema/SemaInit.cpp (+45-27) 
- (modified) clang/lib/Sema/SemaLambda.cpp (+1-1) 
- (modified) clang/lib/Sema/SemaLookup.cpp (+9-4) 
- (modified) clang/lib/Sema/SemaObjC.cpp (+3-2) 
- (modified) clang/lib/Sema/SemaObjCProperty.cpp (+3-1) 
- (modified) clang/lib/Sema/SemaOpenMP.cpp (+4-3) 
- (modified) clang/lib/Sema/SemaOverload.cpp (+44-26) 
- (modified) clang/lib/Sema/SemaPPC.cpp (+4-2) 
- (modified) clang/lib/Sema/SemaSYCL.cpp (+1-1) 
- (modified) clang/lib/Sema/SemaStmt.cpp (+12-10) 
- (modified) clang/lib/Sema/SemaStmtAsm.cpp (+4-2) 
- (modified) clang/lib/Sema/SemaSwift.cpp (+3-2) 
- (modified) clang/lib/Sema/SemaTemplate.cpp (+17-13) 
- (modified) clang/lib/Sema/SemaTemplateInstantiate.cpp (+1-1) 
- (modified) clang/lib/Sema/SemaTemplateInstantiateDecl.cpp (+7-5) 
- (modified) clang/lib/Sema/SemaType.cpp (+10-7) 
- (modified) clang/lib/Sema/SemaTypeTraits.cpp (+9-7) 
- (modified) clang/lib/Sema/TreeTransform.h (+6-3) 
- (modified) clang/lib/Sema/UsedDeclVisitor.h (+4-3) 
- (modified) clang/lib/Serialization/ASTReader.cpp (+4-4) 
- (modified) clang/lib/Serialization/TemplateArgumentHasher.cpp (+1-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp (+1-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp (+1-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp 
(+2-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp 
(+2-2) 
- (modified) clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp (+3-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/PaddingChecker.cpp (+1-1) 
- (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp 
(+2-2) 
- (modified) 
clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp 
(+2-2) 
- (modified) clang/lib/StaticAnalyzer/Core/CallEvent.cpp (+4-2) 
- (modified) clang/lib/StaticAnalyzer/Core/RegionStore.cpp (+3-2) 
- (modified) clang/tools/libclang/CIndex.cpp (+3-3) 
- (modified) clang/tools/libclang/CIndexCodeCompletion.cpp (+2-2) 
- (modified) clang/tools/libclang/CXCursor.cpp (+1-1) 
- (modified) clang/tools/libclang/CXIndexDataConsumer.cpp (+1-1) 
- (modified) clang/tools/libclang/CXType.cpp (+4-4) 
- (modified) clang/unittests/AST/ASTImporterTest.cpp (+2-2) 
- (modified) clang/unittests/AST/RandstructTest.cpp (+1-1) 
- (modified) clang/unittests/AST/StructuralEquivalenceTest.cpp (+8-4) 
- (modified) clang/unittests/StaticAnalyzer/SValTest.cpp (+5-8) 
- (modified) clang/unittests/Tooling/LookupTest.cpp (+6-6) 
- (modified) 
clang/unittests/Tooling/RecursiveASTVisitorTests/MemberPointerTypeLoc.cpp 
(+1-1) 
- (modified) 
clang/unittests/Tooling/RecursiveASTVisitorTests/NestedNameSpecifiers.cpp 
(+1-1) 


``````````diff
diff --git a/clang-tools-extra/clang-doc/Serialize.cpp 
b/clang-tools-extra/clang-doc/Serialize.cpp
index 7a0e00c6d9c2d..2b1f0f3c90c0c 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -895,8 +895,8 @@ parseBases(RecordInfo &I, const CXXRecordDecl *D, bool 
IsFileInRootDir,
     return;
   for (const CXXBaseSpecifier &B : D->bases()) {
     if (const RecordType *Ty = B.getType()->getAs<RecordType>()) {
-      if (const CXXRecordDecl *Base =
-              cast_or_null<CXXRecordDecl>(Ty->getDecl()->getDefinition())) {
+      if (const CXXRecordDecl *Base = cast_or_null<CXXRecordDecl>(
+              Ty->getOriginalDecl()->getDefinition())) {
         // Initialized without USR and name, this will be set in the following
         // if-else stmt.
         BaseRecordInfo BI(
diff --git 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
index b413b12cd37ab..40607597297b5 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
@@ -190,7 +190,7 @@ struct InitializerInsertion {
 // Convenience utility to get a RecordDecl from a QualType.
 const RecordDecl *getCanonicalRecordDecl(const QualType &Type) {
   if (const auto *RT = Type.getCanonicalType()->getAs<RecordType>())
-    return RT->getDecl();
+    return RT->getOriginalDecl();
   return nullptr;
 }
 
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/SlicingCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/SlicingCheck.cpp
index 76754394de760..40fd15c08f0a1 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/SlicingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/SlicingCheck.cpp
@@ -92,7 +92,7 @@ void SlicingCheck::diagnoseSlicedOverriddenMethods(
   for (const auto &Base : DerivedDecl.bases()) {
     if (const auto *BaseRecordType = Base.getType()->getAs<RecordType>()) {
       if (const auto *BaseRecord = cast_or_null<CXXRecordDecl>(
-              BaseRecordType->getDecl()->getDefinition()))
+              BaseRecordType->getOriginalDecl()->getDefinition()))
         diagnoseSlicedOverriddenMethods(Call, *BaseRecord, BaseDecl);
     }
   }
diff --git a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp 
b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp
index 80ff97a762134..0302a5ad4957c 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp
@@ -74,7 +74,7 @@ bool MultipleInheritanceCheck::isInterface(const 
CXXRecordDecl *Node) {
     const auto *Ty = I.getType()->getAs<RecordType>();
     if (!Ty)
       continue;
-    const RecordDecl *D = Ty->getDecl()->getDefinition();
+    const RecordDecl *D = Ty->getOriginalDecl()->getDefinition();
     if (!D)
       continue;
     const auto *Base = cast<CXXRecordDecl>(D);
@@ -106,7 +106,8 @@ void MultipleInheritanceCheck::check(const 
MatchFinder::MatchResult &Result) {
       const auto *Ty = I.getType()->getAs<RecordType>();
       if (!Ty)
         continue;
-      const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition());
+      const auto *Base =
+          cast<CXXRecordDecl>(Ty->getOriginalDecl()->getDefinition());
       if (!isInterface(Base))
         NumConcrete++;
     }
@@ -117,7 +118,8 @@ void MultipleInheritanceCheck::check(const 
MatchFinder::MatchResult &Result) {
       const auto *Ty = V.getType()->getAs<RecordType>();
       if (!Ty)
         continue;
-      const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition());
+      const auto *Base =
+          cast<CXXRecordDecl>(Ty->getOriginalDecl()->getDefinition());
       if (!isInterface(Base))
         NumConcrete++;
     }
diff --git a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp 
b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
index 3deea0620514b..68233ec6bd441 100644
--- a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp
@@ -72,7 +72,7 @@ static bool isStdInitializerList(QualType Type) {
   }
   if (const auto *RT = Type->getAs<RecordType>()) {
     if (const auto *Specialization =
-            dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl()))
+            dyn_cast<ClassTemplateSpecializationDecl>(RT->getOriginalDecl()))
       return 
declIsStdInitializerList(Specialization->getSpecializedTemplate());
   }
   return false;
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp 
b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
index e5e8c91a9da30..8211a0ec6a5e1 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -132,7 +132,7 @@ void UnusedUsingDeclsCheck::check(const 
MatchFinder::MatchResult &Result) {
     }
     if (const auto *ECD = dyn_cast<EnumConstantDecl>(Used)) {
       if (const auto *ET = ECD->getType()->getAs<EnumType>())
-        removeFromFoundDecls(ET->getDecl());
+        removeFromFoundDecls(ET->getOriginalDecl());
     }
   };
   // We rely on the fact that the clang AST is walked in order, usages are only
diff --git a/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp
index 7329b99e4b915..5310f2fd25381 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseScopedLockCheck.cpp
@@ -29,7 +29,7 @@ static bool isLockGuardDecl(const NamedDecl *Decl) {
 
 static bool isLockGuard(const QualType &Type) {
   if (const auto *Record = Type->getAs<RecordType>())
-    if (const RecordDecl *Decl = Record->getDecl())
+    if (const RecordDecl *Decl = Record->getOriginalDecl())
       return isLockGuardDecl(Decl);
 
   if (const auto *TemplateSpecType = Type->getAs<TemplateSpecializationType>())
diff --git 
a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index 5a04029e4a6fa..447c2437666cf 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -414,9 +414,9 @@ static bool areTypesCompatible(QualType ArgType, QualType 
ParamType,
   // Arithmetic types are interconvertible, except scoped enums.
   if (ParamType->isArithmeticType() && ArgType->isArithmeticType()) {
     if ((ParamType->isEnumeralType() &&
-         ParamType->castAs<EnumType>()->getDecl()->isScoped()) ||
+         ParamType->castAs<EnumType>()->getOriginalDecl()->isScoped()) ||
         (ArgType->isEnumeralType() &&
-         ArgType->castAs<EnumType>()->getDecl()->isScoped()))
+         ArgType->castAs<EnumType>()->getOriginalDecl()->isScoped()))
       return false;
 
     return true;
diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp 
b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
index 0637d0eff688c..aa6aefcf0c493 100644
--- a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
+++ b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
@@ -66,7 +66,8 @@ ExceptionSpecAnalyzer::analyzeBase(const CXXBaseSpecifier 
&Base,
   if (!RecType)
     return State::Unknown;
 
-  const auto *BaseClass = cast<CXXRecordDecl>(RecType->getDecl());
+  const auto *BaseClass =
+      cast<CXXRecordDecl>(RecType->getOriginalDecl())->getDefinitionOrSelf();
 
   return analyzeRecord(BaseClass, Kind);
 }
diff --git a/clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp 
b/clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp
index 7f4ccca84faa5..3229efb957067 100644
--- a/clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp
+++ b/clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp
@@ -465,8 +465,9 @@ bool FormatStringConverter::emitIntegerArgument(
     // the signedness based on the format string, so we need to do the
     // same.
     if (const auto *ET = ArgType->getAs<EnumType>()) {
-      if (const std::optional<std::string> MaybeCastType =
-              castTypeForArgument(ArgKind, ET->getDecl()->getIntegerType()))
+      if (const std::optional<std::string> MaybeCastType = castTypeForArgument(
+              ArgKind,
+              ET->getOriginalDecl()->getDefinitionOrSelf()->getIntegerType()))
         ArgFixes.emplace_back(
             ArgIndex, (Twine("static_cast<") + *MaybeCastType + ">(").str());
       else
diff --git a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp 
b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
index 44db0c2aed607..96d3a5bbd86a2 100644
--- a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
+++ b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
@@ -124,7 +124,8 @@ bool isTriviallyDefaultConstructible(QualType Type, const 
ASTContext &Context) {
     return true;
 
   if (const auto *RT = CanonicalType->getAs<RecordType>()) {
-    return recordIsTriviallyDefaultConstructible(*RT->getDecl(), Context);
+    return recordIsTriviallyDefaultConstructible(
+        *RT->getOriginalDecl()->getDefinitionOrSelf(), Context);
   }
 
   // No other types can match.
diff --git a/clang-tools-extra/clangd/DumpAST.cpp 
b/clang-tools-extra/clangd/DumpAST.cpp
index 54e15b2f553c6..14e14a5e9f544 100644
--- a/clang-tools-extra/clangd/DumpAST.cpp
+++ b/clang-tools-extra/clangd/DumpAST.cpp
@@ -261,7 +261,7 @@ class DumpVisitor : public RecursiveASTVisitor<DumpVisitor> 
{
       return TL.getType().getLocalQualifiers().getAsString(
           Ctx.getPrintingPolicy());
     if (const auto *TT = dyn_cast<TagType>(TL.getTypePtr()))
-      return getDetail(TT->getDecl());
+      return getDetail(TT->getOriginalDecl());
     if (const auto *DT = dyn_cast<DeducedType>(TL.getTypePtr()))
       if (DT->isDeduced())
         return DT->getDeducedType().getAsString(Ctx.getPrintingPolicy());
diff --git a/clang-tools-extra/clangd/FindTarget.cpp 
b/clang-tools-extra/clangd/FindTarget.cpp
index d9b684b3952aa..a5ab40e4221f1 100644
--- a/clang-tools-extra/clangd/FindTarget.cpp
+++ b/clang-tools-extra/clangd/FindTarget.cpp
@@ -878,7 +878,7 @@ refInTypeLoc(TypeLoc L, const HeuristicResolver *Resolver) {
       Refs.push_back(ReferenceLoc{NestedNameSpecifierLoc(),
                                   L.getNameLoc(),
                                   /*IsDecl=*/false,
-                                  {L.getDecl()}});
+                                  {L.getOriginalDecl()}});
     }
 
     void VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc L) {
diff --git a/clang-tools-extra/clangd/Hover.cpp 
b/clang-tools-extra/clangd/Hover.cpp
index 3aac570f33478..f4b312cde6349 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -452,7 +452,7 @@ std::optional<std::string> printExprValue(const Expr *E,
     // Compare to int64_t to avoid bit-width match requirements.
     int64_t Val = Constant.Val.getInt().getExtValue();
     for (const EnumConstantDecl *ECD :
-         T->castAs<EnumType>()->getDecl()->enumerators())
+         T->castAs<EnumType>()->getOriginalDecl()->enumerators())
       if (ECD->getInitVal() == Val)
         return llvm::formatv("{0} ({1})", ECD->getNameAsString(),
                              printHex(Constant.Val.getInt()))
diff --git a/clang-tools-extra/clangd/IncludeFixer.cpp 
b/clang-tools-extra/clangd/IncludeFixer.cpp
index 50bc2bd7ccb94..cc1125e705674 100644
--- a/clang-tools-extra/clangd/IncludeFixer.cpp
+++ b/clang-tools-extra/clangd/IncludeFixer.cpp
@@ -173,7 +173,7 @@ std::vector<Fix> IncludeFixer::fix(DiagnosticsEngine::Level 
DiagLevel,
           // `enum x : int;' is not formally an incomplete type.
           // We may need a full definition anyway.
           if (auto * ET = llvm::dyn_cast<EnumType>(T))
-            if (!ET->getDecl()->getDefinition())
+            if (!ET->getOriginalDecl()->getDefinition())
               return fixIncompleteType(*T);
         }
       }
diff --git a/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp 
b/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
index 43cfc769f7f71..7e616968c6046 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
@@ -116,7 +116,7 @@ bool PopulateSwitch::prepare(const Selection &Sel) {
   EnumT = Cond->getType().getCanonicalType()->getAsAdjusted<EnumType>();
   if (!EnumT)
     return false;
-  EnumD = EnumT->getDecl();
+  EnumD = EnumT->getOriginalDecl();
   if (!EnumD || EnumD->isDependentType())
     return false;
 
diff --git a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp 
b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
index 6f51fa68f45b8..ff64b0b257572 100644
--- a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
+++ b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
@@ -337,17 +337,17 @@ class ASTWalker : public RecursiveASTVisitor<ASTWalker> {
   }
 
   bool VisitUsingTypeLoc(UsingTypeLoc TL) {
-    reportType(TL.getNameLoc(), TL.getFoundDecl());
+    reportType(TL.getNameLoc(), TL.getDecl());
     return true;
   }
 
   bool VisitTagTypeLoc(TagTypeLoc TTL) {
-    reportType(TTL.getNameLoc(), TTL.getDecl());
+    reportType(TTL.getNameLoc(), TTL.getOriginalDecl());
     return true;
   }
 
   bool VisitTypedefTypeLoc(TypedefTypeLoc TTL) {
-    reportType(TTL.getNameLoc(), TTL.getTypedefNameDecl());
+    reportType(TTL.getNameLoc(), TTL.getDecl());
     return true;
   }
 
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index ca50227b2426a..23a683ededa87 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -8867,8 +8867,8 @@ inline bool Type::isIntegerType() const {
   if (const EnumType *ET = dyn_cast<EnumType>(CanonicalType)) {
     // Incomplete enum types are not treated as integer types.
     // FIXME: In C++, enum types are never integer types.
-    return IsEnumDeclComplete(ET->getDecl()) &&
-      !IsEnumDeclScoped(ET->getDecl());
+    return IsEnumDeclComplete(ET->getOriginalDecl()) &&
+           !IsEnumDeclScoped(ET->getOriginalDecl());
   }
   return isBitIntType();
 }
@@ -8926,7 +8926,7 @@ inline bool Type::isScalarType() const {
   if (const EnumType *ET = dyn_cast<EnumType>(CanonicalType))
     // Enums are scalar types, but only if they are defined.  Incomplete enums
     // are not treated as scalar types.
-    return IsEnumDeclComplete(ET->getDecl());
+    return IsEnumDeclComplete(ET->getOriginalDecl());
   return isa<PointerType>(CanonicalType) ||
          isa<BlockPointerType>(CanonicalType) ||
          isa<MemberPointerType>(CanonicalType) ||
@@ -8942,7 +8942,7 @@ inline bool Type::isIntegralOrEnumerationType() const {
   // Check for a complete enum type; incomplete enum types are not properly an
   // enumeration type in the sense required here.
   if (const auto *ET = dyn_cast<EnumType>(CanonicalType))
-    return IsEnumDeclComplete(ET->getDecl());
+    return IsEnumDeclComplete(ET->getOriginalDecl());
 
   return isBitIntType();
 }
diff --git a/clang/lib/AST/APValue.cpp b/clang/lib/AST/APValue.cpp
index ee3dc84479fd9..2d62209bbc28c 100644
--- a/clang/lib/AST/APValue.cpp
+++ b/clang/lib/AST/APValue.cpp
@@ -902,8 +902,9 @@ void APValue::printPretty(raw_ostream &Out, const 
PrintingPolicy &Policy,
   }
   case APValue::Struct: {
     Out << '{';
-    const RecordDecl *RD = Ty->castAs<RecordType>()->getDecl();
     bool First = true;
+    const RecordDecl *RD =
+        Ty->castAs<RecordType>()->getOriginalDecl()->getDefinitionOrSelf();
     if (unsigned N = getStructNumBases()) {
       const CXXRecordDecl *CD = cast<CXXRecordDecl>(RD);
       CXXRecordDecl::base_class_const_iterator BI = CD->bases_begin();
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 814e7cf87fec8..2c98bccef5dbb 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -653,7 +653,7 @@ comments::FullComment *ASTContext::getCommentForDecl(
       // does not have one of its own.
       QualType QT = TD->getUnderlyingType();
       if (const auto *TT = QT->getAs<TagType>())
-        if (const Decl *TD = TT->getDecl())
+        if (const Decl *TD = TT->getOriginalDecl())
           if (comments::FullComment *FC = getCommentForDecl(TD, PP))
             return cloneFullComment(FC, D);
     }
@@ -1931,10 +1931,12 @@ TypeInfoChars 
ASTContext::getTypeInfoDataSizeInChars(QualType T) const {
   // of a base-class subobject.  We decide whether that's possible
   // during class layout, so here we can just trust the layout results.
   if (getLangOpts().CPlusPlus) {
-    if (const auto *RT = T->getAs<RecordType>();
-        RT && !RT->getDecl()->isInvalidDecl()) {
-      const ASTRecordLayout &layout = getASTRecordLayout(RT->getDecl());
-      Info.Width = layout.getDataSize();
+    if (const auto *RT = T->getAs<RecordType>()) {
+      const auto *RD = RT->getOriginalDecl()->getDefinitionOrSelf();
+      if (!RD->isInvalidDecl()) {
+        const ASTRecordLayout &layout = getASTRecordLayout(RD);
+        Info.Width = layout.getDataSize();
+      }
     }
   }
 
@@ -2001,8 +2003,9 @@ bool ASTContext::isPromotableIntegerType(QualType T) 
const {
   // Enumerated types are promotable to their compatible integer types
   // (C99 6.3.1.1) a.k.a. its underlying type (C++ [conv.prom]p2).
   if (const auto *ET = T->getAs<EnumType>()) {
-    if (T->isDependentType() || ET->getDecl()->getPromotionType().isNull() ||
-        ET->getDecl()->isScoped())
+    const EnumDecl *ED = ET->getOriginalDecl()->getDefinitionOrSelf();
+    if (T->isDependentType() || ED->getPromotionType().isNull() ||
+        ED->isScoped())
       return false;
 
     return true;
@@ -2470,15 +2473,16 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) 
const {
   case Type::Record:
   case Type::Enum: {
     const auto *TT = cast<TagType>(T);
+    const TagDecl *TD = TT->getOriginalDecl()->getDefinitionOrSelf();
 
-    if (TT->getDecl()->isInvalidDecl()) {
+    if (TD->isInvalidDecl()) {
       Width = 8;
       Align = 8;
       break;
     }
 
-    if (const auto *ET = dyn_cast<EnumType>(TT)) {
-      const EnumDecl *ED = ET->getDecl();
+    if (isa<EnumType>(TT)) {
+      const EnumDecl *ED = cast<EnumDecl>(TD);
       TypeInfo Info =
           getTypeInfo(ED->getIntegerType()->getUnqualifiedDesugaredType());
       if (unsigned AttrAlign = ED->getMaxAlignment()) {
@@ -2613,8 +2617,7 @@ unsigned ASTContext::getTypeUnadjustedAlign(const Type 
*T) const {
 
   unsigned UnadjustedAlign;
   if (const auto *RT = T->getAs<RecordType>()) {
-    const RecordDecl *RD = RT->getDecl();
-    const ASTRecordLayout &Layout = getASTRecordLayout(RD);
+    const ASTRecordLayout &Layout = getASTRecordLayout(RT->getOriginalDecl());
     UnadjustedAlign = toBits(Layout.getUnadjustedAlignment());
   } else if (const auto *ObjCI = T->getAs<ObjCInterfaceType>()) {
     const ASTRecordLayout &Layout = 
getASTObjCInterfaceLayout(ObjCI->getDecl());
@@ -2690,7 +2693,7 @@ unsigned ASTContext::getPreferredTypeAlign(const Type *T) 
const {
     return ABIAlign;
 
   if (const auto *RT = T->getAs<RecordType>()) {
-    const RecordDecl *RD = RT->getDecl();
+    const RecordDecl *RD = RT->getOriginalDecl()->getDefinitionOrSelf();
 
     // When used as part of a typedef, or together with a 'packed' attribute,
     // the 'aligned' attribute can be used to decrease alignment. Note that the
@@ -2713,7 +2716,10 @@ unsigned ASTContext::getPreferredTypeAlign(const Type 
*T) const {
   if (const auto *CT = T->getAs<ComplexType>())
     T = CT->getElementType().getTypePtr();
   if (const auto *ET = T->getAs<EnumType>())
-    T = ET->getDecl()->getIntegerType().getTypePtr();
+    T = ET->getOriginalDecl()
+            ->getDefinitionOrSelf()
+            ->getIntegerType()
+            .getTypePtr();
   if (T->isSpecificBuiltinType(BuiltinType::Double) ||
       T->isSpecificBuiltinType(BuiltinType::LongLong) ||
       T->isSpecificBuiltinType(BuiltinType::ULongLong) ||
@@ -3040,7 +3046,8 @@ bool ASTContext::hasUniqueObjectRepresentations(
     return !ABI->getMemberPointerInfo(MPT).HasPadding;
 
   if (Ty->isRecordType()) {
-    const RecordDecl *Record = Ty->castAs<RecordType>()->...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/149747
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to