[clang] 888673b - Revert "[clang] Implement ElaboratedType sugaring for types written bare"

Jonas Devlieghere via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 14 21:17:59 PDT 2022


Author: Jonas Devlieghere
Date: 2022-07-14T21:17:48-07:00
New Revision: 888673b6e3bf0182fb5f154eb3231c9ae022acca

URL: https://github.com/llvm/llvm-project/commit/888673b6e3bf0182fb5f154eb3231c9ae022acca
DIFF: https://github.com/llvm/llvm-project/commit/888673b6e3bf0182fb5f154eb3231c9ae022acca.diff

LOG: Revert "[clang] Implement ElaboratedType sugaring for types written bare"

This reverts commit 7c51f02effdbd0d5e12bfd26f9c3b2ab5687c93f because it
stills breaks the LLDB tests. This was  re-landed without addressing the
issue or even agreement on how to address the issue. More details and
discussion in https://reviews.llvm.org/D112374.

Added: 
    

Modified: 
    clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
    clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllSymbols.cpp
    clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp
    clang-tools-extra/clang-tidy/bugprone/SmartPtrArrayMismatchCheck.cpp
    clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp
    clang-tools-extra/clang-tidy/hicpp/MultiwayPathsCoveredCheck.cpp
    clang-tools-extra/clang-tidy/misc/MisplacedConstCheck.cpp
    clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
    clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
    clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
    clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
    clang-tools-extra/clangd/FindTarget.cpp
    clang-tools-extra/clangd/unittests/ASTTests.cpp
    clang-tools-extra/clangd/unittests/DumpASTTests.cpp
    clang-tools-extra/clangd/unittests/FindTargetTests.cpp
    clang-tools-extra/clangd/unittests/HoverTests.cpp
    clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-init.cpp
    clang-tools-extra/test/clang-tidy/checkers/bugprone/shared-ptr-array-mismatch.cpp
    clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison-32bits.cpp
    clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison.cpp
    clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp
    clang-tools-extra/unittests/clang-change-namespace/ChangeNamespaceTests.cpp
    clang/bindings/python/tests/cindex/test_type.py
    clang/include/clang/AST/ASTContext.h
    clang/include/clang/AST/Type.h
    clang/include/clang/AST/TypeLoc.h
    clang/lib/ARCMigrate/ObjCMT.cpp
    clang/lib/AST/ASTContext.cpp
    clang/lib/AST/ASTDiagnostic.cpp
    clang/lib/AST/DeclCXX.cpp
    clang/lib/AST/ExprCXX.cpp
    clang/lib/AST/FormatString.cpp
    clang/lib/AST/PrintfFormatString.cpp
    clang/lib/AST/QualTypeNames.cpp
    clang/lib/AST/ScanfFormatString.cpp
    clang/lib/AST/Type.cpp
    clang/lib/AST/TypeLoc.cpp
    clang/lib/Analysis/RetainSummaryManager.cpp
    clang/lib/CodeGen/CGCall.cpp
    clang/lib/CodeGen/CGExprScalar.cpp
    clang/lib/CodeGen/CodeGenFunction.cpp
    clang/lib/CodeGen/CodeGenModule.cpp
    clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp
    clang/lib/Sema/SemaChecking.cpp
    clang/lib/Sema/SemaCodeComplete.cpp
    clang/lib/Sema/SemaDecl.cpp
    clang/lib/Sema/SemaDeclCXX.cpp
    clang/lib/Sema/SemaExpr.cpp
    clang/lib/Sema/SemaExprCXX.cpp
    clang/lib/Sema/SemaExprObjC.cpp
    clang/lib/Sema/SemaTemplate.cpp
    clang/lib/Sema/SemaType.cpp
    clang/lib/Sema/TreeTransform.h
    clang/lib/Sema/TypeLocBuilder.cpp
    clang/lib/Sema/TypeLocBuilder.h
    clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp
    clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp
    clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp
    clang/test/AST/ast-dump-APValue-anon-union.cpp
    clang/test/AST/ast-dump-APValue-struct.cpp
    clang/test/AST/ast-dump-APValue-union.cpp
    clang/test/AST/ast-dump-decl.cpp
    clang/test/AST/ast-dump-expr-json.cpp
    clang/test/AST/ast-dump-expr.cpp
    clang/test/AST/ast-dump-funcs.cpp
    clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp
    clang/test/AST/ast-dump-overloaded-operators.cpp
    clang/test/AST/ast-dump-records-json.cpp
    clang/test/AST/ast-dump-recovery.cpp
    clang/test/AST/ast-dump-stmt-json.cpp
    clang/test/AST/ast-dump-stmt.cpp
    clang/test/AST/ast-dump-template-decls-json.cpp
    clang/test/AST/ast-dump-temporaries-json.cpp
    clang/test/AST/ast-dump-using-template.cpp
    clang/test/AST/ast-dump-using.cpp
    clang/test/AST/coroutine-locals-cleanup-exp-namespace.cpp
    clang/test/AST/coroutine-locals-cleanup.cpp
    clang/test/AST/float16.cpp
    clang/test/AST/sourceranges.cpp
    clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
    clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist
    clang/test/Analysis/Inputs/expected-plists/method-call-path-notes.cpp.plist
    clang/test/Analysis/analyzer-display-progress.cpp
    clang/test/Analysis/auto-obj-dtors-cfg-output.cpp
    clang/test/Analysis/blocks.mm
    clang/test/Analysis/bug_hash_test.cpp
    clang/test/Analysis/cast-value-notes.cpp
    clang/test/Analysis/cast-value-state-dump.cpp
    clang/test/Analysis/cfg-rich-constructors.cpp
    clang/test/Analysis/cfg-rich-constructors.mm
    clang/test/Analysis/cfg.cpp
    clang/test/Analysis/copy-elision.cpp
    clang/test/Analysis/cxx-uninitialized-object-inheritance.cpp
    clang/test/Analysis/dump_egraph.cpp
    clang/test/Analysis/exploded-graph-rewriter/dynamic_types.cpp
    clang/test/Analysis/initializers-cfg-output.cpp
    clang/test/Analysis/inlining/Inputs/expected-plists/path-notes.cpp.plist
    clang/test/Analysis/lambdas.cpp
    clang/test/Analysis/lifetime-cfg-output.cpp
    clang/test/Analysis/malloc-sizeof.cpp
    clang/test/Analysis/memory-model.cpp
    clang/test/Analysis/missing-bind-temporary.cpp
    clang/test/Analysis/more-dtors-cfg-output.cpp
    clang/test/Analysis/scopes-cfg-output.cpp
    clang/test/Analysis/temp-obj-dtors-cfg-output.cpp
    clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p4.cpp
    clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p2.cpp
    clang/test/CXX/class.access/p4.cpp
    clang/test/CXX/class/class.compare/class.compare.default/p1.cpp
    clang/test/CXX/class/class.compare/class.eq/p2.cpp
    clang/test/CXX/class/class.compare/class.spaceship/p1.cpp
    clang/test/CXX/class/class.compare/class.spaceship/p2.cpp
    clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
    clang/test/CXX/class/class.mem/p2.cpp
    clang/test/CXX/conv/conv.fctptr/p1.cpp
    clang/test/CXX/conv/conv.mem/p4.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
    clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp
    clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp
    clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
    clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp
    clang/test/CXX/drs/dr0xx.cpp
    clang/test/CXX/drs/dr13xx.cpp
    clang/test/CXX/drs/dr16xx.cpp
    clang/test/CXX/drs/dr17xx.cpp
    clang/test/CXX/drs/dr1xx.cpp
    clang/test/CXX/drs/dr2xx.cpp
    clang/test/CXX/drs/dr3xx.cpp
    clang/test/CXX/drs/dr4xx.cpp
    clang/test/CXX/drs/dr5xx.cpp
    clang/test/CXX/drs/dr9xx.cpp
    clang/test/CXX/except/except.spec/p1.cpp
    clang/test/CXX/expr/expr.const/p2-0x.cpp
    clang/test/CXX/expr/expr.const/p5-0x.cpp
    clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
    clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp
    clang/test/CXX/over/over.match/over.match.funcs/over.match.copy/p1.cpp
    clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
    clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp
    clang/test/CXX/special/class.copy/p23-cxx11.cpp
    clang/test/CXX/special/class.copy/p3-cxx11.cpp
    clang/test/CXX/special/class.inhctor/p4.cpp
    clang/test/CXX/special/class.temporary/p1.cpp
    clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
    clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
    clang/test/CodeGen/builtin-bpf-btf-type-id.c
    clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c
    clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-return-adjustment.cpp
    clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
    clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
    clang/test/CodeGenCXX/predefined-expr.cpp
    clang/test/CodeGenCXX/vtable-layout.cpp
    clang/test/FixIt/fixit.cpp
    clang/test/Index/annotate-context-sensitive.cpp
    clang/test/Index/comment-cplus-decls.cpp
    clang/test/Index/keep-going.cpp
    clang/test/Index/load-stmts.cpp
    clang/test/Index/opencl-types.cl
    clang/test/Index/paren-type.c
    clang/test/Index/print-type-size.cpp
    clang/test/Index/print-type.c
    clang/test/Index/print-type.cpp
    clang/test/Layout/aix-bitfield-alignment.cpp
    clang/test/Layout/aix-power-alignment-typedef.cpp
    clang/test/Layout/dump-canonical.cpp
    clang/test/Layout/ms-x86-basic-layout.cpp
    clang/test/Layout/ms-x86-misalignedarray.cpp
    clang/test/Misc/diag-line-wrapping.cpp
    clang/test/Misc/diag-template-diffing.cpp
    clang/test/Modules/namespaces.cpp
    clang/test/Modules/odr_hash-gnu.cpp
    clang/test/Modules/odr_hash.cpp
    clang/test/OpenMP/declare_mapper_ast_print.cpp
    clang/test/OpenMP/declare_reduction_ast_print.cpp
    clang/test/OpenMP/deferred-diags.cpp
    clang/test/PCH/cxx_exprs.cpp
    clang/test/Parser/cxx1z-decomposition.cpp
    clang/test/SemaCXX/MicrosoftCompatibility.cpp
    clang/test/SemaCXX/abstract.cpp
    clang/test/SemaCXX/access-base-class.cpp
    clang/test/SemaCXX/accessible-base.cpp
    clang/test/SemaCXX/aggregate-initialization.cpp
    clang/test/SemaCXX/ambig-user-defined-conversions.cpp
    clang/test/SemaCXX/atomic-type.cpp
    clang/test/SemaCXX/attr-noreturn.cpp
    clang/test/SemaCXX/builtins.cpp
    clang/test/SemaCXX/calling-conv-compat.cpp
    clang/test/SemaCXX/class-base-member-init.cpp
    clang/test/SemaCXX/class.cpp
    clang/test/SemaCXX/co_await-ast.cpp
    clang/test/SemaCXX/compound-literal.cpp
    clang/test/SemaCXX/constant-expression-cxx11.cpp
    clang/test/SemaCXX/constant-expression-cxx2a.cpp
    clang/test/SemaCXX/constant-expression.cpp
    clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
    clang/test/SemaCXX/constructor-initializer.cpp
    clang/test/SemaCXX/conversion-function.cpp
    clang/test/SemaCXX/copy-initialization.cpp
    clang/test/SemaCXX/cstyle-cast.cpp
    clang/test/SemaCXX/cxx0x-class.cpp
    clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp
    clang/test/SemaCXX/cxx0x-initializer-constructor.cpp
    clang/test/SemaCXX/cxx0x-initializer-references.cpp
    clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
    clang/test/SemaCXX/cxx0x-nontrivial-union.cpp
    clang/test/SemaCXX/cxx11-inheriting-ctors.cpp
    clang/test/SemaCXX/cxx17-compat.cpp
    clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp
    clang/test/SemaCXX/cxx2a-destroying-delete.cpp
    clang/test/SemaCXX/cxx98-compat-flags.cpp
    clang/test/SemaCXX/cxx98-compat-pedantic.cpp
    clang/test/SemaCXX/decl-init-ref.cpp
    clang/test/SemaCXX/default-assignment-operator.cpp
    clang/test/SemaCXX/derived-to-base-ambig.cpp
    clang/test/SemaCXX/destructor.cpp
    clang/test/SemaCXX/dynamic-cast.cpp
    clang/test/SemaCXX/elaborated-type-specifier.cpp
    clang/test/SemaCXX/enum-scoped.cpp
    clang/test/SemaCXX/enum.cpp
    clang/test/SemaCXX/exceptions.cpp
    clang/test/SemaCXX/for-range-examples.cpp
    clang/test/SemaCXX/function-extern-c.cpp
    clang/test/SemaCXX/functional-cast.cpp
    clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
    clang/test/SemaCXX/matrix-type-operators.cpp
    clang/test/SemaCXX/member-expr.cpp
    clang/test/SemaCXX/member-init.cpp
    clang/test/SemaCXX/microsoft-cxx0x.cpp
    clang/test/SemaCXX/microsoft-dtor-lookup.cpp
    clang/test/SemaCXX/new-array-size-conv.cpp
    clang/test/SemaCXX/new-delete.cpp
    clang/test/SemaCXX/out-of-line-def-mismatch.cpp
    clang/test/SemaCXX/overload-0x.cpp
    clang/test/SemaCXX/overload-call.cpp
    clang/test/SemaCXX/overload-member-call.cpp
    clang/test/SemaCXX/overloaded-operator.cpp
    clang/test/SemaCXX/pseudo-destructors.cpp
    clang/test/SemaCXX/recovery-expr-type.cpp
    clang/test/SemaCXX/references.cpp
    clang/test/SemaCXX/static-cast.cpp
    clang/test/SemaCXX/switch.cpp
    clang/test/SemaCXX/type-traits.cpp
    clang/test/SemaCXX/undefined-internal.cpp
    clang/test/SemaCXX/underlying_type.cpp
    clang/test/SemaCXX/vector.cpp
    clang/test/SemaCXX/virtual-override.cpp
    clang/test/SemaCXX/warn-bad-memaccess.cpp
    clang/test/SemaCXX/warn-enum-compare.cpp
    clang/test/SemaCXX/warn-new-overaligned-3.cpp
    clang/test/SemaCXX/warn-new-overaligned.cpp
    clang/test/SemaCXX/warn-reinterpret-base-class.cpp
    clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp
    clang/test/SemaCXX/warn-thread-safety-parsing.cpp
    clang/test/SemaHLSL/prohibit_pointer.hlsl
    clang/test/SemaObjCXX/arc-templates.mm
    clang/test/SemaObjCXX/blocks.mm
    clang/test/SemaSYCL/float128.cpp
    clang/test/SemaSYCL/int128.cpp
    clang/test/SemaTemplate/anonymous-union.cpp
    clang/test/SemaTemplate/attributes.cpp
    clang/test/SemaTemplate/deduction-guide.cpp
    clang/test/SemaTemplate/default-expr-arguments-3.cpp
    clang/test/SemaTemplate/dependent-names.cpp
    clang/test/SemaTemplate/instantiate-self.cpp
    clang/test/SemaTemplate/member-access-ambig.cpp
    clang/test/SemaTemplate/member-access-expr.cpp
    clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp
    clang/test/SemaTemplate/pr52909.cpp
    clang/test/SemaTemplate/pr52970.cpp
    clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp
    clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
    clang/test/SemaTemplate/virtual-member-functions.cpp
    clang/unittests/AST/ASTImporterTest.cpp
    clang/unittests/AST/ASTTraverserTest.cpp
    clang/unittests/AST/TypePrinterTest.cpp
    clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
    clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
    clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
    clang/unittests/Introspection/IntrospectionTest.cpp
    clang/unittests/Sema/CodeCompleteTest.cpp
    clang/unittests/StaticAnalyzer/SValTest.cpp
    clang/unittests/StaticAnalyzer/TestReturnValueUnderConstruction.cpp
    clang/unittests/Tooling/QualTypeNamesTest.cpp
    clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp
    clang/unittests/Tooling/StencilTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp b/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
index 26d31c669bcc1..59acc29e8ee9a 100644
--- a/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
+++ b/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
@@ -567,12 +567,14 @@ void ChangeNamespaceTool::run(
     if (Loc.getTypeLocClass() == TypeLoc::Elaborated) {
       NestedNameSpecifierLoc NestedNameSpecifier =
           Loc.castAs<ElaboratedTypeLoc>().getQualifierLoc();
-      // FIXME: avoid changing injected class names.
-      if (auto *NNS = NestedNameSpecifier.getNestedNameSpecifier()) {
-        const Type *SpecifierType = NNS->getAsType();
-        if (SpecifierType && SpecifierType->isRecordType())
-          return;
-      }
+      // This happens for friend declaration of a base class with injected class
+      // name.
+      if (!NestedNameSpecifier.getNestedNameSpecifier())
+        return;
+      const Type *SpecifierType =
+          NestedNameSpecifier.getNestedNameSpecifier()->getAsType();
+      if (SpecifierType && SpecifierType->isRecordType())
+        return;
     }
     fixTypeLoc(Result, startLocationForType(Loc), endLocationForType(Loc), Loc);
   } else if (const auto *VarRef =

diff  --git a/clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllSymbols.cpp b/clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllSymbols.cpp
index e000eae999bde..70d4d7cfdff34 100644
--- a/clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllSymbols.cpp
+++ b/clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllSymbols.cpp
@@ -215,8 +215,7 @@ void FindAllSymbols::registerMatchers(MatchFinder *MatchFinder) {
   // Uses of most types: just look at what the typeLoc refers to.
   MatchFinder->addMatcher(
       typeLoc(isExpansionInMainFile(),
-              loc(qualType(allOf(unless(elaboratedType()),
-                                 hasDeclaration(Types.bind("use")))))),
+              loc(qualType(hasDeclaration(Types.bind("use"))))),
       this);
   // Uses of typedefs: these are often transparent to hasDeclaration, so we need
   // to handle them explicitly.

diff  --git a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp
index e88b1846ef603..4c537afd3347b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SizeofExpressionCheck.cpp
@@ -87,9 +87,9 @@ void SizeofExpressionCheck::registerMatchers(MatchFinder *Finder) {
   const auto ConstantExpr = ignoringParenImpCasts(
       anyOf(integerLiteral(), unaryOperator(hasUnaryOperand(IntegerExpr)),
             binaryOperator(hasLHS(IntegerExpr), hasRHS(IntegerExpr))));
-  const auto IntegerCallExpr = ignoringParenImpCasts(callExpr(
-      anyOf(hasType(isInteger()), hasType(hasCanonicalType(enumType()))),
-      unless(isInTemplateInstantiation())));
+  const auto IntegerCallExpr = ignoringParenImpCasts(
+      callExpr(anyOf(hasType(isInteger()), hasType(enumType())),
+               unless(isInTemplateInstantiation())));
   const auto SizeOfExpr = sizeOfExpr(hasArgumentOfType(
       hasUnqualifiedDesugaredType(type().bind("sizeof-arg-type"))));
   const auto SizeOfZero =
@@ -147,8 +147,8 @@ void SizeofExpressionCheck::registerMatchers(MatchFinder *Finder) {
   const auto StructAddrOfExpr = unaryOperator(
       hasOperatorName("&"), hasUnaryOperand(ignoringParenImpCasts(
                                 hasType(hasCanonicalType(recordType())))));
-  const auto PointerToStructType = hasUnqualifiedDesugaredType(
-      pointerType(pointee(hasCanonicalType(recordType()))));
+  const auto PointerToStructType =
+      hasUnqualifiedDesugaredType(pointerType(pointee(recordType())));
   const auto PointerToStructExpr = ignoringParenImpCasts(expr(
       hasType(hasCanonicalType(PointerToStructType)), unless(cxxThisExpr())));
 

diff  --git a/clang-tools-extra/clang-tidy/bugprone/SmartPtrArrayMismatchCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SmartPtrArrayMismatchCheck.cpp
index 4b89f8291311a..a706f6ce36b6e 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SmartPtrArrayMismatchCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SmartPtrArrayMismatchCheck.cpp
@@ -67,11 +67,10 @@ void SmartPtrArrayMismatchCheck::registerMatchers(MatchFinder *Finder) {
   auto FindConstructExpr =
       cxxConstructExpr(
           hasDeclaration(FindConstructor), argumentCountIs(1),
-          hasArgument(0,
-                      cxxNewExpr(isArray(),
-                                 hasType(hasCanonicalType(pointerType(
-                                     pointee(equalsBoundNode(PointerTypeN))))))
-                          .bind(NewExprN)))
+          hasArgument(
+              0, cxxNewExpr(isArray(), hasType(pointerType(pointee(
+                                           equalsBoundNode(PointerTypeN)))))
+                     .bind(NewExprN)))
           .bind(ConstructExprN);
   Finder->addMatcher(FindConstructExpr, this);
 }
@@ -102,7 +101,7 @@ void SmartPtrArrayMismatchCheck::check(const MatchFinder::MatchResult &Result) {
     SourceRange TemplateArgumentRange = TSTypeLoc.getArgLoc(0)
                                             .getTypeSourceInfo()
                                             ->getTypeLoc()
-                                            .getSourceRange();
+                                            .getLocalSourceRange();
     D << TemplateArgumentRange;
 
     if (isInSingleDeclStmt(VarOrField)) {

diff  --git a/clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp b/clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp
index f1514c868f857..82804a6709598 100644
--- a/clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp
@@ -130,12 +130,7 @@ void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
     // case of overloaded functions, so detection of redundant casts is trickier
     // in this case. Don't emit "redundant cast" warnings for function
     // pointer/reference types.
-    QualType Src = SourceTypeAsWritten, Dst = DestTypeAsWritten;
-    if (const auto *ElTy = dyn_cast<ElaboratedType>(Src))
-      Src = ElTy->getNamedType();
-    if (const auto *ElTy = dyn_cast<ElaboratedType>(Dst))
-      Dst = ElTy->getNamedType();
-    if (Src == Dst) {
+    if (SourceTypeAsWritten == DestTypeAsWritten) {
       diag(CastExpr->getBeginLoc(), "redundant cast to the same type")
           << FixItHint::CreateRemoval(ReplaceRange);
       return;

diff  --git a/clang-tools-extra/clang-tidy/hicpp/MultiwayPathsCoveredCheck.cpp b/clang-tools-extra/clang-tidy/hicpp/MultiwayPathsCoveredCheck.cpp
index 8b99a1058079d..7feb0c73f4d11 100644
--- a/clang-tools-extra/clang-tidy/hicpp/MultiwayPathsCoveredCheck.cpp
+++ b/clang-tools-extra/clang-tidy/hicpp/MultiwayPathsCoveredCheck.cpp
@@ -36,8 +36,7 @@ void MultiwayPathsCoveredCheck::registerMatchers(MatchFinder *Finder) {
               // otherwise the matcher does not work correctly, because it
               // will not explicitly ignore enum conditions.
               unless(ignoringImpCasts(
-                  declRefExpr(hasType(hasCanonicalType(enumType())))
-                      .bind("enum-condition"))))))
+                  declRefExpr(hasType(enumType())).bind("enum-condition"))))))
           .bind("switch"),
       this);
 

diff  --git a/clang-tools-extra/clang-tidy/misc/MisplacedConstCheck.cpp b/clang-tools-extra/clang-tidy/misc/MisplacedConstCheck.cpp
index 62df0884689f0..7a028df588ffa 100644
--- a/clang-tools-extra/clang-tidy/misc/MisplacedConstCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MisplacedConstCheck.cpp
@@ -21,13 +21,12 @@ void MisplacedConstCheck::registerMatchers(MatchFinder *Finder) {
       pointee(anyOf(isConstQualified(), ignoringParens(functionType()))))));
 
   Finder->addMatcher(
-      valueDecl(hasType(qualType(
-                    isConstQualified(),
-                    elaboratedType(namesType(typedefType(hasDeclaration(
-                        anyOf(typedefDecl(NonConstAndNonFunctionPointerType)
-                                  .bind("typedef"),
-                              typeAliasDecl(NonConstAndNonFunctionPointerType)
-                                  .bind("typeAlias")))))))))
+      valueDecl(
+          hasType(isConstQualified()),
+          hasType(typedefType(hasDeclaration(anyOf(
+              typedefDecl(NonConstAndNonFunctionPointerType).bind("typedef"),
+              typeAliasDecl(NonConstAndNonFunctionPointerType)
+                  .bind("typeAlias"))))))
           .bind("decl"),
       this);
 }

diff  --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
index 679256839e430..accc95d126f83 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -400,7 +400,7 @@ static bool canBeModified(ASTContext *Context, const Expr *E) {
     return true;
   if (const auto *Cast = Parents[0].get<ImplicitCastExpr>()) {
     if ((Cast->getCastKind() == CK_NoOp &&
-         Context->hasSameType(Cast->getType(), E->getType().withConst())) ||
+         Cast->getType() == E->getType().withConst()) ||
         (Cast->getCastKind() == CK_LValueToRValue &&
          !Cast->getType().isNull() && Cast->getType()->isFundamentalType()))
       return false;

diff  --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
index 024a06bf3aa70..cbfe528eaa7bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
@@ -48,8 +48,7 @@ AST_MATCHER(CXXRecordDecl, isMoveConstructible) {
 
 static TypeMatcher notTemplateSpecConstRefType() {
   return lValueReferenceType(
-      pointee(unless(elaboratedType(namesType(templateSpecializationType()))),
-              isConstQualified()));
+      pointee(unless(templateSpecializationType()), isConstQualified()));
 }
 
 static TypeMatcher nonConstValueType() {

diff  --git a/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
index c3e3759af32fd..0f10dd375a80e 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
@@ -153,24 +153,22 @@ static bool isCopyAssignmentAndCanBeDefaulted(ASTContext *Context,
     //   ((Base*)this)->operator=((Base)Other);
     //
     // So we are looking for a member call that fulfills:
-    if (match(traverse(
-                  TK_AsIs,
-                  compoundStmt(has(ignoringParenImpCasts(cxxMemberCallExpr(
-                      // - The object is an implicit cast of 'this' to a
-                      // pointer to
-                      //   a base class.
-                      onImplicitObjectArgument(implicitCastExpr(
-                          hasImplicitDestinationType(hasCanonicalType(pointsTo(
-                              type(equalsNode(Base->getCanonicalTypeInternal()
-                                                  .getTypePtr()))))),
-                          hasSourceExpression(cxxThisExpr()))),
-                      // - The called method is the operator=.
-                      callee(cxxMethodDecl(isCopyAssignmentOperator())),
-                      // - The argument is (an implicit cast to a Base of)
-                      // the argument taken by "Operator".
-                      argumentCountIs(1),
-                      hasArgument(
-                          0, declRefExpr(to(varDecl(equalsNode(Param)))))))))),
+    if (match(traverse(TK_AsIs,
+                       compoundStmt(has(ignoringParenImpCasts(cxxMemberCallExpr(
+                           // - The object is an implicit cast of 'this' to a
+                           // pointer to
+                           //   a base class.
+                           onImplicitObjectArgument(implicitCastExpr(
+                               hasImplicitDestinationType(
+                                   pointsTo(type(equalsNode(Base)))),
+                               hasSourceExpression(cxxThisExpr()))),
+                           // - The called method is the operator=.
+                           callee(cxxMethodDecl(isCopyAssignmentOperator())),
+                           // - The argument is (an implicit cast to a Base of)
+                           // the argument taken by "Operator".
+                           argumentCountIs(1),
+                           hasArgument(0, declRefExpr(to(varDecl(
+                                              equalsNode(Param)))))))))),
               *Compound, *Context)
             .empty())
       return false;

diff  --git a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
index a3908514d615c..8d6322563f794 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
@@ -97,9 +97,7 @@ struct UnqualNameVisitor : public RecursiveASTVisitor<UnqualNameVisitor> {
     if (TL.getQualifierLoc() &&
         !TraverseNestedNameSpecifierLoc(TL.getQualifierLoc()))
       return false;
-    const auto *T = TL.getTypePtr();
-    return TraverseTypeLoc(TL.getNamedTypeLoc(),
-                           T->getKeyword() != ETK_None || T->getQualifier());
+    return TraverseTypeLoc(TL.getNamedTypeLoc(), true);
   }
 
   bool VisitDeclRefExpr(DeclRefExpr *S) {

diff  --git a/clang-tools-extra/clangd/FindTarget.cpp b/clang-tools-extra/clangd/FindTarget.cpp
index 020f83b1a8fb3..4085915890513 100644
--- a/clang-tools-extra/clangd/FindTarget.cpp
+++ b/clang-tools-extra/clangd/FindTarget.cpp
@@ -950,10 +950,7 @@ class ExplicitReferenceCollector
     // ElaboratedTypeLoc will reports information for its inner type loc.
     // Otherwise we loose information about inner types loc's qualifier.
     TypeLoc Inner = L.getNamedTypeLoc().getUnqualifiedLoc();
-    if (L.getBeginLoc() == Inner.getBeginLoc())
-      return RecursiveASTVisitor::TraverseTypeLoc(Inner);
-    else
-      TypeLocsToSkip.insert(Inner.getBeginLoc());
+    TypeLocsToSkip.insert(Inner.getBeginLoc());
     return RecursiveASTVisitor::TraverseElaboratedTypeLoc(L);
   }
 

diff  --git a/clang-tools-extra/clangd/unittests/ASTTests.cpp b/clang-tools-extra/clangd/unittests/ASTTests.cpp
index 4bb3e025b87a5..69285d019117c 100644
--- a/clang-tools-extra/clangd/unittests/ASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ASTTests.cpp
@@ -72,7 +72,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               template<typename T> class Foo {};
               ^auto v = Foo<X>();
           )cpp",
-          "Foo<X>",
+          "Foo<class X>",
       },
       {
           R"cpp( // auto on initializer list.
@@ -93,7 +93,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return Foo();
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // decltype in trailing return type
@@ -102,7 +102,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return Foo();
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // auto in function return type
@@ -111,7 +111,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return Foo();
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // auto& in function return type
@@ -121,7 +121,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return x;
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // auto* in function return type
@@ -131,7 +131,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return x;
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // const auto& in function return type
@@ -141,7 +141,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return x;
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // decltype(auto) in function return (value)
@@ -150,7 +150,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return Foo();
             }
           )cpp",
-          "Foo",
+          "struct Foo",
       },
       {
           R"cpp( // decltype(auto) in function return (ref)
@@ -160,7 +160,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return (x);
             }
           )cpp",
-          "Foo &",
+          "struct Foo &",
       },
       {
           R"cpp( // decltype(auto) in function return (const ref)
@@ -170,7 +170,7 @@ TEST(GetDeducedType, KwAutoKwDecltypeExpansion) {
               return (x);
             }
           )cpp",
-          "const Foo &",
+          "const struct Foo &",
       },
       {
           R"cpp( // auto on alias

diff  --git a/clang-tools-extra/clangd/unittests/DumpASTTests.cpp b/clang-tools-extra/clangd/unittests/DumpASTTests.cpp
index d1b8f21b82c65..e7b368fd25522 100644
--- a/clang-tools-extra/clangd/unittests/DumpASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/DumpASTTests.cpp
@@ -121,8 +121,7 @@ declaration: Var - root
         expression: DeclRef - operator+
       expression: MaterializeTemporary - lvalue
         expression: CXXTemporaryObject - Foo
-          type: Elaborated
-            type: Record - Foo
+          type: Record - Foo
       expression: IntegerLiteral - 42
       )"},
       {R"cpp(

diff  --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
index 6656ed9847233..51eae572ed904 100644
--- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
+++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
@@ -1612,14 +1612,13 @@ TEST_F(FindExplicitReferencesTest, All) {
        {
            R"cpp(
              void foo() {
-              $0^class {} $1^x;
-              int (*$2^fptr)(int $3^a, int) = nullptr;
+              class {} $0^x;
+              int (*$1^fptr)(int $2^a, int) = nullptr;
              }
            )cpp",
-           "0: targets = {}\n"
-           "1: targets = {x}, decl\n"
-           "2: targets = {fptr}, decl\n"
-           "3: targets = {a}, decl\n"},
+           "0: targets = {x}, decl\n"
+           "1: targets = {fptr}, decl\n"
+           "2: targets = {a}, decl\n"},
        // Namespace aliases should be handled properly.
        {
            R"cpp(

diff  --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp
index 53e4f55c2e3a8..949ddbae58b3d 100644
--- a/clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -427,7 +427,7 @@ class Foo final {})cpp";
        [](HoverInfo &HI) {
          HI.Name = "auto";
          HI.Kind = index::SymbolKind::TypeAlias;
-         HI.Definition = "S";
+         HI.Definition = "struct S";
        }},
       // undeduced auto
       {R"cpp(
@@ -550,7 +550,7 @@ class Foo final {})cpp";
          HI.NamespaceScope = "";
          HI.Definition = "Color x = RED";
          HI.Kind = index::SymbolKind::Variable;
-         HI.Type = "Color";
+         HI.Type = "enum Color";
          HI.Value = "RED (0xffffff85)"; // Symbolic on an expression.
        }},
       {R"cpp(
@@ -795,7 +795,7 @@ class Foo final {})cpp";
          HI.Kind = index::SymbolKind::Variable;
          HI.NamespaceScope = "";
          HI.Definition = "X x";
-         HI.Type = "X";
+         HI.Type = "struct X";
        }},
       {// Don't crash on null types.
        R"cpp(auto [^[[x]]] = 1; /*error-ok*/)cpp",
@@ -1944,7 +1944,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "auto";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "auto function return with trailing type";
           }},
       {
@@ -1957,7 +1957,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "decltype";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "trailing return type";
           }},
       {
@@ -1970,7 +1970,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "auto";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "auto in function return";
           }},
       {
@@ -1984,7 +1984,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "auto";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "auto& in function return";
           }},
       {
@@ -1998,7 +1998,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "auto";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "auto* in function return";
           }},
       {
@@ -2012,7 +2012,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "auto";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "const auto& in function return";
           }},
       {
@@ -2025,7 +2025,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "decltype";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation = "decltype(auto) in function return";
           }},
       {
@@ -2115,7 +2115,7 @@ TEST(Hover, All) {
           [](HoverInfo &HI) {
             HI.Name = "decltype";
             HI.Kind = index::SymbolKind::TypeAlias;
-            HI.Definition = "Bar";
+            HI.Definition = "struct Bar";
             HI.Documentation =
                 "decltype of function with trailing return type.";
           }},

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-init.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-init.cpp
index b42d3fcd2b62b..981d0b5af7429 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-init.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-init.cpp
@@ -144,6 +144,7 @@ class X11 : public Copyable5<int, float> {
 class X12 : public CopyableAlias<float> {
   X12(const X12 &other) {}
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: calling a base constructor
+  // CHECK-FIXES: X12(const X12 &other) {}
 };
 
 template <typename T>
@@ -165,7 +166,7 @@ FROMMACRO
 class X15 : public CopyableAlias2 {
   X15(const X15 &other) {}
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: calling a base constructor
-  // CHECK-FIXES: X15(const X15 &other)  : Copyable5(other) {}
+  // CHECK-FIXES: X15(const X15 &other) {}
 };
 
 class X16 : public NonCopyable {

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/shared-ptr-array-mismatch.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/shared-ptr-array-mismatch.cpp
index 70449e6bfc24c..a232b854530c5 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/shared-ptr-array-mismatch.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/shared-ptr-array-mismatch.cpp
@@ -72,8 +72,6 @@ std::shared_ptr<int> f_ret() {
 template <class T>
 void f_tmpl() {
   std::shared_ptr<T> P1{new T[10]};
-  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: shared pointer to non-array is initialized with array [bugprone-shared-ptr-array-mismatch]
-  // CHECK-FIXES: std::shared_ptr<T[]> P1{new T[10]};
 }
 
 void f5() {

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison-32bits.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison-32bits.cpp
index ebf96eebfb10d..1b70f79518dc8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison-32bits.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison-32bits.cpp
@@ -28,6 +28,6 @@ struct S {
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'inner_padding::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 } // namespace inner_padding

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison.cpp
index cef9a1c595d70..f4406b222eeb0 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-memory-comparison.cpp
@@ -16,7 +16,7 @@ class C {
 
 void f(C &c1, C &c2) {
   if (!std::memcmp(&c1, &c2, sizeof(C))) {
-    // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: comparing object representation of non-standard-layout type 'C'; consider using a comparison operator instead
+    // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: comparing object representation of non-standard-layout type 'sei_cert_example_oop57_cpp::C'; consider using a comparison operator instead
   }
 }
 } // namespace sei_cert_example_oop57_cpp
@@ -30,7 +30,7 @@ struct S {
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'inner_padding_64bit_only::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 } // namespace inner_padding_64bit_only
 
@@ -47,17 +47,17 @@ class Derived2 : public Derived {};
 void testDerived() {
   Derived a, b;
   std::memcmp(&a, &b, sizeof(Base));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'Derived' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'padding_in_base::Derived' which does not have a unique object representation; consider comparing the members of the object manually
   std::memcmp(&a, &b, sizeof(Derived));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'Derived' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'padding_in_base::Derived' which does not have a unique object representation; consider comparing the members of the object manually
 }
 
 void testDerived2() {
   Derived2 a, b;
   std::memcmp(&a, &b, sizeof(Base));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'Derived2' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'padding_in_base::Derived2' which does not have a unique object representation; consider comparing the members of the object manually
   std::memcmp(&a, &b, sizeof(Derived2));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'Derived2' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'padding_in_base::Derived2' which does not have a unique object representation; consider comparing the members of the object manually
 }
 
 } // namespace padding_in_base
@@ -97,7 +97,7 @@ class C {
 void test() {
   C a, b;
   std::memcmp(&a, &b, sizeof(C));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of non-standard-layout type 'C'; consider using a comparison operator instead
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of non-standard-layout type 'non_standard_layout::C'; consider using a comparison operator instead
 }
 
 } // namespace non_standard_layout
@@ -131,7 +131,7 @@ struct S {};
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'empty_struct::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 } // namespace empty_struct
 
@@ -144,7 +144,7 @@ struct S {
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'empty_field::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 } // namespace empty_field
 
@@ -173,7 +173,7 @@ struct S {
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'no_unique_address_attribute::multiple_empties_same_type::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 
 } // namespace multiple_empties_same_type
@@ -203,7 +203,7 @@ struct S {
 void test() {
   S a, b;
   std::memcmp(&a, &b, sizeof(S));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'S' which does not have a unique object representation; consider comparing the members of the object manually
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comparing object representation of type 'alignment::S' which does not have a unique object representation; consider comparing the members of the object manually
 }
 } // namespace alignment
 

diff  --git a/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp
index 4b59cafb9f662..a8642746145b8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp
@@ -76,7 +76,7 @@ class Clazz {
   };
 
   const Strukt p6() {}
-  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: return type 'const Strukt' i
+  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: return type 'const Clazz::Strukt' i
   // CHECK-FIXES: Strukt p6() {}
 
   // No warning is emitted here, because this is only the declaration.  The
@@ -90,7 +90,7 @@ class Clazz {
   // CHECK-FIXES: static int p8() {}
 
   static const Strukt p9() {}
-  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: return type 'const Strukt' i
+  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: return type 'const Clazz::Strukt' i
   // CHECK-FIXES: static Strukt p9() {}
 
   int n0() const { return 0; }

diff  --git a/clang-tools-extra/unittests/clang-change-namespace/ChangeNamespaceTests.cpp b/clang-tools-extra/unittests/clang-change-namespace/ChangeNamespaceTests.cpp
index 4a6352cd5975e..a8fbf3b7fe253 100644
--- a/clang-tools-extra/unittests/clang-change-namespace/ChangeNamespaceTests.cpp
+++ b/clang-tools-extra/unittests/clang-change-namespace/ChangeNamespaceTests.cpp
@@ -2229,7 +2229,7 @@ TEST_F(ChangeNamespaceTest, InjectedClassNameInFriendDecl) {
                          "namespace e {\n"
                          "class D : public a::Base<D> {\n"
                          " private:\n"
-                         "  friend class a::Base<D>;\n"
+                         "  friend class Base<D>;\n"
                          "  void priv() {}\n"
                          "  a::Base b;\n"
                          "};\n"

diff  --git a/clang/bindings/python/tests/cindex/test_type.py b/clang/bindings/python/tests/cindex/test_type.py
index efe9b0f50be88..0ef98e9555be2 100644
--- a/clang/bindings/python/tests/cindex/test_type.py
+++ b/clang/bindings/python/tests/cindex/test_type.py
@@ -58,7 +58,7 @@ def test_a_struct(self):
         self.assertIsNotNone(fields[1].translation_unit)
         self.assertEqual(fields[1].spelling, 'b')
         self.assertFalse(fields[1].type.is_const_qualified())
-        self.assertEqual(fields[1].type.kind, TypeKind.ELABORATED)
+        self.assertEqual(fields[1].type.kind, TypeKind.TYPEDEF)
         self.assertEqual(fields[1].type.get_canonical().kind, TypeKind.INT)
         self.assertEqual(fields[1].type.get_declaration().spelling, 'I')
         self.assertEqual(fields[1].type.get_typedef_name(), 'I')

diff  --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index 80de0bab2d9a4..85eba45e4de6e 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -2811,20 +2811,14 @@ class ASTContext : public RefCountedBase<ASTContext> {
   bool typesAreBlockPointerCompatible(QualType, QualType);
 
   bool isObjCIdType(QualType T) const {
-    if (const auto *ET = dyn_cast<ElaboratedType>(T))
-      T = ET->getNamedType();
     return T == getObjCIdType();
   }
 
   bool isObjCClassType(QualType T) const {
-    if (const auto *ET = dyn_cast<ElaboratedType>(T))
-      T = ET->getNamedType();
     return T == getObjCClassType();
   }
 
   bool isObjCSelType(QualType T) const {
-    if (const auto *ET = dyn_cast<ElaboratedType>(T))
-      T = ET->getNamedType();
     return T == getObjCSelType();
   }
 

diff  --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 1a8cf27dab4bd..61c153b1f6758 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -5569,6 +5569,9 @@ class ElaboratedType final
       ElaboratedTypeBits.HasOwnedTagDecl = true;
       *getTrailingObjects<TagDecl *>() = OwnedTagDecl;
     }
+    assert(!(Keyword == ETK_None && NNS == nullptr) &&
+           "ElaboratedType cannot have elaborated type keyword "
+           "and name qualifier both null.");
   }
 
 public:

diff  --git a/clang/include/clang/AST/TypeLoc.h b/clang/include/clang/AST/TypeLoc.h
index c93dcf8d8f2e4..6d7612b06adc4 100644
--- a/clang/include/clang/AST/TypeLoc.h
+++ b/clang/include/clang/AST/TypeLoc.h
@@ -430,7 +430,7 @@ class ConcreteTypeLoc : public Base {
     unsigned size = sizeof(LocalData);
     unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
     size = llvm::alignTo(size, extraAlign);
-    return reinterpret_cast<char *>(Base::Data) + size;
+    return reinterpret_cast<char*>(Base::Data) + size;
   }
 
   void *getNonLocalData() const {
@@ -2263,31 +2263,22 @@ class ElaboratedTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                                  ElaboratedLocInfo> {
 public:
   SourceLocation getElaboratedKeywordLoc() const {
-    return !isEmpty() ? getLocalData()->ElaboratedKWLoc : SourceLocation();
+    return this->getLocalData()->ElaboratedKWLoc;
   }
 
   void setElaboratedKeywordLoc(SourceLocation Loc) {
-    if (isEmpty()) {
-      assert(Loc.isInvalid());
-      return;
-    }
-    getLocalData()->ElaboratedKWLoc = Loc;
+    this->getLocalData()->ElaboratedKWLoc = Loc;
   }
 
   NestedNameSpecifierLoc getQualifierLoc() const {
-    return !isEmpty() ? NestedNameSpecifierLoc(getTypePtr()->getQualifier(),
-                                               getLocalData()->QualifierData)
-                      : NestedNameSpecifierLoc();
+    return NestedNameSpecifierLoc(getTypePtr()->getQualifier(),
+                                  getLocalData()->QualifierData);
   }
 
   void setQualifierLoc(NestedNameSpecifierLoc QualifierLoc) {
-    assert(QualifierLoc.getNestedNameSpecifier() ==
-               getTypePtr()->getQualifier() &&
+    assert(QualifierLoc.getNestedNameSpecifier()
+                                            == getTypePtr()->getQualifier() &&
            "Inconsistent nested-name-specifier pointer");
-    if (isEmpty()) {
-      assert(!QualifierLoc.hasQualifier());
-      return;
-    }
     getLocalData()->QualifierData = QualifierLoc.getOpaqueData();
   }
 
@@ -2304,24 +2295,12 @@ class ElaboratedTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
 
   void initializeLocal(ASTContext &Context, SourceLocation Loc);
 
-  TypeLoc getNamedTypeLoc() const { return getInnerTypeLoc(); }
-
-  QualType getInnerType() const { return getTypePtr()->getNamedType(); }
-
-  bool isEmpty() const {
-    return getTypePtr()->getKeyword() == ElaboratedTypeKeyword::ETK_None &&
-           !getTypePtr()->getQualifier();
-  }
-
-  unsigned getLocalDataAlignment() const {
-    // FIXME: We want to return 1 here in the empty case, but
-    // there are bugs in how alignment is handled in TypeLocs
-    // that prevent this from working.
-    return ConcreteTypeLoc::getLocalDataAlignment();
+  TypeLoc getNamedTypeLoc() const {
+    return getInnerTypeLoc();
   }
 
-  unsigned getLocalDataSize() const {
-    return !isEmpty() ? ConcreteTypeLoc::getLocalDataSize() : 0;
+  QualType getInnerType() const {
+    return getTypePtr()->getNamedType();
   }
 
   void copy(ElaboratedTypeLoc Loc) {

diff  --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp
index 26f751b77f86a..3dfa9a0218a73 100644
--- a/clang/lib/ARCMigrate/ObjCMT.cpp
+++ b/clang/lib/ARCMigrate/ObjCMT.cpp
@@ -505,7 +505,7 @@ static void rewriteToObjCProperty(const ObjCMethodDecl *Getter,
   if (LParenAdded)
     PropertyString += ')';
   QualType RT = Getter->getReturnType();
-  if (!RT->getAs<TypedefType>()) {
+  if (!isa<TypedefType>(RT)) {
     // strip off any ARC lifetime qualifier.
     QualType CanResultTy = Context.getCanonicalType(RT);
     if (CanResultTy.getQualifiers().hasObjCLifetime()) {
@@ -1053,7 +1053,7 @@ static bool TypeIsInnerPointer(QualType T) {
   // Also, typedef-of-pointer-to-incomplete-struct is something that we assume
   // is not an innter pointer type.
   QualType OrigT = T;
-  while (const auto *TD = T->getAs<TypedefType>())
+  while (const TypedefType *TD = dyn_cast<TypedefType>(T.getTypePtr()))
     T = TD->getDecl()->getUnderlyingType();
   if (OrigT == T || !T->isPointerType())
     return true;
@@ -1356,6 +1356,9 @@ static bool IsVoidStarType(QualType Ty) {
   if (!Ty->isPointerType())
     return false;
 
+  while (const TypedefType *TD = dyn_cast<TypedefType>(Ty.getTypePtr()))
+    Ty = TD->getDecl()->getUnderlyingType();
+
   // Is the type void*?
   const PointerType* PT = Ty->castAs<PointerType>();
   if (PT->getPointeeType().getUnqualifiedType()->isVoidType())

diff  --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 4a9c9b97210a0..cfd7bf6045422 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -7816,7 +7816,7 @@ ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD,
 /// 'l' or 'L' , but not always.  For typedefs, we need to use
 /// 'i' or 'I' instead if encoding a struct field, or a pointer!
 void ASTContext::getLegacyIntegralTypeEncoding (QualType &PointeeTy) const {
-  if (PointeeTy->getAs<TypedefType>()) {
+  if (isa<TypedefType>(PointeeTy.getTypePtr())) {
     if (const auto *BT = PointeeTy->getAs<BuiltinType>()) {
       if (BT->getKind() == BuiltinType::ULong && getIntWidth(PointeeTy) == 32)
         PointeeTy = UnsignedIntTy;
@@ -8104,7 +8104,7 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string &S,
     // pointee gets emitted _before_ the '^'.  The read-only qualifier of
     // the pointer itself gets ignored, _unless_ we are looking at a typedef!
     // Also, do not emit the 'r' for anything but the outermost type!
-    if (T->getAs<TypedefType>()) {
+    if (isa<TypedefType>(T.getTypePtr())) {
       if (Options.IsOutermostType() && T.isConstQualified()) {
         isReadOnly = true;
         S += 'r';

diff  --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index bb8bbc53cf4cc..28269ec219e4c 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -1684,24 +1684,9 @@ class TemplateDiff {
                                                 : FromType.getAsString(Policy);
     std::string ToTypeStr = ToType.isNull() ? "(no argument)"
                                             : ToType.getAsString(Policy);
-    // Print without ElaboratedType sugar if it is better.
+    // Switch to canonical typename if it is better.
     // TODO: merge this with other aka printing above.
     if (FromTypeStr == ToTypeStr) {
-      const auto *FromElTy = dyn_cast<ElaboratedType>(FromType),
-                 *ToElTy = dyn_cast<ElaboratedType>(ToType);
-      if (FromElTy || ToElTy) {
-        std::string FromNamedTypeStr =
-            FromElTy ? FromElTy->getNamedType().getAsString(Policy)
-                     : FromTypeStr;
-        std::string ToNamedTypeStr =
-            ToElTy ? ToElTy->getNamedType().getAsString(Policy) : ToTypeStr;
-        if (FromNamedTypeStr != ToNamedTypeStr) {
-          FromTypeStr = FromNamedTypeStr;
-          ToTypeStr = ToNamedTypeStr;
-          goto PrintTypes;
-        }
-      }
-      // Switch to canonical typename if it is better.
       std::string FromCanTypeStr =
           FromType.getCanonicalType().getAsString(Policy);
       std::string ToCanTypeStr = ToType.getCanonicalType().getAsString(Policy);
@@ -1711,7 +1696,6 @@ class TemplateDiff {
       }
     }
 
-  PrintTypes:
     if (PrintTree) OS << '[';
     OS << (FromDefault ? "(default) " : "");
     Bold();

diff  --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index a955b4f3aba00..c307cbe02ecf8 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -2566,7 +2566,7 @@ SourceLocation CXXCtorInitializer::getSourceLocation() const {
     return getMemberLocation();
 
   if (const auto *TSInfo = Initializee.get<TypeSourceInfo *>())
-    return TSInfo->getTypeLoc().getBeginLoc();
+    return TSInfo->getTypeLoc().getLocalSourceRange().getBegin();
 
   return {};
 }

diff  --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index 6328fa4a7dd51..8911056929808 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -314,7 +314,7 @@ QualType CXXDeleteExpr::getDestroyedType() const {
 // CXXPseudoDestructorExpr
 PseudoDestructorTypeStorage::PseudoDestructorTypeStorage(TypeSourceInfo *Info)
     : Type(Info) {
-  Location = Info->getTypeLoc().getBeginLoc();
+  Location = Info->getTypeLoc().getLocalSourceRange().getBegin();
 }
 
 CXXPseudoDestructorExpr::CXXPseudoDestructorExpr(
@@ -341,7 +341,7 @@ QualType CXXPseudoDestructorExpr::getDestroyedType() const {
 SourceLocation CXXPseudoDestructorExpr::getEndLoc() const {
   SourceLocation End = DestroyedType.getLocation();
   if (TypeSourceInfo *TInfo = DestroyedType.getTypeSourceInfo())
-    End = TInfo->getTypeLoc().getSourceRange().getEnd();
+    End = TInfo->getTypeLoc().getLocalSourceRange().getEnd();
   return End;
 }
 

diff  --git a/clang/lib/AST/FormatString.cpp b/clang/lib/AST/FormatString.cpp
index 1a1dddcbacfd9..c0879704de4d6 100644
--- a/clang/lib/AST/FormatString.cpp
+++ b/clang/lib/AST/FormatString.cpp
@@ -981,9 +981,10 @@ Optional<LengthModifier> FormatSpecifier::getCorrectedLengthModifier() const {
 
 bool FormatSpecifier::namedTypeToLengthModifier(QualType QT,
                                                 LengthModifier &LM) {
-  for (/**/; const auto *TT = QT->getAs<TypedefType>();
-       QT = TT->getDecl()->getUnderlyingType()) {
-    const TypedefNameDecl *Typedef = TT->getDecl();
+  assert(isa<TypedefType>(QT) && "Expected a TypedefType");
+  const TypedefNameDecl *Typedef = cast<TypedefType>(QT)->getDecl();
+
+  for (;;) {
     const IdentifierInfo *Identifier = Typedef->getIdentifier();
     if (Identifier->getName() == "size_t") {
       LM.setKind(LengthModifier::AsSizeT);
@@ -1002,6 +1003,12 @@ bool FormatSpecifier::namedTypeToLengthModifier(QualType QT,
       LM.setKind(LengthModifier::AsPtrDiff);
       return true;
     }
+
+    QualType T = Typedef->getUnderlyingType();
+    if (!isa<TypedefType>(T))
+      break;
+
+    Typedef = cast<TypedefType>(T)->getDecl();
   }
   return false;
 }

diff  --git a/clang/lib/AST/PrintfFormatString.cpp b/clang/lib/AST/PrintfFormatString.cpp
index d972c120ebac5..c6c41abc7e9a5 100644
--- a/clang/lib/AST/PrintfFormatString.cpp
+++ b/clang/lib/AST/PrintfFormatString.cpp
@@ -844,7 +844,7 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
   }
 
   // Handle size_t, ptr
diff _t, etc. that have dedicated length modifiers in C99.
-  if (LangOpt.C99 || LangOpt.CPlusPlus11)
+  if (isa<TypedefType>(QT) && (LangOpt.C99 || LangOpt.CPlusPlus11))
     namedTypeToLengthModifier(QT, LM);
 
   // If fixing the length modifier was enough, we might be done.
@@ -874,7 +874,7 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
 
   // Set conversion specifier and disable any flags which do not apply to it.
   // Let typedefs to char fall through to int, as %c is silly for uint8_t.
-  if (!QT->getAs<TypedefType>() && QT->isCharType()) {
+  if (!isa<TypedefType>(QT) && QT->isCharType()) {
     CS.setKind(ConversionSpecifier::cArg);
     LM.setKind(LengthModifier::None);
     Precision.setHowSpecified(OptionalAmount::NotSpecified);
@@ -885,10 +885,12 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
   // Test for Floating type first as LongDouble can pass isUnsignedIntegerType
   else if (QT->isRealFloatingType()) {
     CS.setKind(ConversionSpecifier::fArg);
-  } else if (QT->isSignedIntegerType()) {
+  }
+  else if (QT->isSignedIntegerType()) {
     CS.setKind(ConversionSpecifier::dArg);
     HasAlternativeForm = false;
-  } else if (QT->isUnsignedIntegerType()) {
+  }
+  else if (QT->isUnsignedIntegerType()) {
     CS.setKind(ConversionSpecifier::uArg);
     HasAlternativeForm = false;
     HasPlusPrefix = false;

diff  --git a/clang/lib/AST/QualTypeNames.cpp b/clang/lib/AST/QualTypeNames.cpp
index 8c736a7181605..26aaa96a1dc68 100644
--- a/clang/lib/AST/QualTypeNames.cpp
+++ b/clang/lib/AST/QualTypeNames.cpp
@@ -422,6 +422,13 @@ QualType getFullyQualifiedType(QualType QT, const ASTContext &Ctx,
     return QT;
   }
 
+  // We don't consider the alias introduced by `using a::X` as a new type.
+  // The qualified name is still a::X.
+  if (isa<UsingType>(QT.getTypePtr())) {
+    return getFullyQualifiedType(QT.getSingleStepDesugaredType(Ctx), Ctx,
+                                 WithGlobalNsPrefix);
+  }
+
   // Remove the part of the type related to the type being a template
   // parameter (we won't report it as part of the 'type name' and it
   // is actually make the code below to be more complex (to handle
@@ -448,14 +455,6 @@ QualType getFullyQualifiedType(QualType QT, const ASTContext &Ctx,
     assert(!QT.hasLocalQualifiers());
     Keyword = ETypeInput->getKeyword();
   }
-
-  // We don't consider the alias introduced by `using a::X` as a new type.
-  // The qualified name is still a::X.
-  if (const auto *UT = QT->getAs<UsingType>()) {
-    return getFullyQualifiedType(UT->getUnderlyingType(), Ctx,
-                                 WithGlobalNsPrefix);
-  }
-
   // Create a nested name specifier if needed.
   Prefix = createNestedNameSpecifierForScopeOf(Ctx, QT.getTypePtr(),
                                                true /*FullyQualified*/,

diff  --git a/clang/lib/AST/ScanfFormatString.cpp b/clang/lib/AST/ScanfFormatString.cpp
index 7679f02e04abd..8d763f28e57fd 100644
--- a/clang/lib/AST/ScanfFormatString.cpp
+++ b/clang/lib/AST/ScanfFormatString.cpp
@@ -500,7 +500,7 @@ bool ScanfSpecifier::fixType(QualType QT, QualType RawQT,
   }
 
   // Handle size_t, ptr
diff _t, etc. that have dedicated length modifiers in C99.
-  if (LangOpt.C99 || LangOpt.CPlusPlus11)
+  if (isa<TypedefType>(PT) && (LangOpt.C99 || LangOpt.CPlusPlus11))
     namedTypeToLengthModifier(PT, LM);
 
   // If fixing the length modifier was enough, we are done.

diff  --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index 136af191f3c04..0f168a518707e 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -4320,13 +4320,20 @@ bool Type::isObjCARCImplicitlyUnretainedType() const {
 }
 
 bool Type::isObjCNSObjectType() const {
-  if (const auto *typedefType = getAs<TypedefType>())
-    return typedefType->getDecl()->hasAttr<ObjCNSObjectAttr>();
-  return false;
+  const Type *cur = this;
+  while (true) {
+    if (const auto *typedefType = dyn_cast<TypedefType>(cur))
+      return typedefType->getDecl()->hasAttr<ObjCNSObjectAttr>();
+
+    // Single-step desugar until we run out of sugar.
+    QualType next = cur->getLocallyUnqualifiedSingleStepDesugaredType();
+    if (next.getTypePtr() == cur) return false;
+    cur = next.getTypePtr();
+  }
 }
 
 bool Type::isObjCIndependentClassType() const {
-  if (const auto *typedefType = getAs<TypedefType>())
+  if (const auto *typedefType = dyn_cast<TypedefType>(this))
     return typedefType->getDecl()->hasAttr<ObjCIndependentClassAttr>();
   return false;
 }

diff  --git a/clang/lib/AST/TypeLoc.cpp b/clang/lib/AST/TypeLoc.cpp
index eb22bf5a05469..cf5e2f9792308 100644
--- a/clang/lib/AST/TypeLoc.cpp
+++ b/clang/lib/AST/TypeLoc.cpp
@@ -194,14 +194,8 @@ SourceLocation TypeLoc::getBeginLoc() const {
   while (true) {
     switch (Cur.getTypeLocClass()) {
     case Elaborated:
-      if (Cur.getLocalSourceRange().getBegin().isValid()) {
-        LeftMost = Cur;
-        break;
-      }
-      Cur = Cur.getNextTypeLoc();
-      if (Cur.isNull())
-        break;
-      continue;
+      LeftMost = Cur;
+      break;
     case FunctionProto:
       if (Cur.castAs<FunctionProtoTypeLoc>().getTypePtr()
               ->hasTrailingReturn()) {
@@ -536,8 +530,6 @@ void UnaryTransformTypeLoc::initializeLocal(ASTContext &Context,
 
 void ElaboratedTypeLoc::initializeLocal(ASTContext &Context,
                                         SourceLocation Loc) {
-  if (isEmpty())
-    return;
   setElaboratedKeywordLoc(Loc);
   NestedNameSpecifierLocBuilder Builder;
   Builder.MakeTrivial(Context, getTypePtr()->getQualifier(), Loc);

diff  --git a/clang/lib/Analysis/RetainSummaryManager.cpp b/clang/lib/Analysis/RetainSummaryManager.cpp
index 5e9c73534aeba..9098cf370d4f5 100644
--- a/clang/lib/Analysis/RetainSummaryManager.cpp
+++ b/clang/lib/Analysis/RetainSummaryManager.cpp
@@ -892,7 +892,7 @@ RetainSummaryManager::getRetEffectFromAnnotations(QualType RetTy,
 /// has a typedef with a given name @c Name.
 static bool hasTypedefNamed(QualType QT,
                             StringRef Name) {
-  while (auto *T = QT->getAs<TypedefType>()) {
+  while (auto *T = dyn_cast<TypedefType>(QT)) {
     const auto &Context = T->getDecl()->getASTContext();
     if (T->getDecl()->getIdentifier() == &Context.Idents.get(Name))
       return true;

diff  --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index fa64a50d20cc3..104a30dd6b256 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -2860,7 +2860,7 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
           // Set `align` attribute if any.
           const auto *AVAttr = PVD->getAttr<AlignValueAttr>();
           if (!AVAttr)
-            if (const auto *TOTy = OTy->getAs<TypedefType>())
+            if (const auto *TOTy = dyn_cast<TypedefType>(OTy))
               AVAttr = TOTy->getDecl()->getAttr<AlignValueAttr>();
           if (AVAttr && !SanOpts.has(SanitizerKind::Alignment)) {
             // If alignment-assumption sanitizer is enabled, we do *not* add

diff  --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index 4f5e439bca8ec..b150aaa376eb0 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -255,7 +255,7 @@ class ScalarExprEmitter
 
       if (VD->getType()->isReferenceType()) {
         if (const auto *TTy =
-                VD->getType().getNonReferenceType()->getAs<TypedefType>())
+            dyn_cast<TypedefType>(VD->getType().getNonReferenceType()))
           AVAttr = TTy->getDecl()->getAttr<AlignValueAttr>();
       } else {
         // Assumptions for function parameters are emitted at the start of the
@@ -271,7 +271,8 @@ class ScalarExprEmitter
     }
 
     if (!AVAttr)
-      if (const auto *TTy = E->getType()->getAs<TypedefType>())
+      if (const auto *TTy =
+          dyn_cast<TypedefType>(E->getType()))
         AVAttr = TTy->getDecl()->getAttr<AlignValueAttr>();
 
     if (!AVAttr)

diff  --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp
index d2f251521ff5a..5012bd822bd36 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -2214,6 +2214,7 @@ void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
     case Type::ConstantMatrix:
     case Type::Record:
     case Type::Enum:
+    case Type::Elaborated:
     case Type::Using:
     case Type::TemplateSpecialization:
     case Type::ObjCTypeParam:
@@ -2223,10 +2224,6 @@ void CodeGenFunction::EmitVariablyModifiedType(QualType type) {
     case Type::BitInt:
       llvm_unreachable("type class is never variably-modified!");
 
-    case Type::Elaborated:
-      type = cast<ElaboratedType>(ty)->getNamedType();
-      break;
-
     case Type::Adjusted:
       type = cast<AdjustedType>(ty)->getAdjustedType();
       break;

diff  --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 725536dacac98..1e90b09145385 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1751,7 +1751,7 @@ void CodeGenModule::GenKernelArgMetadata(llvm::Function *Fn,
       // Get image and pipe access qualifier:
       if (ty->isImageType() || ty->isPipeType()) {
         const Decl *PDecl = parm;
-        if (const auto *TD = ty->getAs<TypedefType>())
+        if (auto *TD = dyn_cast<TypedefType>(ty))
           PDecl = TD->getDecl();
         const OpenCLAccessAttr *A = PDecl->getAttr<OpenCLAccessAttr>();
         if (A && A->isWriteOnly())

diff  --git a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp
index 1a444fca2d175..2967bb3faa329 100644
--- a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp
+++ b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp
@@ -853,7 +853,7 @@ RewriteModernObjC::getIvarAccessString(ObjCIvarDecl *D) {
   if (D->isBitField())
     IvarT = GetGroupRecordTypeForObjCIvarBitfield(D);
 
-  if (!IvarT->getAs<TypedefType>() && IvarT->isRecordType()) {
+  if (!isa<TypedefType>(IvarT) && IvarT->isRecordType()) {
     RecordDecl *RD = IvarT->castAs<RecordType>()->getDecl();
     RD = RD->getDefinition();
     if (RD && !RD->getDeclName().getAsIdentifierInfo()) {
@@ -3629,7 +3629,7 @@ bool RewriteModernObjC::IsTagDefinedInsideClass(ObjCContainerDecl *IDecl,
 /// It handles elaborated types, as well as enum types in the process.
 bool RewriteModernObjC::RewriteObjCFieldDeclType(QualType &Type,
                                                  std::string &Result) {
-  if (Type->getAs<TypedefType>()) {
+  if (isa<TypedefType>(Type)) {
     Result += "\t";
     return false;
   }
@@ -3724,7 +3724,7 @@ void RewriteModernObjC::RewriteObjCFieldDecl(FieldDecl *fieldDecl,
 void RewriteModernObjC::RewriteLocallyDefinedNamedAggregates(FieldDecl *fieldDecl,
                                              std::string &Result) {
   QualType Type = fieldDecl->getType();
-  if (Type->getAs<TypedefType>())
+  if (isa<TypedefType>(Type))
     return;
   if (Type->isArrayType())
     Type = Context->getBaseElementType(Type);
@@ -7496,7 +7496,7 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) {
       if (D->isBitField())
         IvarT = GetGroupRecordTypeForObjCIvarBitfield(D);
 
-      if (!IvarT->getAs<TypedefType>() && IvarT->isRecordType()) {
+      if (!isa<TypedefType>(IvarT) && IvarT->isRecordType()) {
         RecordDecl *RD = IvarT->castAs<RecordType>()->getDecl();
         RD = RD->getDefinition();
         if (RD && !RD->getDeclName().getAsIdentifierInfo()) {

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 329ec62ff7359..5112b781ed665 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -10236,7 +10236,7 @@ CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,
         // We extract the name from the typedef because we don't want to show
         // the underlying type in the diagnostic.
         StringRef Name;
-        if (const auto *TypedefTy = ExprTy->getAs<TypedefType>())
+        if (const TypedefType *TypedefTy = dyn_cast<TypedefType>(ExprTy))
           Name = TypedefTy->getDecl()->getName();
         else
           Name = CastTyName;
@@ -15843,7 +15843,7 @@ static bool IsTailPaddedMemberArray(Sema &S, const llvm::APInt &Size,
   while (TInfo) {
     TypeLoc TL = TInfo->getTypeLoc();
     // Look through typedefs.
-    if (TypedefTypeLoc TTL = TL.getAsAdjusted<TypedefTypeLoc>()) {
+    if (TypedefTypeLoc TTL = TL.getAs<TypedefTypeLoc>()) {
       const TypedefNameDecl *TDL = TTL.getTypedefNameDecl();
       TInfo = TDL->getTypeSourceInfo();
       continue;

diff  --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 803164c9c7ace..86bad736227d7 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -2782,7 +2782,7 @@ static void findTypeLocationForBlockDecl(const TypeSourceInfo *TSInfo,
   while (true) {
     // Look through typedefs.
     if (!SuppressBlock) {
-      if (TypedefTypeLoc TypedefTL = TL.getAsAdjusted<TypedefTypeLoc>()) {
+      if (TypedefTypeLoc TypedefTL = TL.getAs<TypedefTypeLoc>()) {
         if (TypeSourceInfo *InnerTSInfo =
                 TypedefTL.getTypedefNameDecl()->getTypeSourceInfo()) {
           TL = InnerTSInfo->getTypeLoc().getUnqualifiedLoc();

diff  --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 459a4f391ae1f..5a546503ccedc 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -275,45 +275,6 @@ static ParsedType recoverFromTypeInKnownDependentBase(Sema &S,
   return S.CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
 }
 
-/// Build a ParsedType for a simple-type-specifier with a nested-name-specifier.
-static ParsedType buildNamedType(Sema &S, const CXXScopeSpec *SS, QualType T,
-                                 SourceLocation NameLoc,
-                                 bool WantNontrivialTypeSourceInfo = true) {
-  switch (T->getTypeClass()) {
-  case Type::DeducedTemplateSpecialization:
-  case Type::Enum:
-  case Type::InjectedClassName:
-  case Type::Record:
-  case Type::Typedef:
-  case Type::UnresolvedUsing:
-  case Type::Using:
-    break;
-  // These can never be qualified so an ElaboratedType node
-  // would carry no additional meaning.
-  case Type::ObjCInterface:
-  case Type::ObjCTypeParam:
-  case Type::TemplateTypeParm:
-    return ParsedType::make(T);
-  default:
-    llvm_unreachable("Unexpected Type Class");
-  }
-
-  if (!SS || SS->isEmpty())
-    return ParsedType::make(
-        S.Context.getElaboratedType(ETK_None, nullptr, T, nullptr));
-
-  QualType ElTy = S.getElaboratedType(ETK_None, *SS, T);
-  if (!WantNontrivialTypeSourceInfo)
-    return ParsedType::make(ElTy);
-
-  TypeLocBuilder Builder;
-  Builder.pushTypeSpec(T).setNameLoc(NameLoc);
-  ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(ElTy);
-  ElabTL.setElaboratedKeywordLoc(SourceLocation());
-  ElabTL.setQualifierLoc(SS->getWithLocInContext(S.Context));
-  return S.CreateParsedType(ElTy, Builder.getTypeSourceInfo(S.Context, ElTy));
-}
-
 /// If the identifier refers to a type name within this scope,
 /// return the declaration of that type.
 ///
@@ -539,7 +500,8 @@ ParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
   } else if (auto *UD = dyn_cast<UnresolvedUsingIfExistsDecl>(IIDecl)) {
     (void)DiagnoseUseOfDecl(UD, NameLoc);
     // Recover with 'int'
-    return ParsedType::make(Context.IntTy);
+    T = Context.IntTy;
+    FoundUsingShadow = nullptr;
   } else if (AllowDeducedTemplate) {
     if (auto *TD = getAsTypeTemplateDecl(IIDecl)) {
       assert(!FoundUsingShadow || FoundUsingShadow->getTargetDecl() == TD);
@@ -561,7 +523,27 @@ ParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
   if (FoundUsingShadow)
     T = Context.getUsingType(FoundUsingShadow, T);
 
-  return buildNamedType(*this, SS, T, NameLoc, WantNontrivialTypeSourceInfo);
+  // NOTE: avoid constructing an ElaboratedType(Loc) if this is a
+  // constructor or destructor name (in such a case, the scope specifier
+  // will be attached to the enclosing Expr or Decl node).
+  if (SS && SS->isNotEmpty() && !IsCtorOrDtorName &&
+      !isa<ObjCInterfaceDecl, UnresolvedUsingIfExistsDecl>(IIDecl)) {
+    if (WantNontrivialTypeSourceInfo) {
+      // Construct a type with type-source information.
+      TypeLocBuilder Builder;
+      Builder.pushTypeSpec(T).setNameLoc(NameLoc);
+
+      T = getElaboratedType(ETK_None, *SS, T);
+      ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
+      ElabTL.setElaboratedKeywordLoc(SourceLocation());
+      ElabTL.setQualifierLoc(SS->getWithLocInContext(Context));
+      return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
+    } else {
+      T = getElaboratedType(ETK_None, *SS, T);
+    }
+  }
+
+  return ParsedType::make(T);
 }
 
 // Builds a fake NNS for the given decl context.
@@ -1165,7 +1147,17 @@ Sema::NameClassification Sema::ClassifyName(Scope *S, CXXScopeSpec &SS,
     QualType T = Context.getTypeDeclType(Type);
     if (const auto *USD = dyn_cast<UsingShadowDecl>(Found))
       T = Context.getUsingType(USD, T);
-    return buildNamedType(*this, &SS, T, NameLoc);
+
+    if (SS.isEmpty()) // No elaborated type, trivial location info
+      return ParsedType::make(T);
+
+    TypeLocBuilder Builder;
+    Builder.pushTypeSpec(T).setNameLoc(NameLoc);
+    T = getElaboratedType(ETK_None, SS, T);
+    ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
+    ElabTL.setElaboratedKeywordLoc(SourceLocation());
+    ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
+    return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
   };
 
   NamedDecl *FirstDecl = (*Result.begin())->getUnderlyingDecl();

diff  --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 5df34fd2028a3..221cbd14da97a 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -4362,13 +4362,17 @@ Sema::BuildMemInitializer(Decl *ConstructorD,
     }
 
     if (BaseType.isNull()) {
-      BaseType = getElaboratedType(ETK_None, SS, Context.getTypeDeclType(TyD));
+      BaseType = Context.getTypeDeclType(TyD);
       MarkAnyDeclReferenced(TyD->getLocation(), TyD, /*OdrUse=*/false);
-      TInfo = Context.CreateTypeSourceInfo(BaseType);
-      ElaboratedTypeLoc TL = TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>();
-      TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc);
-      TL.setElaboratedKeywordLoc(SourceLocation());
-      TL.setQualifierLoc(SS.getWithLocInContext(Context));
+      if (SS.isSet()) {
+        BaseType = Context.getElaboratedType(ETK_None, SS.getScopeRep(),
+                                             BaseType);
+        TInfo = Context.CreateTypeSourceInfo(BaseType);
+        ElaboratedTypeLoc TL = TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>();
+        TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc);
+        TL.setElaboratedKeywordLoc(SourceLocation());
+        TL.setQualifierLoc(SS.getWithLocInContext(Context));
+      }
     }
   }
 
@@ -4464,10 +4468,10 @@ Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
 MemInitResult
 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
                                  CXXRecordDecl *ClassDecl) {
-  SourceLocation NameLoc = TInfo->getTypeLoc().getSourceRange().getBegin();
+  SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
   if (!LangOpts.CPlusPlus11)
     return Diag(NameLoc, diag::err_delegating_ctor)
-           << TInfo->getTypeLoc().getSourceRange();
+      << TInfo->getTypeLoc().getLocalSourceRange();
   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
 
   bool InitList = true;
@@ -4528,11 +4532,12 @@ MemInitResult
 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
                            Expr *Init, CXXRecordDecl *ClassDecl,
                            SourceLocation EllipsisLoc) {
-  SourceLocation BaseLoc = BaseTInfo->getTypeLoc().getBeginLoc();
+  SourceLocation BaseLoc
+    = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
 
   if (!BaseType->isDependentType() && !BaseType->isRecordType())
     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
-           << BaseType << BaseTInfo->getTypeLoc().getSourceRange();
+             << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
 
   // C++ [class.base.init]p2:
   //   [...] Unless the mem-initializer-id names a nonstatic data
@@ -4590,8 +4595,8 @@ Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
         Dependent = true;
       else
         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
-               << BaseType << Context.getTypeDeclType(ClassDecl)
-               << BaseTInfo->getTypeLoc().getSourceRange();
+          << BaseType << Context.getTypeDeclType(ClassDecl)
+          << BaseTInfo->getTypeLoc().getLocalSourceRange();
     }
   }
 
@@ -11039,7 +11044,7 @@ void Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
     bool AcceptableReturnType = false;
     bool MightInstantiateToSpecialization = false;
     if (auto RetTST =
-            TSI->getTypeLoc().getAsAdjusted<TemplateSpecializationTypeLoc>()) {
+            TSI->getTypeLoc().getAs<TemplateSpecializationTypeLoc>()) {
       TemplateName SpecifiedName = RetTST.getTypePtr()->getTemplateName();
       bool TemplateMatches =
           Context.hasSameTemplateName(SpecifiedName, GuidedTemplate);
@@ -16645,7 +16650,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
 
   QualType T = TSInfo->getType();
-  SourceRange TypeRange = TSInfo->getTypeLoc().getSourceRange();
+  SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
 
   // C++03 [class.friend]p2:
   //   An elaborated-type-specifier shall be used in a friend declaration

diff  --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index ca1707893b7ea..c04186dea43eb 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -4504,6 +4504,7 @@ static void captureVariablyModifiedType(ASTContext &Context, QualType T,
     case Type::ConstantMatrix:
     case Type::Record:
     case Type::Enum:
+    case Type::Elaborated:
     case Type::TemplateSpecialization:
     case Type::ObjCObject:
     case Type::ObjCInterface:
@@ -4512,9 +4513,6 @@ static void captureVariablyModifiedType(ASTContext &Context, QualType T,
     case Type::Pipe:
     case Type::BitInt:
       llvm_unreachable("type class is never variably-modified!");
-    case Type::Elaborated:
-      T = cast<ElaboratedType>(Ty)->getNamedType();
-      break;
     case Type::Adjusted:
       T = cast<AdjustedType>(Ty)->getOriginalType();
       break;

diff  --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index ee3f9c6767fa9..5331193de863d 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -241,7 +241,7 @@ ParsedType Sema::getDestructorName(SourceLocation TildeLoc,
       if (IsAcceptableResult(Type)) {
         QualType T = Context.getTypeDeclType(Type);
         MarkAnyDeclReferenced(Type->getLocation(), Type, /*OdrUse=*/false);
-        return CreateParsedType(Context.getElaboratedType(ETK_None, nullptr, T),
+        return CreateParsedType(T,
                                 Context.getTrivialTypeSourceInfo(T, NameLoc));
       }
     }
@@ -7713,8 +7713,8 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
   //   designated by the pseudo-destructor-name shall be the same type.
   if (DestructedTypeInfo) {
     QualType DestructedType = DestructedTypeInfo->getType();
-    SourceLocation DestructedTypeStart =
-        DestructedTypeInfo->getTypeLoc().getBeginLoc();
+    SourceLocation DestructedTypeStart
+      = DestructedTypeInfo->getTypeLoc().getLocalSourceRange().getBegin();
     if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {
       if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {
         // Detect dot pseudo destructor calls on pointer objects, e.g.:
@@ -7739,7 +7739,7 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
         } else {
           Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch)
               << ObjectType << DestructedType << Base->getSourceRange()
-              << DestructedTypeInfo->getTypeLoc().getSourceRange();
+              << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
 
           // Recover by setting the destructed type to the object type.
           DestructedType = ObjectType;
@@ -7755,8 +7755,8 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
           // type.
         } else {
           Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals)
-              << ObjectType << DestructedType << Base->getSourceRange()
-              << DestructedTypeInfo->getTypeLoc().getSourceRange();
+            << ObjectType << DestructedType << Base->getSourceRange()
+            << DestructedTypeInfo->getTypeLoc().getLocalSourceRange();
         }
 
         // Recover by setting the destructed type to the object type.
@@ -7780,10 +7780,10 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
     if (!ScopeType->isDependentType() && !ObjectType->isDependentType() &&
         !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {
 
-      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(),
+      Diag(ScopeTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(),
            diag::err_pseudo_dtor_type_mismatch)
-          << ObjectType << ScopeType << Base->getSourceRange()
-          << ScopeTypeInfo->getTypeLoc().getSourceRange();
+        << ObjectType << ScopeType << Base->getSourceRange()
+        << ScopeTypeInfo->getTypeLoc().getLocalSourceRange();
 
       ScopeType = QualType();
       ScopeTypeInfo = nullptr;

diff  --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 21326b3a1ba19..a6c92d1a338de 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -3860,7 +3860,7 @@ static inline T *getObjCBridgeAttr(const TypedefType *TD) {
 
 static ObjCBridgeRelatedAttr *ObjCBridgeRelatedAttrFromType(QualType T,
                                                             TypedefNameDecl *&TDNDecl) {
-  while (const auto *TD = T->getAs<TypedefType>()) {
+  while (const TypedefType *TD = dyn_cast<TypedefType>(T.getTypePtr())) {
     TDNDecl = TD->getDecl();
     if (ObjCBridgeRelatedAttr *ObjCBAttr =
         getObjCBridgeAttr<ObjCBridgeRelatedAttr>(TD))
@@ -4007,7 +4007,7 @@ static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr,
                                   bool &HadTheAttribute, bool warn) {
   QualType T = castExpr->getType();
   HadTheAttribute = false;
-  while (const auto *TD = T->getAs<TypedefType>()) {
+  while (const TypedefType *TD = dyn_cast<TypedefType>(T.getTypePtr())) {
     TypedefNameDecl *TDNDecl = TD->getDecl();
     if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {
       if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {
@@ -4070,7 +4070,7 @@ static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr,
                                   bool &HadTheAttribute, bool warn) {
   QualType T = castType;
   HadTheAttribute = false;
-  while (const auto *TD = T->getAs<TypedefType>()) {
+  while (const TypedefType *TD = dyn_cast<TypedefType>(T.getTypePtr())) {
     TypedefNameDecl *TDNDecl = TD->getDecl();
     if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {
       if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {

diff  --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 2b8f371ac8b96..67cf8f0371c5c 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -4033,14 +4033,14 @@ TypeResult Sema::ActOnTemplateIdType(
     return CreateParsedType(T, TLB.getTypeSourceInfo(Context, T));
   }
 
-  QualType SpecTy = CheckTemplateIdType(Template, TemplateIILoc, TemplateArgs);
-  if (SpecTy.isNull())
+  QualType Result = CheckTemplateIdType(Template, TemplateIILoc, TemplateArgs);
+  if (Result.isNull())
     return true;
 
   // Build type-source information.
   TypeLocBuilder TLB;
-  TemplateSpecializationTypeLoc SpecTL =
-      TLB.push<TemplateSpecializationTypeLoc>(SpecTy);
+  TemplateSpecializationTypeLoc SpecTL
+    = TLB.push<TemplateSpecializationTypeLoc>(Result);
   SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   SpecTL.setTemplateNameLoc(TemplateIILoc);
   SpecTL.setLAngleLoc(LAngleLoc);
@@ -4048,14 +4048,18 @@ TypeResult Sema::ActOnTemplateIdType(
   for (unsigned i = 0, e = SpecTL.getNumArgs(); i != e; ++i)
     SpecTL.setArgLocInfo(i, TemplateArgs[i].getLocInfo());
 
-  // Create an elaborated-type-specifier containing the nested-name-specifier.
-  QualType ElTy = getElaboratedType(
-      ETK_None, !IsCtorOrDtorName ? SS : CXXScopeSpec(), SpecTy);
-  ElaboratedTypeLoc ElabTL = TLB.push<ElaboratedTypeLoc>(ElTy);
-  ElabTL.setElaboratedKeywordLoc(SourceLocation());
-  if (!ElabTL.isEmpty())
+  // NOTE: avoid constructing an ElaboratedTypeLoc if this is a
+  // constructor or destructor name (in such a case, the scope specifier
+  // will be attached to the enclosing Decl or Expr node).
+  if (SS.isNotEmpty() && !IsCtorOrDtorName) {
+    // Create an elaborated-type-specifier containing the nested-name-specifier.
+    Result = Context.getElaboratedType(ETK_None, SS.getScopeRep(), Result);
+    ElaboratedTypeLoc ElabTL = TLB.push<ElaboratedTypeLoc>(Result);
+    ElabTL.setElaboratedKeywordLoc(SourceLocation());
     ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
-  return CreateParsedType(ElTy, TLB.getTypeSourceInfo(Context, ElTy));
+  }
+
+  return CreateParsedType(Result, TLB.getTypeSourceInfo(Context, Result));
 }
 
 TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK,

diff  --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 12d6773676ad9..3edce941c3817 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -5538,7 +5538,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
           // in ClsType; hence we wrap ClsType into an ElaboratedType.
           // NOTE: in particular, no wrap occurs if ClsType already is an
           // Elaborated, DependentName, or DependentTemplateSpecialization.
-          if (isa<TemplateSpecializationType>(NNS->getAsType()))
+          if (NNSPrefix && isa<TemplateSpecializationType>(NNS->getAsType()))
             ClsType = Context.getElaboratedType(ETK_None, NNSPrefix, ClsType);
           break;
         }
@@ -6090,19 +6090,19 @@ namespace {
       }
     }
     void VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
+      ElaboratedTypeKeyword Keyword
+        = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType());
       if (DS.getTypeSpecType() == TST_typename) {
         TypeSourceInfo *TInfo = nullptr;
         Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
-        if (TInfo)
-          if (auto ETL = TInfo->getTypeLoc().getAs<ElaboratedTypeLoc>()) {
-            TL.copy(ETL);
-            return;
-          }
+        if (TInfo) {
+          TL.copy(TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>());
+          return;
+        }
       }
-      const ElaboratedType *T = TL.getTypePtr();
-      TL.setElaboratedKeywordLoc(T->getKeyword() != ETK_None
-                                     ? DS.getTypeSpecTypeLoc()
-                                     : SourceLocation());
+      TL.setElaboratedKeywordLoc(Keyword != ETK_None
+                                 ? DS.getTypeSpecTypeLoc()
+                                 : SourceLocation());
       const CXXScopeSpec& SS = DS.getTypeSpecScope();
       TL.setQualifierLoc(SS.getWithLocInContext(Context));
       Visit(TL.getNextTypeLoc().getUnqualifiedLoc());
@@ -9099,8 +9099,15 @@ QualType Sema::getElaboratedType(ElaboratedTypeKeyword Keyword,
                                  TagDecl *OwnedTagDecl) {
   if (T.isNull())
     return T;
-  return Context.getElaboratedType(
-      Keyword, SS.isValid() ? SS.getScopeRep() : nullptr, T, OwnedTagDecl);
+  NestedNameSpecifier *NNS;
+  if (SS.isValid())
+    NNS = SS.getScopeRep();
+  else {
+    if (Keyword == ETK_None)
+      return T;
+    NNS = nullptr;
+  }
+  return Context.getElaboratedType(Keyword, NNS, T, OwnedTagDecl);
 }
 
 QualType Sema::BuildTypeofExprType(Expr *E) {

diff  --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index c52e12d3eb9ba..a8589191fc919 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -1069,11 +1069,15 @@ class TreeTransform {
     // Otherwise, make an elaborated type wrapping a non-dependent
     // specialization.
     QualType T =
-        getDerived().RebuildTemplateSpecializationType(InstName, NameLoc, Args);
-    if (T.isNull())
-      return QualType();
-    return SemaRef.Context.getElaboratedType(
-        Keyword, QualifierLoc.getNestedNameSpecifier(), T);
+    getDerived().RebuildTemplateSpecializationType(InstName, NameLoc, Args);
+    if (T.isNull()) return QualType();
+
+    if (Keyword == ETK_None && QualifierLoc.getNestedNameSpecifier() == nullptr)
+      return T;
+
+    return SemaRef.Context.getElaboratedType(Keyword,
+                                       QualifierLoc.getNestedNameSpecifier(),
+                                             T);
   }
 
   /// Build a new typename type that refers to an identifier.
@@ -4192,7 +4196,7 @@ NestedNameSpecifierLoc TreeTransform<Derived>::TransformNestedNameSpecifierLoc(
       }
       // If the nested-name-specifier is an invalid type def, don't emit an
       // error because a previous error should have already been emitted.
-      TypedefTypeLoc TTL = TL.getAsAdjusted<TypedefTypeLoc>();
+      TypedefTypeLoc TTL = TL.getAs<TypedefTypeLoc>();
       if (!TTL || !TTL.getTypedefNameDecl()->isInvalidDecl()) {
         SemaRef.Diag(TL.getBeginLoc(), diag::err_nested_name_spec_non_tag)
             << TL.getType() << SS.getRange();

diff  --git a/clang/lib/Sema/TypeLocBuilder.cpp b/clang/lib/Sema/TypeLocBuilder.cpp
index d2360224ac608..2dcbbd83c6912 100644
--- a/clang/lib/Sema/TypeLocBuilder.cpp
+++ b/clang/lib/Sema/TypeLocBuilder.cpp
@@ -85,7 +85,7 @@ TypeLoc TypeLocBuilder::pushImpl(QualType T, size_t LocalSize, unsigned LocalAli
   // FIXME: 4 and 8 are sufficient at the moment, but it's pretty ugly to
   // hardcode them.
   if (LocalAlignment == 4) {
-    if (!AtAlign8) {
+    if (NumBytesAtAlign8 == 0) {
       NumBytesAtAlign4 += LocalSize;
     } else {
       unsigned Padding = NumBytesAtAlign4 % 8;
@@ -114,7 +114,7 @@ TypeLoc TypeLocBuilder::pushImpl(QualType T, size_t LocalSize, unsigned LocalAli
       NumBytesAtAlign4 += LocalSize;
     }
   } else if (LocalAlignment == 8) {
-    if (!AtAlign8) {
+    if (NumBytesAtAlign8 == 0) {
       // We have not seen any 8-byte aligned element yet. We insert a padding
       // only if the new Index is not 8-byte-aligned.
       if ((Index - LocalSize) % 8 != 0) {
@@ -149,15 +149,14 @@ TypeLoc TypeLocBuilder::pushImpl(QualType T, size_t LocalSize, unsigned LocalAli
 
     // Forget about any padding.
     NumBytesAtAlign4 = 0;
-    AtAlign8 = true;
+    NumBytesAtAlign8 += LocalSize;
   } else {
     assert(LocalSize == 0);
   }
 
   Index -= LocalSize;
 
-  unsigned FDSz = TypeLoc::getFullDataSizeForType(T);
-  assert(Capacity - Index == FDSz &&
+  assert(Capacity - Index == TypeLoc::getFullDataSizeForType(T) &&
          "incorrect data size provided to CreateTypeSourceInfo!");
 
   return getTemporaryTypeLoc(T);

diff  --git a/clang/lib/Sema/TypeLocBuilder.h b/clang/lib/Sema/TypeLocBuilder.h
index 9e7422ec9906c..738f731c9fe25 100644
--- a/clang/lib/Sema/TypeLocBuilder.h
+++ b/clang/lib/Sema/TypeLocBuilder.h
@@ -40,13 +40,12 @@ class TypeLocBuilder {
   /// The inline buffer.
   enum { BufferMaxAlignment = alignof(void *) };
   alignas(BufferMaxAlignment) char InlineBuffer[InlineCapacity];
-  unsigned NumBytesAtAlign4;
-  bool AtAlign8;
+  unsigned NumBytesAtAlign4, NumBytesAtAlign8;
 
 public:
   TypeLocBuilder()
       : Buffer(InlineBuffer), Capacity(InlineCapacity), Index(InlineCapacity),
-        NumBytesAtAlign4(0), AtAlign8(false) {}
+        NumBytesAtAlign4(0), NumBytesAtAlign8(0) {}
 
   ~TypeLocBuilder() {
     if (Buffer != InlineBuffer)
@@ -78,8 +77,7 @@ class TypeLocBuilder {
     LastTy = QualType();
 #endif
     Index = Capacity;
-    NumBytesAtAlign4 = 0;
-    AtAlign8 = false;
+    NumBytesAtAlign4 = NumBytesAtAlign8 = 0;
   }
 
   /// Tell the TypeLocBuilder that the type it is storing has been

diff  --git a/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp
index 9a15f4568fc5d..c5437b16c6886 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp
@@ -109,20 +109,17 @@ bool NonnullGlobalConstantsChecker::isGlobalConstString(SVal V) const {
 
   // Look through the typedefs.
   while (const Type *T = Ty.getTypePtr()) {
-    if (const auto *AT = dyn_cast<AttributedType>(T)) {
-      if (AT->getAttrKind() == attr::TypeNonNull)
-        return true;
-      Ty = AT->getModifiedType();
-    } else if (const auto *ET = dyn_cast<ElaboratedType>(T)) {
-      const auto *TT = dyn_cast<TypedefType>(ET->getNamedType());
-      if (!TT)
-        return false;
+    if (const auto *TT = dyn_cast<TypedefType>(T)) {
       Ty = TT->getDecl()->getUnderlyingType();
       // It is sufficient for any intermediate typedef
       // to be classified const.
       HasConst = HasConst || Ty.isConstQualified();
       if (isNonnullType(Ty) && HasConst)
         return true;
+    } else if (const auto *AT = dyn_cast<AttributedType>(T)) {
+      if (AT->getAttrKind() == attr::TypeNonNull)
+        return true;
+      Ty = AT->getModifiedType();
     } else {
       return false;
     }
@@ -139,7 +136,7 @@ bool NonnullGlobalConstantsChecker::isNonnullType(QualType Ty) const {
   if (auto *T = dyn_cast<ObjCObjectPointerType>(Ty)) {
     return T->getInterfaceDecl() &&
       T->getInterfaceDecl()->getIdentifier() == NSStringII;
-  } else if (auto *T = Ty->getAs<TypedefType>()) {
+  } else if (auto *T = dyn_cast<TypedefType>(Ty)) {
     IdentifierInfo* II = T->getDecl()->getIdentifier();
     return II == CFStringRefII || II == CFBooleanRefII || II == CFNullRefII;
   }

diff  --git a/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp
index f217520d8f4a0..3e9fc696f8e67 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp
@@ -196,10 +196,12 @@ void NumberObjectConversionChecker::checkASTCodeBody(const Decl *D,
                                                      AnalysisManager &AM,
                                                      BugReporter &BR) const {
   // Currently this matches CoreFoundation opaque pointer typedefs.
-  auto CSuspiciousNumberObjectExprM = expr(ignoringParenImpCasts(
-      expr(hasType(elaboratedType(namesType(typedefType(
-               hasDeclaration(anyOf(typedefDecl(hasName("CFNumberRef")),
-                                    typedefDecl(hasName("CFBooleanRef")))))))))
+  auto CSuspiciousNumberObjectExprM =
+      expr(ignoringParenImpCasts(
+          expr(hasType(
+              typedefType(hasDeclaration(anyOf(
+                  typedefDecl(hasName("CFNumberRef")),
+                  typedefDecl(hasName("CFBooleanRef")))))))
           .bind("c_object")));
 
   // Currently this matches XNU kernel number-object pointers.
@@ -238,9 +240,8 @@ void NumberObjectConversionChecker::checkASTCodeBody(const Decl *D,
 
   // The .bind here is in order to compose the error message more accurately.
   auto ObjCSuspiciousScalarBooleanTypeM =
-      qualType(elaboratedType(namesType(
-                   typedefType(hasDeclaration(typedefDecl(hasName("BOOL")))))))
-          .bind("objc_bool_type");
+      qualType(typedefType(hasDeclaration(
+                   typedefDecl(hasName("BOOL"))))).bind("objc_bool_type");
 
   // The .bind here is in order to compose the error message more accurately.
   auto SuspiciousScalarBooleanTypeM =
@@ -252,9 +253,9 @@ void NumberObjectConversionChecker::checkASTCodeBody(const Decl *D,
   // for storing pointers.
   auto SuspiciousScalarNumberTypeM =
       qualType(hasCanonicalType(isInteger()),
-               unless(elaboratedType(namesType(typedefType(hasDeclaration(
-                   typedefDecl(matchesName("^::u?intptr_t$"))))))))
-          .bind("int_type");
+               unless(typedefType(hasDeclaration(
+                   typedefDecl(matchesName("^::u?intptr_t$"))))))
+      .bind("int_type");
 
   auto SuspiciousScalarTypeM =
       qualType(anyOf(SuspiciousScalarBooleanTypeM,

diff  --git a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp
index 42691d556d986..2f97067f61716 100644
--- a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp
+++ b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp
@@ -161,7 +161,7 @@ CaptureMethods(std::string TypeString, const clang::CXXRecordDecl *ASTClass,
                   optionally(
                       isDerivedFrom(cxxRecordDecl(hasName("clang::TypeLoc"))
                                         .bind("typeLocBase"))))),
-              returns(hasCanonicalType(asString(TypeString))))
+              returns(asString(TypeString)))
               .bind("classMethod")),
       *ASTClass, *Result.Context);
 

diff  --git a/clang/test/AST/ast-dump-APValue-anon-union.cpp b/clang/test/AST/ast-dump-APValue-anon-union.cpp
index 1ed87e6656149..1c9480c5a9430 100644
--- a/clang/test/AST/ast-dump-APValue-anon-union.cpp
+++ b/clang/test/AST/ast-dump-APValue-anon-union.cpp
@@ -30,23 +30,23 @@ union U1 {
 
 void Test() {
   constexpr S0 s0{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s0 'const S0':'const S0' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s0 'const S0' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | `-field: Union .i Int 42
 
   constexpr U0 u0a{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0a 'const U0':'const U0' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0a 'const U0' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union None
 
   constexpr U0 u0b{3.1415f};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0b 'const U0':'const U0' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0b 'const U0' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union . Union .f Float 3.141500e+00
 
   constexpr U1 u1a{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1a 'const U1':'const U1' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1a 'const U1' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union . Union .f Float 0.000000e+00
 
   constexpr U1 u1b{3.1415f};
-  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1b 'const U1':'const U1' constexpr listinit
+  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1b 'const U1' constexpr listinit
   // CHECK-NEXT:      |-value: Union . Union .f Float 3.141500e+00
 }

diff  --git a/clang/test/AST/ast-dump-APValue-struct.cpp b/clang/test/AST/ast-dump-APValue-struct.cpp
index 04d1877c293d1..4730404abc287 100644
--- a/clang/test/AST/ast-dump-APValue-struct.cpp
+++ b/clang/test/AST/ast-dump-APValue-struct.cpp
@@ -60,12 +60,12 @@ struct S5 : S4 {
 
 void Test() {
   constexpr S0 s0{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s0 'const S0':'const S0' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s0 'const S0' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | `-fields: Int 0, Union .j Int 0
 
   constexpr S1 s1{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s1 'const S1':'const S1' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s1 'const S1' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | |-field: Int 0
   // CHECK-NEXT:  |   | `-field: Union .s
@@ -73,12 +73,12 @@ void Test() {
   // CHECK-NEXT:  |   |     `-field: Int 0
 
   constexpr S2 s2{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s2 'const S2':'const S2' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s2 'const S2' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | `-fields: Int 0, Union .u Union .j Int 0
 
   constexpr S3 s3{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s3 'const S3':'const S3' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s3 'const S3' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | |-field: Int 0
   // CHECK-NEXT:  |   | `-field: Union .u
@@ -87,7 +87,7 @@ void Test() {
   // CHECK-NEXT:  |   |       `-field: Int 0
 
   constexpr S4 s4{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s4 'const S4':'const S4' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s4 'const S4' constexpr listinit
   // CHECK-NEXT:  |   |-value: Struct
   // CHECK-NEXT:  |   | |-base: Struct
   // CHECK-NEXT:  |   | | `-fields: Int 0, Union .j Int 0
@@ -96,7 +96,7 @@ void Test() {
   // CHECK-NEXT:  |   | `-fields: Int 4, Int 5, Int 6
 
   constexpr S5 s5{};
-  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s5 'const S5':'const S5' constexpr listinit
+  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} s5 'const S5' constexpr listinit
   // CHECK-NEXT:      |-value: Struct
   // CHECK-NEXT:      | |-base: Struct
   // CHECK-NEXT:      | | |-base: Struct

diff  --git a/clang/test/AST/ast-dump-APValue-union.cpp b/clang/test/AST/ast-dump-APValue-union.cpp
index b70b5ea484a6e..c717b6ece7382 100644
--- a/clang/test/AST/ast-dump-APValue-union.cpp
+++ b/clang/test/AST/ast-dump-APValue-union.cpp
@@ -39,25 +39,25 @@ union U3 {
 
 void Test() {
   constexpr U0 u0{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0 'const U0':'const U0' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u0 'const U0' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union .i Int 42
 
   constexpr U1 u1{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1 'const U1':'const U1' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u1 'const U1' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union .uinner Union .f Float 3.141500e+00
 
   constexpr U2 u2{};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u2 'const U2':'const U2' constexpr listinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u2 'const U2' constexpr listinit
   // CHECK-NEXT:  |   |-value: Union .uinner
   // CHECK-NEXT:  |   | `-Union .arr
   // CHECK-NEXT:  |   |   `-Array size=2
   // CHECK-NEXT:  |   |     `-elements: Int 1, Int 2
 
   constexpr U3 u3a = {.f = 3.1415};
-  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u3a 'const U3':'const U3' constexpr cinit
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u3a 'const U3' constexpr cinit
   // CHECK-NEXT:  |   |-value: Union .f Float 3.141500e+00
 
   constexpr U3 u3b = {.uinner = {}};
-  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u3b 'const U3':'const U3' constexpr cinit
+  // CHECK:    `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} u3b 'const U3' constexpr cinit
   // CHECK-NEXT:      |-value: Union .uinner Union .d Float 3.141500e+00
 }

diff  --git a/clang/test/AST/ast-dump-decl.cpp b/clang/test/AST/ast-dump-decl.cpp
index a854e45cd5b16..691f67fb04dca 100644
--- a/clang/test/AST/ast-dump-decl.cpp
+++ b/clang/test/AST/ast-dump-decl.cpp
@@ -30,7 +30,7 @@ namespace testVarDeclNRVO {
     return TestVarDeclNRVO;
   }
 }
-// CHECK: VarDecl{{.*}} TestVarDeclNRVO 'A':'testVarDeclNRVO::A' nrvo
+// CHECK: VarDecl{{.*}} TestVarDeclNRVO 'testVarDeclNRVO::A' nrvo
 
 void testParmVarDeclInit(int TestParmVarDeclInit = 0);
 // CHECK:      ParmVarDecl{{.*}} TestParmVarDeclInit 'int'
@@ -107,8 +107,8 @@ namespace testCXXRecordDecl {
 // CHECK-NEXT:     CopyAssignment simple non_trivial has_const_param
 // CHECK-NEXT:     MoveAssignment exists simple non_trivial
 // CHECK-NEXT:     Destructor simple irrelevant trivial
-// CHECK-NEXT:   virtual private 'A':'testCXXRecordDecl::A'
-// CHECK-NEXT:   public 'B':'testCXXRecordDecl::B'
+// CHECK-NEXT:   virtual private 'testCXXRecordDecl::A'
+// CHECK-NEXT:   public 'testCXXRecordDecl::B'
 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestCXXRecordDecl
 // CHECK-NEXT:   FieldDecl
 
@@ -228,7 +228,7 @@ namespace testFunctionTemplateDecl {
   // CHECK-NEXT:  | |   `-CXXRecord 0x{{.+}} 'A'
   // CHECK-NEXT:  | |-ParmVarDecl 0x{{.+}} <col:50> col:51 'testFunctionTemplateDecl::A':'testFunctionTemplateDecl::A'
   // CHECK-NEXT:  | `-CompoundStmt 0x{{.+}} <col:53, col:55>
-  // CHECK-NEXT:  |-Function 0x{{.+}} 'TestFunctionTemplate' 'void (B)'
+  // CHECK-NEXT:  |-Function 0x{{.+}} 'TestFunctionTemplate' 'void (testFunctionTemplateDecl::B)'
   // CHECK-NEXT:  |-FunctionDecl 0x{{.+}} <col:24, col:55> col:29 TestFunctionTemplate 'void (testFunctionTemplateDecl::C)'
   // CHECK-NEXT:  | |-TemplateArgument type 'testFunctionTemplateDecl::C'
   // CHECK-NEXT:  | | `-RecordType 0{{.+}} 'testFunctionTemplateDecl::C'
@@ -241,11 +241,11 @@ namespace testFunctionTemplateDecl {
   // CHECK-NEXT:    |-ParmVarDecl 0x{{.+}} <col:50> col:51 'testFunctionTemplateDecl::D':'testFunctionTemplateDecl::D'
   // CHECK-NEXT:    `-CompoundStmt 0x{{.+}} <col:53, col:55>
 
-  // CHECK:       FunctionDecl 0x{{.+}} prev 0x{{.+}} <{{.+}}:[[@LINE-32]]:3, col:41> col:19 TestFunctionTemplate 'void (B)'
+  // CHECK:       FunctionDecl 0x{{.+}} prev 0x{{.+}} <{{.+}}:[[@LINE-32]]:3, col:41> col:19 TestFunctionTemplate 'void (testFunctionTemplateDecl::B)'
   // CHECK-NEXT:  |-TemplateArgument type 'testFunctionTemplateDecl::B'
   // CHECK-NEXT:  | `-RecordType 0{{.+}} 'testFunctionTemplateDecl::B'
   // CHECK-NEXT:  |   `-CXXRecord 0x{{.+}} 'B'
-  // CHECK-NEXT:  `-ParmVarDecl 0x{{.+}} <col:40> col:41 'B':'testFunctionTemplateDecl::B'
+  // CHECK-NEXT:  `-ParmVarDecl 0x{{.+}} <col:40> col:41 'testFunctionTemplateDecl::B'
 
 
 namespace testClassTemplateDecl {

diff  --git a/clang/test/AST/ast-dump-expr-json.cpp b/clang/test/AST/ast-dump-expr-json.cpp
index 62abd9aa42db4..e924cb4bddcf5 100644
--- a/clang/test/AST/ast-dump-expr-json.cpp
+++ b/clang/test/AST/ast-dump-expr-json.cpp
@@ -325,7 +325,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "obj1",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "S",
 // CHECK-NEXT:     "qualType": "S"
 // CHECK-NEXT:    }
 // CHECK-NEXT:   },
@@ -462,7 +461,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "S",
 // CHECK-NEXT:         "qualType": "S"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "lvalue",
@@ -471,7 +469,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "kind": "ParmVarDecl",
 // CHECK-NEXT:         "name": "obj1",
 // CHECK-NEXT:         "type": {
-// CHECK-NEXT:          "desugaredQualType": "S",
 // CHECK-NEXT:          "qualType": "S"
 // CHECK-NEXT:         }
 // CHECK-NEXT:        }
@@ -733,7 +730,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "S",
 // CHECK-NEXT:             "qualType": "S"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
@@ -742,7 +738,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:             "kind": "ParmVarDecl",
 // CHECK-NEXT:             "name": "obj1",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:              "desugaredQualType": "S",
 // CHECK-NEXT:              "qualType": "S"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
@@ -2539,7 +2534,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "S",
 // CHECK-NEXT:     "qualType": "S"
 // CHECK-NEXT:    }
 // CHECK-NEXT:   },
@@ -2672,7 +2666,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "S",
 // CHECK-NEXT:           "qualType": "S"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
@@ -2681,7 +2674,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "ParmVarDecl",
 // CHECK-NEXT:           "name": "a",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "desugaredQualType": "S",
 // CHECK-NEXT:            "qualType": "S"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
@@ -2992,7 +2984,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "S",
 // CHECK-NEXT:           "qualType": "S"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
@@ -3001,7 +2992,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "ParmVarDecl",
 // CHECK-NEXT:           "name": "a",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "desugaredQualType": "S",
 // CHECK-NEXT:            "qualType": "S"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
@@ -3169,7 +3159,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "S",
 // CHECK-NEXT:           "qualType": "S"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
@@ -3178,7 +3167,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "ParmVarDecl",
 // CHECK-NEXT:           "name": "a",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "desugaredQualType": "S",
 // CHECK-NEXT:            "qualType": "S"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
@@ -3247,7 +3235,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "S",
 // CHECK-NEXT:           "qualType": "S"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
@@ -3256,7 +3243,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "ParmVarDecl",
 // CHECK-NEXT:           "name": "a",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "desugaredQualType": "S",
 // CHECK-NEXT:            "qualType": "S"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
@@ -3500,7 +3486,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "S",
 // CHECK-NEXT:         "qualType": "S"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "lvalue",
@@ -3509,7 +3494,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "kind": "ParmVarDecl",
 // CHECK-NEXT:         "name": "a",
 // CHECK-NEXT:         "type": {
-// CHECK-NEXT:          "desugaredQualType": "S",
 // CHECK-NEXT:          "qualType": "S"
 // CHECK-NEXT:         }
 // CHECK-NEXT:        }
@@ -3537,7 +3521,6 @@ void TestNonADLCall3() {
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "valueCategory": "lvalue",
 // CHECK-NEXT:      "typeArg": {
-// CHECK-NEXT:       "desugaredQualType": "S",
 // CHECK-NEXT:       "qualType": "S"
 // CHECK-NEXT:      }
 // CHECK-NEXT:     },
@@ -3562,11 +3545,9 @@ void TestNonADLCall3() {
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "valueCategory": "lvalue",
 // CHECK-NEXT:      "typeArg": {
-// CHECK-NEXT:       "desugaredQualType": "const volatile S",
 // CHECK-NEXT:       "qualType": "const volatile S"
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "adjustedTypeArg": {
-// CHECK-NEXT:       "desugaredQualType": "S",
 // CHECK-NEXT:       "qualType": "S"
 // CHECK-NEXT:      }
 // CHECK-NEXT:     }
@@ -7930,7 +7911,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "qualType": "void (*)(X)"
+// CHECK-NEXT:         "qualType": "void (*)(NS::X)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "castKind": "FunctionToPointerDecay",
@@ -7951,7 +7932,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "qualType": "void (X)"
+// CHECK-NEXT:           "qualType": "void (NS::X)"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
 // CHECK-NEXT:          "referencedDecl": {
@@ -7959,7 +7940,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "FunctionDecl",
 // CHECK-NEXT:           "name": "f",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "qualType": "void (X)"
+// CHECK-NEXT:            "qualType": "void (NS::X)"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
 // CHECK-NEXT:         }
@@ -7981,8 +7962,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "NS::X",
-// CHECK-NEXT:         "qualType": "X"
+// CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "ctorType": {
@@ -8368,7 +8348,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "qualType": "void (*)(X)"
+// CHECK-NEXT:         "qualType": "void (*)(NS::X)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "castKind": "FunctionToPointerDecay",
@@ -8389,7 +8369,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "qualType": "void (X)"
+// CHECK-NEXT:           "qualType": "void (NS::X)"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
 // CHECK-NEXT:          "referencedDecl": {
@@ -8397,7 +8377,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "FunctionDecl",
 // CHECK-NEXT:           "name": "f",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "qualType": "void (X)"
+// CHECK-NEXT:            "qualType": "void (NS::X)"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
 // CHECK-NEXT:         }
@@ -8419,8 +8399,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "NS::X",
-// CHECK-NEXT:         "qualType": "X"
+// CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "ctorType": {
@@ -8691,7 +8670,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "qualType": "void (*)(X)"
+// CHECK-NEXT:         "qualType": "void (*)(NS::X)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "castKind": "FunctionToPointerDecay",
@@ -8712,7 +8691,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "qualType": "void (X)"
+// CHECK-NEXT:           "qualType": "void (NS::X)"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
 // CHECK-NEXT:          "referencedDecl": {
@@ -8720,7 +8699,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "FunctionDecl",
 // CHECK-NEXT:           "name": "f",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "qualType": "void (X)"
+// CHECK-NEXT:            "qualType": "void (NS::X)"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "foundReferencedDecl": {
@@ -8747,8 +8726,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "NS::X",
-// CHECK-NEXT:         "qualType": "X"
+// CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "ctorType": {
@@ -9062,8 +9040,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "x",
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "NS::X",
-// CHECK-NEXT:         "qualType": "X"
+// CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "init": "call",
 // CHECK-NEXT:        "inner": [
@@ -9083,8 +9060,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "NS::X",
-// CHECK-NEXT:           "qualType": "X"
+// CHECK-NEXT:           "qualType": "NS::X"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "prvalue",
 // CHECK-NEXT:          "ctorType": {
@@ -9134,7 +9110,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "qualType": "void (*)(X)"
+// CHECK-NEXT:         "qualType": "void (*)(NS::X)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "castKind": "FunctionToPointerDecay",
@@ -9155,7 +9131,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "qualType": "void (X)"
+// CHECK-NEXT:           "qualType": "void (NS::X)"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "lvalue",
 // CHECK-NEXT:          "referencedDecl": {
@@ -9163,7 +9139,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:           "kind": "FunctionDecl",
 // CHECK-NEXT:           "name": "f",
 // CHECK-NEXT:           "type": {
-// CHECK-NEXT:            "qualType": "void (X)"
+// CHECK-NEXT:            "qualType": "void (NS::X)"
 // CHECK-NEXT:           }
 // CHECK-NEXT:          }
 // CHECK-NEXT:         }
@@ -9185,8 +9161,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "NS::X",
-// CHECK-NEXT:         "qualType": "X"
+// CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
 // CHECK-NEXT:        "ctorType": {
@@ -9232,8 +9207,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "NS::X",
-// CHECK-NEXT:             "qualType": "X"
+// CHECK-NEXT:             "qualType": "NS::X"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
 // CHECK-NEXT:            "referencedDecl": {
@@ -9241,8 +9215,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:             "kind": "VarDecl",
 // CHECK-NEXT:             "name": "x",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:              "desugaredQualType": "NS::X",
-// CHECK-NEXT:              "qualType": "X"
+// CHECK-NEXT:              "qualType": "NS::X"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
 // CHECK-NEXT:           }

diff  --git a/clang/test/AST/ast-dump-expr.cpp b/clang/test/AST/ast-dump-expr.cpp
index a0324e602f670..8b890860e2e32 100644
--- a/clang/test/AST/ast-dump-expr.cpp
+++ b/clang/test/AST/ast-dump-expr.cpp
@@ -59,7 +59,7 @@ void Throw() {
 void PointerToMember(S obj1, S *obj2, int S::* data, void (S::*call)(int)) {
   obj1.*data;
   // CHECK: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> 'int' lvalue '.*'
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'obj1' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S' lvalue ParmVar 0x{{[^ ]*}} 'obj1' 'S'
   // CHECK-NEXT: ImplicitCastExpr
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:9> 'int S::*' lvalue ParmVar 0x{{[^ ]*}} 'data' 'int S::*'
 
@@ -74,7 +74,7 @@ void PointerToMember(S obj1, S *obj2, int S::* data, void (S::*call)(int)) {
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:18> 'void'
   // CHECK-NEXT: ParenExpr 0x{{[^ ]*}} <col:3, col:14> '<bound member function type>'
   // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:4, col:10> '<bound member function type>' '.*'
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'obj1' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:4> 'S' lvalue ParmVar 0x{{[^ ]*}} 'obj1' 'S'
   // CHECK-NEXT: ImplicitCastExpr
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'void (S::*)(int)' lvalue ParmVar 0x{{[^ ]*}} 'call' 'void (S::*)(int)'
   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:16> 'int' 12
@@ -91,18 +91,20 @@ void PointerToMember(S obj1, S *obj2, int S::* data, void (S::*call)(int)) {
 }
 
 void Casting(const S *s) {
+  // FIXME: The cast expressions contain "struct S" instead of "S".
+
   const_cast<S *>(s);
-  // CHECK: CXXConstCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:20> 'S *' const_cast<S *> <NoOp>
+  // CHECK: CXXConstCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:20> 'S *' const_cast<struct S *> <NoOp>
   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}} <col:19> 'const S *' <LValueToRValue> part_of_explicit_cast
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:19> 'const S *' lvalue ParmVar 0x{{[^ ]*}} 's' 'const S *'
 
   static_cast<const T *>(s);
-  // CHECK: CXXStaticCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:27> 'const T *' static_cast<const T *> <BaseToDerived (S)>
+  // CHECK: CXXStaticCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:27> 'const T *' static_cast<const struct T *> <BaseToDerived (S)>
   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}} <col:26> 'const S *' <LValueToRValue> part_of_explicit_cast
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:26> 'const S *' lvalue ParmVar 0x{{[^ ]*}} 's' 'const S *'
 
   dynamic_cast<const T *>(s);
-  // CHECK: CXXDynamicCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:28> 'const T *' dynamic_cast<const T *> <Dynamic>
+  // CHECK: CXXDynamicCastExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:28> 'const T *' dynamic_cast<const struct T *> <Dynamic>
   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}} <col:27> 'const S *' <LValueToRValue> part_of_explicit_cast
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:27> 'const S *' lvalue ParmVar 0x{{[^ ]*}} 's' 'const S *'
 
@@ -178,7 +180,7 @@ void PostfixExpressions(S a, S *p, U<int> *r) {
   a.func(0);
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> 'void'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:5> '<bound member function type>' .func 0x{{[^ ]*}}
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S'
   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:10> 'int' 0
 
   p->func(0);
@@ -199,7 +201,7 @@ void PostfixExpressions(S a, S *p, U<int> *r) {
   a.template foo<float>();
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:25> 'float':'float'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:23> '<bound member function type>' .foo 0x{{[^ ]*}}
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S'
 
   p->~S();
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9> 'void'
@@ -210,14 +212,14 @@ void PostfixExpressions(S a, S *p, U<int> *r) {
   a.~S();
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'void'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:6> '<bound member function type>' .~S 0x{{[^ ]*}}
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S'
 
   // FIXME: there seems to be no way to distinguish the construct below from
   // the construct above.
   a.~decltype(a)();
   // CHECK: CXXMemberCallExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:18> 'void'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:3, col:5> '<bound member function type>' .~S 0x{{[^ ]*}}
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:3> 'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S'
 
   // FIXME: similarly, there is no way to distinguish the construct below from
   // the p->~S() case.
@@ -236,7 +238,7 @@ void PostfixExpressions(S a, S *p, U<int> *r) {
 
   typeid(a);
   // CHECK: CXXTypeidExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11> 'const std::type_info' lvalue
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'S':'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S':'S'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> 'S' lvalue ParmVar 0x{{[^ ]*}} 'a' 'S'
 
   // FIXME: no type information is printed for the argument.
   typeid(S);

diff  --git a/clang/test/AST/ast-dump-funcs.cpp b/clang/test/AST/ast-dump-funcs.cpp
index 7d47893d4596d..61fb5d4eb654e 100644
--- a/clang/test/AST/ast-dump-funcs.cpp
+++ b/clang/test/AST/ast-dump-funcs.cpp
@@ -32,7 +32,7 @@ struct S {
   // CHECK-NEXT: CXXCtorInitializer Field 0x{{[^ ]*}} 'j' 'int'
   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:17> 'int' 0
   // CHECK-NEXT: CXXCtorInitializer Field 0x{{[^ ]*}} 'r' 'R'
-  // CHECK-NEXT: CXXConstructExpr 0x{{[^ ]*}} <col:3> 'R':'R' 'void () noexcept'
+  // CHECK-NEXT: CXXConstructExpr 0x{{[^ ]*}} <col:3> 'R' 'void () noexcept'
   // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} <col:20, col:21>
 
   void a();

diff  --git a/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp b/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp
index 37490b9fdb30d..88c47b213cfbf 100644
--- a/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp
+++ b/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp
@@ -114,7 +114,7 @@ int test() {
 // CHECK-NEXT: | |   |-DeclStmt [[ADDR_44:0x[a-z0-9]*]] <line:18:3, col:11>
 // CHECK-NEXT: | |   | `-VarDecl [[ADDR_45:0x[a-z0-9]*]] <col:3, col:10> col:10 referenced t 'double'
 // CHECK-NEXT: | |   |-DeclStmt [[ADDR_46:0x[a-z0-9]*]] <line:19:3, col:16>
-// CHECK-NEXT: | |   | `-VarDecl [[ADDR_47:0x[a-z0-9]*]] <col:3, col:15> col:8 q 'S<T>':'S<T>' callinit
+// CHECK-NEXT: | |   | `-VarDecl [[ADDR_47:0x[a-z0-9]*]] <col:3, col:15> col:8 q 'S<T>' callinit
 // CHECK-NEXT: | |   |   `-ParenListExpr [[ADDR_48:0x[a-z0-9]*]] <col:9, col:15> 'NULL TYPE'
 // CHECK-NEXT: | |   |     |-IntegerLiteral [[ADDR_49:0x[a-z0-9]*]] <col:10> 'int' 1
 // CHECK-NEXT: | |   |     `-UnaryOperator [[ADDR_50:0x[a-z0-9]*]] <col:13, col:14> 'double *' prefix '&' cannot overflow
@@ -149,7 +149,7 @@ int test() {
 // CHECK-NEXT: | |   |-DeclStmt [[ADDR_72:0x[a-z0-9]*]] <line:24:3, col:6>
 // CHECK-NEXT: | |   | `-VarDecl [[ADDR_73:0x[a-z0-9]*]] <col:3, col:5> col:5 referenced t 'T'
 // CHECK-NEXT: | |   |-DeclStmt [[ADDR_74:0x[a-z0-9]*]] <line:25:3, col:16>
-// CHECK-NEXT: | |   | `-VarDecl [[ADDR_75:0x[a-z0-9]*]] <col:3, col:15> col:8 q 'S<T>':'S<T>' callinit
+// CHECK-NEXT: | |   | `-VarDecl [[ADDR_75:0x[a-z0-9]*]] <col:3, col:15> col:8 q 'S<T>' callinit
 // CHECK-NEXT: | |   |   `-ParenListExpr [[ADDR_76:0x[a-z0-9]*]] <col:9, col:15> 'NULL TYPE'
 // CHECK-NEXT: | |   |     |-IntegerLiteral [[ADDR_77:0x[a-z0-9]*]] <col:10> 'int' 0
 // CHECK-NEXT: | |   |     `-UnaryOperator [[ADDR_78:0x[a-z0-9]*]] <col:13, col:14> '<dependent type>' prefix '&' cannot overflow
@@ -185,7 +185,7 @@ int test() {
 // CHECK-NEXT: |     |-DeclStmt [[ADDR_101:0x[a-z0-9]*]] <line:31:3, col:11>
 // CHECK-NEXT: |     | `-VarDecl [[ADDR_102:0x[a-z0-9]*]] <col:3, col:10> col:10 referenced t 'double'
 // CHECK-NEXT: |     |-DeclStmt [[ADDR_103:0x[a-z0-9]*]] <line:32:3, col:18>
-// CHECK-NEXT: |     | `-VarDecl [[ADDR_104:0x[a-z0-9]*]] <col:3, col:17> col:8 q 'S<T>':'S<T>' callinit
+// CHECK-NEXT: |     | `-VarDecl [[ADDR_104:0x[a-z0-9]*]] <col:3, col:17> col:8 q 'S<T>' callinit
 // CHECK-NEXT: |     |   `-ParenListExpr [[ADDR_105:0x[a-z0-9]*]] <col:9, col:17> 'NULL TYPE'
 // CHECK-NEXT: |     |     |-FloatingLiteral [[ADDR_106:0x[a-z0-9]*]] <col:10> 'double' 2.000000e+00
 // CHECK-NEXT: |     |     `-UnaryOperator [[ADDR_107:0x[a-z0-9]*]] <col:15, col:16> 'double *' prefix '&' cannot overflow

diff  --git a/clang/test/AST/ast-dump-overloaded-operators.cpp b/clang/test/AST/ast-dump-overloaded-operators.cpp
index 8fd1f82fe2c8f..639a0d9874eb0 100644
--- a/clang/test/AST/ast-dump-overloaded-operators.cpp
+++ b/clang/test/AST/ast-dump-overloaded-operators.cpp
@@ -31,14 +31,14 @@ void test() {
 // CHECK-NEXT:     |-CXXOperatorCallExpr {{.*}} <line:16:3, col:7> 'void' '+'
 // CHECK-NEXT:     | |-ImplicitCastExpr {{.*}} <col:5> 'void (*)(E, E)' <FunctionToPointerDecay>
 // CHECK-NEXT:     | | `-DeclRefExpr {{.*}} <col:5> 'void (E, E)' lvalue Function {{.*}} 'operator+' 'void (E, E)'
-// CHECK-NEXT:     | |-ImplicitCastExpr {{.*}} <col:3> 'E':'E' <LValueToRValue>
-// CHECK-NEXT:     | | `-DeclRefExpr {{.*}} <col:3> 'E':'E' lvalue Var {{.*}} 'e' 'E':'E'
-// CHECK-NEXT:     | `-ImplicitCastExpr {{.*}} <col:7> 'E':'E' <LValueToRValue>
-// CHECK-NEXT:     |   `-DeclRefExpr {{.*}} <col:7> 'E':'E' lvalue Var {{.*}} 'e' 'E':'E'
+// CHECK-NEXT:     | |-ImplicitCastExpr {{.*}} <col:3> 'E' <LValueToRValue>
+// CHECK-NEXT:     | | `-DeclRefExpr {{.*}} <col:3> 'E' lvalue Var {{.*}} 'e' 'E'
+// CHECK-NEXT:     | `-ImplicitCastExpr {{.*}} <col:7> 'E' <LValueToRValue>
+// CHECK-NEXT:     |   `-DeclRefExpr {{.*}} <col:7> 'E' lvalue Var {{.*}} 'e' 'E'
 // CHECK-NEXT:     `-CXXOperatorCallExpr {{.*}} <line:17:3, col:7> 'void' ','
 // CHECK-NEXT:       |-ImplicitCastExpr {{.*}} <col:5> 'void (*)(E, E)' <FunctionToPointerDecay>
 // CHECK-NEXT:       | `-DeclRefExpr {{.*}} <col:5> 'void (E, E)' lvalue Function {{.*}} 'operator,' 'void (E, E)'
-// CHECK-NEXT:       |-ImplicitCastExpr {{.*}} <col:3> 'E':'E' <LValueToRValue>
-// CHECK-NEXT:       | `-DeclRefExpr {{.*}} <col:3> 'E':'E' lvalue Var {{.*}} 'e' 'E':'E'
-// CHECK-NEXT:       `-ImplicitCastExpr {{.*}} <col:7> 'E':'E' <LValueToRValue>
-// CHECK-NEXT:         `-DeclRefExpr {{.*}} <col:7> 'E':'E' lvalue Var {{.*}} 'e' 'E':'E'
+// CHECK-NEXT:       |-ImplicitCastExpr {{.*}} <col:3> 'E' <LValueToRValue>
+// CHECK-NEXT:       | `-DeclRefExpr {{.*}} <col:3> 'E' lvalue Var {{.*}} 'e' 'E'
+// CHECK-NEXT:       `-ImplicitCastExpr {{.*}} <col:7> 'E' <LValueToRValue>
+// CHECK-NEXT:         `-DeclRefExpr {{.*}} <col:7> 'E' lvalue Var {{.*}} 'e' 'E'

diff  --git a/clang/test/AST/ast-dump-records-json.cpp b/clang/test/AST/ast-dump-records-json.cpp
index bc53d03176f66..a7eb8771d3f02 100644
--- a/clang/test/AST/ast-dump-records-json.cpp
+++ b/clang/test/AST/ast-dump-records-json.cpp
@@ -3266,7 +3266,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:   {
 // CHECK-NEXT:    "access": "public",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base1",
 // CHECK-NEXT:     "qualType": "Base1"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "none"
@@ -3378,7 +3377,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:   {
 // CHECK-NEXT:    "access": "private",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base1",
 // CHECK-NEXT:     "qualType": "Base1"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "private"
@@ -3479,7 +3477,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:    "access": "public",
 // CHECK-NEXT:    "isVirtual": true,
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base1",
 // CHECK-NEXT:     "qualType": "Base1"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "none"
@@ -3718,7 +3715,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:   {
 // CHECK-NEXT:    "access": "public",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base1",
 // CHECK-NEXT:     "qualType": "Base1"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "none"
@@ -3727,7 +3723,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:    "access": "public",
 // CHECK-NEXT:    "isVirtual": true,
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base2",
 // CHECK-NEXT:     "qualType": "Base2"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "none"
@@ -3735,7 +3730,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:   {
 // CHECK-NEXT:    "access": "protected",
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base3",
 // CHECK-NEXT:     "qualType": "Base3"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "protected"
@@ -3975,7 +3969,6 @@ struct Derived6 : virtual public Bases... {
 // CHECK-NEXT:    "access": "protected",
 // CHECK-NEXT:    "isVirtual": true,
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "Base1",
 // CHECK-NEXT:     "qualType": "Base1"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "writtenAccess": "protected"

diff  --git a/clang/test/AST/ast-dump-recovery.cpp b/clang/test/AST/ast-dump-recovery.cpp
index 53043027ddb8c..f2aca6a78fb02 100644
--- a/clang/test/AST/ast-dump-recovery.cpp
+++ b/clang/test/AST/ast-dump-recovery.cpp
@@ -145,7 +145,7 @@ void test2(Foo2 f) {
   // CHECK-NEXT:   | `-DeclRefExpr {{.*}} 'f'
   // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
   f.func(1);
-  // CHECK:      RecoveryExpr {{.*}} 'ForwardClass':'Foo2::ForwardClass'
+  // CHECK:      RecoveryExpr {{.*}} 'Foo2::ForwardClass'
   // CHECK-NEXT: `-MemberExpr {{.*}} '<bound member function type>' .createFwd
   // CHECK-NEXT:   `-DeclRefExpr {{.*}} 'f'
   f.createFwd();
@@ -202,27 +202,27 @@ void InvalidInitalizer(int x) {
   // CHECK-NEXT:  `-InitListExpr
   Bar b2 = {1};
   // CHECK:     `-VarDecl {{.*}} b3 'Bar'
-  // CHECK-NEXT:  `-RecoveryExpr {{.*}} 'Bar':'Bar' contains-errors
+  // CHECK-NEXT:  `-RecoveryExpr {{.*}} 'Bar' contains-errors
   // CHECK-NEXT:    `-DeclRefExpr {{.*}} 'x' 'int'
   Bar b3 = Bar(x);
   // CHECK:     `-VarDecl {{.*}} b4 'Bar'
-  // CHECK-NEXT:  `-RecoveryExpr {{.*}} 'Bar':'Bar' contains-errors
+  // CHECK-NEXT:  `-RecoveryExpr {{.*}} 'Bar' contains-errors
   // CHECK-NEXT:    `-InitListExpr {{.*}} 'void'
   // CHECK-NEXT:      `-DeclRefExpr {{.*}} 'x' 'int'
   Bar b4 = Bar{x};
   // CHECK:     `-VarDecl {{.*}} b5 'Bar'
-  // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar':'Bar' contains-errors 'Bar'
+  // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar' contains-errors 'Bar'
   // CHECK-NEXT:   `-RecoveryExpr {{.*}} contains-errors
   // CHECK-NEXT:     `-UnresolvedLookupExpr {{.*}} 'invalid'
   Bar b5 = Bar(invalid());
   // CHECK:     `-VarDecl {{.*}} b6 'Bar'
-  // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar':'Bar' contains-errors 'Bar'
+  // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar' contains-errors 'Bar'
   // CHECK-NEXT:  `-InitListExpr {{.*}} contains-errors
   // CHECK-NEXT:   `-RecoveryExpr {{.*}} contains-errors
   // CHECK-NEXT:     `-UnresolvedLookupExpr {{.*}} 'invalid'
   Bar b6 = Bar{invalid()};
 
-  // CHECK:     RecoveryExpr {{.*}} 'Bar':'Bar' contains-errors
+  // CHECK:     RecoveryExpr {{.*}} 'Bar' contains-errors
   // CHECK-NEXT:  `-IntegerLiteral {{.*}} 'int' 1
   Bar(1);
 
@@ -326,7 +326,7 @@ void CtorInitializer() {
     // CHECK-NEXT: |   `-RecoveryExpr {{.*}} '<dependent type>'
     // CHECK-NEXT: |     `-UnresolvedLookupExpr {{.*}} '<overloaded function type>'
     // CHECK-NEXT: |-CXXCtorInitializer Field {{.*}} 's' 'S'
-    // CHECK-NEXT: | `-RecoveryExpr {{.*}} 'S':'S' contains-errors
+    // CHECK-NEXT: | `-RecoveryExpr {{.*}} 'S' contains-errors
     // CHECK-NEXT: |   |-IntegerLiteral {{.*}} 1
     // CHECK-NEXT: |   `-IntegerLiteral {{.*}} 2
   };

diff  --git a/clang/test/AST/ast-dump-stmt-json.cpp b/clang/test/AST/ast-dump-stmt-json.cpp
index 4c895a660755a..62afa1bffdab3 100644
--- a/clang/test/AST/ast-dump-stmt-json.cpp
+++ b/clang/test/AST/ast-dump-stmt-json.cpp
@@ -2257,7 +2257,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "obj",
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:           "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:          }
 // CHECK-NEXT:         }
@@ -2323,7 +2322,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:             "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
@@ -2332,7 +2330,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             "kind": "VarDecl",
 // CHECK-NEXT:             "name": "obj",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:              "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:              "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
@@ -2421,7 +2418,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:             "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
@@ -2430,7 +2426,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             "kind": "VarDecl",
 // CHECK-NEXT:             "name": "obj",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:              "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:              "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
@@ -2585,7 +2580,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:                 }
 // CHECK-NEXT:                },
 // CHECK-NEXT:                "type": {
-// CHECK-NEXT:                 "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:                 "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:                },
 // CHECK-NEXT:                "valueCategory": "lvalue",
@@ -2594,7 +2588,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:                 "kind": "VarDecl",
 // CHECK-NEXT:                 "name": "obj",
 // CHECK-NEXT:                 "type": {
-// CHECK-NEXT:                  "desugaredQualType": "DependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:                  "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:                 }
 // CHECK-NEXT:                }
@@ -2771,7 +2764,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "obj",
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "OtherDependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:           "qualType": "OtherDependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:          }
 // CHECK-NEXT:         }
@@ -2859,7 +2851,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "OtherDependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:             "qualType": "OtherDependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
@@ -2868,7 +2859,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             "kind": "VarDecl",
 // CHECK-NEXT:             "name": "obj",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:             "desugaredQualType": "OtherDependentScopeMemberExprWrapper<T>",
 // CHECK-NEXT:              "qualType": "OtherDependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
@@ -3029,7 +3019,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "U",
 // CHECK-NEXT:             "qualType": "U"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "prvalue",
@@ -3058,7 +3047,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "U",
 // CHECK-NEXT:             "qualType": "U"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "prvalue",
@@ -5152,7 +5140,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "C",
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "Container",
 // CHECK-NEXT:         "qualType": "Container"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "init": "call",
@@ -5173,7 +5160,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "Container",
 // CHECK-NEXT:           "qualType": "Container"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "prvalue",
@@ -5267,7 +5253,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "type": {
-// CHECK-NEXT:             "desugaredQualType": "Container",
 // CHECK-NEXT:             "qualType": "Container"
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "valueCategory": "lvalue",
@@ -5276,7 +5261,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:             "kind": "VarDecl",
 // CHECK-NEXT:             "name": "C",
 // CHECK-NEXT:             "type": {
-// CHECK-NEXT:              "desugaredQualType": "Container",
 // CHECK-NEXT:              "qualType": "Container"
 // CHECK-NEXT:             }
 // CHECK-NEXT:            }
@@ -5410,7 +5394,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:                   }
 // CHECK-NEXT:                  },
 // CHECK-NEXT:                  "type": {
-// CHECK-NEXT:                   "desugaredQualType": "Container",
 // CHECK-NEXT:                   "qualType": "Container"
 // CHECK-NEXT:                  },
 // CHECK-NEXT:                  "valueCategory": "lvalue",
@@ -5558,7 +5541,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
 // CHECK-NEXT:                   }
 // CHECK-NEXT:                  },
 // CHECK-NEXT:                  "type": {
-// CHECK-NEXT:                   "desugaredQualType": "Container",
 // CHECK-NEXT:                   "qualType": "Container"
 // CHECK-NEXT:                  },
 // CHECK-NEXT:                  "valueCategory": "lvalue",

diff  --git a/clang/test/AST/ast-dump-stmt.cpp b/clang/test/AST/ast-dump-stmt.cpp
index 6a1b0d366eda6..4f73d39d4af21 100644
--- a/clang/test/AST/ast-dump-stmt.cpp
+++ b/clang/test/AST/ast-dump-stmt.cpp
@@ -99,8 +99,8 @@ void TestUnionInitList()
   U us[3] = {1};
 // CHECK: VarDecl {{.+}} <col:3, col:15> col:5 us 'U[3]' cinit
 // CHECK-NEXT: `-InitListExpr {{.+}} <col:13, col:15> 'U[3]'
-// CHECK-NEXT:   |-array_filler: InitListExpr {{.+}} <col:15> 'U':'U' field Field {{.+}} 'i' 'int'
-// CHECK-NEXT:   `-InitListExpr {{.+}} <col:14> 'U':'U' field Field {{.+}} 'i' 'int'
+// CHECK-NEXT:   |-array_filler: InitListExpr {{.+}} <col:15> 'U' field Field {{.+}} 'i' 'int'
+// CHECK-NEXT:   `-InitListExpr {{.+}} <col:14> 'U' field Field {{.+}} 'i' 'int'
 // CHECK-NEXT:     `-IntegerLiteral {{.+}} <col:14> 'int' 1
 }
 
@@ -229,19 +229,19 @@ void TestIteration() {
   // CHECK-NEXT: <<<NULL>>>
   // CHECK-NEXT: DeclStmt
   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:16> col:16 implicit used __range1 'Container &' cinit
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:16> 'Container':'Container' lvalue Var 0x{{[^ ]*}} 'C' 'Container':'Container'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:16> 'Container' lvalue Var 0x{{[^ ]*}} 'C' 'Container'
   // CHECK-NEXT: DeclStmt
   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:14> col:14 implicit used __begin1 'int *':'int *' cinit
   // CHECK-NEXT: CXXMemberCallExpr 0x{{[^ ]*}} <col:14> 'int *'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:14> '<bound member function type>' .begin 0x{{[^ ]*}}
   // CHECK-NEXT: ImplicitCastExpr
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> 'Container':'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> 'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &'
   // CHECK-NEXT: DeclStmt
   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:14> col:14 implicit used __end1 'int *':'int *' cinit
   // CHECK-NEXT: CXXMemberCallExpr 0x{{[^ ]*}} <col:14> 'int *'
   // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} <col:14> '<bound member function type>' .end 0x{{[^ ]*}}
   // CHECK-NEXT: ImplicitCastExpr
-  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> 'Container':'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &'
+  // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> 'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &'
   // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:14> 'bool' '!='
   // CHECK-NEXT: ImplicitCastExpr
   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *'

diff  --git a/clang/test/AST/ast-dump-template-decls-json.cpp b/clang/test/AST/ast-dump-template-decls-json.cpp
index f51ef937d91db..00a656cd05917 100644
--- a/clang/test/AST/ast-dump-template-decls-json.cpp
+++ b/clang/test/AST/ast-dump-template-decls-json.cpp
@@ -826,7 +826,6 @@ void i();
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "Uy<Ty>",
 // CHECK-NEXT:         "qualType": "Uy<Ty>"
 // CHECK-NEXT:        }
 // CHECK-NEXT:       }

diff  --git a/clang/test/AST/ast-dump-temporaries-json.cpp b/clang/test/AST/ast-dump-temporaries-json.cpp
index a8b14de29fcf9..0fd2762cee1a7 100644
--- a/clang/test/AST/ast-dump-temporaries-json.cpp
+++ b/clang/test/AST/ast-dump-temporaries-json.cpp
@@ -36,7 +36,6 @@ void MaterializeTemp() {
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "type": {
-// CHECK-NEXT:   "desugaredQualType": "const S",
 // CHECK-NEXT:   "qualType": "const S"
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "valueCategory": "lvalue",
@@ -58,7 +57,6 @@ void MaterializeTemp() {
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "type": {
-// CHECK-NEXT:     "desugaredQualType": "const S",
 // CHECK-NEXT:     "qualType": "const S"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "valueCategory": "lvalue",
@@ -89,7 +87,6 @@ void MaterializeTemp() {
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "type": {
-// CHECK-NEXT:       "desugaredQualType": "const S",
 // CHECK-NEXT:       "qualType": "const S"
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "valueCategory": "prvalue",
@@ -111,7 +108,6 @@ void MaterializeTemp() {
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "type": {
-// CHECK-NEXT:         "desugaredQualType": "S",
 // CHECK-NEXT:         "qualType": "S"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
@@ -141,7 +137,6 @@ void MaterializeTemp() {
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "type": {
-// CHECK-NEXT:           "desugaredQualType": "S",
 // CHECK-NEXT:           "qualType": "S"
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "valueCategory": "prvalue",

diff  --git a/clang/test/AST/ast-dump-using-template.cpp b/clang/test/AST/ast-dump-using-template.cpp
index da18f0499f54d..fbce09d116ed0 100644
--- a/clang/test/AST/ast-dump-using-template.cpp
+++ b/clang/test/AST/ast-dump-using-template.cpp
@@ -16,23 +16,20 @@ using ns::S;
 template<typename T>
 using A = S<T>;
 // CHECK:      TypeAliasDecl
-// CHECK-NEXT: `-ElaboratedType {{.*}} 'S<T>' sugar dependent
-// CHECK-NEXT:   `-TemplateSpecializationType {{.*}} 'S<T>' dependent using S
+// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'S<T>' dependent using S
 
 // TemplateName in TemplateArgument.
 template <template <typename> class T> class X {};
 using B = X<S>;
 // CHECK:      TypeAliasDecl
-// CHECK-NEXT: `-ElaboratedType {{.*}} 'X<ns::S>' sugar
-// CHECK-NEXT:   `-TemplateSpecializationType {{.*}} 'X<ns::S>' sugar X
-// CHECK-NEXT:     |-TemplateArgument using template S
-// CHECK-NEXT:       `-RecordType {{.*}} 'X<ns::S>'
-// CHECK-NEXT:         `-ClassTemplateSpecialization {{.*}} 'X'
+// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'X<ns::S>' sugar X
+// CHECK-NEXT:   |-TemplateArgument using template S
+// CHECK-NEXT:     `-RecordType {{.*}} 'X<ns::S>'
+// CHECK-NEXT:       `-ClassTemplateSpecialization {{.*}} 'X'
 
 // TemplateName in DeducedTemplateSpecializationType.
 S DeducedTemplateSpecializationT(123);
 using C = decltype(DeducedTemplateSpecializationT);
 // CHECK:      DecltypeType {{.*}}
 // CHECK-NEXT:  |-DeclRefExpr {{.*}}
-// CHECK-NEXT:  `-ElaboratedType {{.*}} 'S<int>' sugar
-// CHECK-NEXT:    `-DeducedTemplateSpecializationType {{.*}} 'ns::S<int>' sugar using
+// CHECK-NEXT:  `-DeducedTemplateSpecializationType {{.*}} 'ns::S<int>' sugar using

diff  --git a/clang/test/AST/ast-dump-using.cpp b/clang/test/AST/ast-dump-using.cpp
index d6f971dfa849f..5c98556d84ddb 100644
--- a/clang/test/AST/ast-dump-using.cpp
+++ b/clang/test/AST/ast-dump-using.cpp
@@ -10,8 +10,7 @@ using a::S;
 // CHECK-NEXT: `-RecordType {{.*}} 'a::S'
 typedef S f; // to dump the introduced type
 // CHECK:      TypedefDecl
-// CHECK-NEXT: `-ElaboratedType {{.*}} 'S' sugar
-// CHECK-NEXT:   `-UsingType {{.*}} 'a::S' sugar
-// CHECK-NEXT:     |-UsingShadow {{.*}} 'S'
-// CHECK-NEXT:     `-RecordType {{.*}} 'a::S'
+// CHECK-NEXT: `-UsingType {{.*}} 'a::S' sugar
+// CHECK-NEXT:   |-UsingShadow {{.*}} 'S'
+// CHECK-NEXT:   `-RecordType {{.*}} 'a::S'
 }

diff  --git a/clang/test/AST/coroutine-locals-cleanup-exp-namespace.cpp b/clang/test/AST/coroutine-locals-cleanup-exp-namespace.cpp
index ca5b28275e7f4..3122df9b67320 100644
--- a/clang/test/AST/coroutine-locals-cleanup-exp-namespace.cpp
+++ b/clang/test/AST/coroutine-locals-cleanup-exp-namespace.cpp
@@ -85,8 +85,8 @@ Task bar() {
 // CHECK:           CaseStmt
 // CHECK:             ExprWithCleanups {{.*}} 'void'
 // CHECK-NEXT:          CoawaitExpr
-// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task':'Task' (CXXTemporary {{.*}})
-// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Awaiter':'Task::Awaiter'
+// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task' (CXXTemporary {{.*}})
+// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Task::Awaiter':'Task::Awaiter'
 // CHECK:                 ExprWithCleanups {{.*}} 'bool'
 // CHECK-NEXT:              CXXMemberCallExpr {{.*}} 'bool'
 // CHECK-NEXT:                MemberExpr {{.*}} .await_ready
@@ -98,8 +98,8 @@ Task bar() {
 // CHECK:           CaseStmt
 // CHECK:             ExprWithCleanups {{.*}} 'void'
 // CHECK-NEXT:          CoawaitExpr
-// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task':'Task' (CXXTemporary {{.*}})
-// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Awaiter':'Task::Awaiter'
+// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task' (CXXTemporary {{.*}})
+// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Task::Awaiter':'Task::Awaiter'
 // CHECK:                 ExprWithCleanups {{.*}} 'bool'
 // CHECK-NEXT:              CXXMemberCallExpr {{.*}} 'bool'
 // CHECK-NEXT:                MemberExpr {{.*}} .await_ready

diff  --git a/clang/test/AST/coroutine-locals-cleanup.cpp b/clang/test/AST/coroutine-locals-cleanup.cpp
index 6eb6fc0948cbb..aa04a350e9a9d 100644
--- a/clang/test/AST/coroutine-locals-cleanup.cpp
+++ b/clang/test/AST/coroutine-locals-cleanup.cpp
@@ -85,8 +85,8 @@ Task bar() {
 // CHECK:           CaseStmt
 // CHECK:             ExprWithCleanups {{.*}} 'void'
 // CHECK-NEXT:          CoawaitExpr
-// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task':'Task' (CXXTemporary {{.*}})
-// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Awaiter':'Task::Awaiter'
+// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task' (CXXTemporary {{.*}})
+// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Task::Awaiter':'Task::Awaiter'
 // CHECK:                 ExprWithCleanups {{.*}} 'bool'
 // CHECK-NEXT:              CXXMemberCallExpr {{.*}} 'bool'
 // CHECK-NEXT:                MemberExpr {{.*}} .await_ready
@@ -98,8 +98,8 @@ Task bar() {
 // CHECK:           CaseStmt
 // CHECK:             ExprWithCleanups {{.*}} 'void'
 // CHECK-NEXT:          CoawaitExpr
-// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task':'Task' (CXXTemporary {{.*}})
-// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Awaiter':'Task::Awaiter'
+// CHECK-NEXT:            CXXBindTemporaryExpr {{.*}} 'Task' (CXXTemporary {{.*}})
+// CHECK:                 MaterializeTemporaryExpr {{.*}} 'Task::Awaiter':'Task::Awaiter'
 // CHECK:                 ExprWithCleanups {{.*}} 'bool'
 // CHECK-NEXT:              CXXMemberCallExpr {{.*}} 'bool'
 // CHECK-NEXT:                MemberExpr {{.*}} .await_ready

diff  --git a/clang/test/AST/float16.cpp b/clang/test/AST/float16.cpp
index 9e0d70b9a1c00..508247c08c6a6 100644
--- a/clang/test/AST/float16.cpp
+++ b/clang/test/AST/float16.cpp
@@ -223,8 +223,8 @@ int main(void) {
 //CHECK-NEXT:  |     `-FloatingLiteral {{.*}} 'double' 1.000977e+00
 
   C1 c1(f1l);
-//CHECK:       | `-VarDecl{{.*}} used c1 'C1':'C1' callinit
-//CHECK-NEXT:  |   `-CXXConstructExpr {{.*}} 'C1':'C1' 'void (_Float16)
+//CHECK:       | `-VarDecl{{.*}} used c1 'C1' callinit
+//CHECK-NEXT:  |   `-CXXConstructExpr {{.*}} 'C1' 'void (_Float16)
 //CHECK-NEXT:  |     `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
 //CHECK-NEXT:  |       `-DeclRefExpr {{.*}} '_Float16' lvalue Var 0x{{.*}} 'f1l' '_Float16'
 
@@ -255,13 +255,13 @@ int main(void) {
 //CHECK-NEXT:  |     | | | | | |     `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16'
 //CHECK-NEXT:  |     | | | | | `-CXXMemberCallExpr {{.*}} '_Float16'
 //CHECK-NEXT:  |     | | | | |   |-MemberExpr {{.*}} '<bound member function type>' .func1c {{.*}}
-//CHECK-NEXT:  |     | | | | |   | `-DeclRefExpr {{.*}} 'C1':'C1' lvalue Var {{.*}} 'c1' 'C1':'C1'
+//CHECK-NEXT:  |     | | | | |   | `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
 //CHECK-NEXT:  |     | | | | |   `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
 //CHECK-NEXT:  |     | | | | |     `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16'
 //CHECK-NEXT:  |     | | | | `-CallExpr {{.*}} '_Float16'
 //CHECK-NEXT:  |     | | | |   |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
 //CHECK-NEXT:  |     | | | |   | `-MemberExpr {{.*}} '_Float16 (_Float16)' lvalue .func2c {{.*}}
-//CHECK-NEXT:  |     | | | |   |   `-DeclRefExpr {{.*}} 'C1':'C1' lvalue Var {{.*}} 'c1' 'C1':'C1'
+//CHECK-NEXT:  |     | | | |   |   `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
 //CHECK-NEXT:  |     | | | |   `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
 //CHECK-NEXT:  |     | | | |     `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
 //CHECK-NEXT:  |     | | | `-CallExpr {{.*}} '_Float16':'_Float16'

diff  --git a/clang/test/AST/sourceranges.cpp b/clang/test/AST/sourceranges.cpp
index 665fd0c3295b3..a5dd067ee56d6 100644
--- a/clang/test/AST/sourceranges.cpp
+++ b/clang/test/AST/sourceranges.cpp
@@ -47,9 +47,9 @@ struct D {
 void construct() {
   using namespace foo;
   A a = A(12);
-  // CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'A':'foo::A' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
+  // CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'foo::A' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
   D d = D(12);
-  // CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'D':'D' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
+  // CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'D' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
 }
 
 namespace PR38987 {
@@ -174,7 +174,7 @@ namespace in_class_init {
 
   // CHECK-1Z: CXXRecordDecl {{.*}} struct B definition
   struct B {
-    // CHECK-1Z: FieldDecl {{.*}} a 'A':'in_class_init::A'
+    // CHECK-1Z: FieldDecl {{.*}} a 'in_class_init::A'
     // CHECK-1Z-NEXT: InitListExpr {{.*}} <col:11, col:12
     A a = {};
   };
@@ -192,7 +192,7 @@ namespace delegating_constructor_init {
   // CHECK-1Z: CXXRecordDecl {{.*}} struct C definition
   struct C : B {
     // CHECK-1Z: CXXConstructorDecl {{.*}} C
-    // CHECK-1Z-NEXT: CXXCtorInitializer 'B':'delegating_constructor_init::B'
+    // CHECK-1Z-NEXT: CXXCtorInitializer 'delegating_constructor_init::B'
     // CHECK-1Z-NEXT: CXXConstructExpr {{.*}} <col:11, col:15
     // CHECK-1Z-NEXT: InitListExpr {{.*}} <col:13, col:14
     C() : B({}) {};

diff  --git a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
index 957988bbb95b3..9e4b784705835 100644
--- a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
@@ -466,7 +466,7 @@
    <key>type</key><string>Double free</string>
    <key>check_name</key><string>cplusplus.NewDelete</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f3139fe330e830526fe60a2e19266627</string>
+   <key>issue_hash_content_of_line_in_context</key><string>8bf1a5b9fdae9d86780aa6c4cdce2605</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>test</string>
   <key>issue_hash_function_offset</key><string>3</string>

diff  --git a/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist
index b955fefc247b7..edcaaf2cd44b8 100644
--- a/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist
@@ -935,7 +935,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>988b3441112848444b50d572900b0c5f</string>
+   <key>issue_hash_content_of_line_in_context</key><string>f53792d63dffe6176babc00ee455a3e0</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>get</string>
   <key>issue_hash_function_offset</key><string>2</string>

diff  --git a/clang/test/Analysis/Inputs/expected-plists/method-call-path-notes.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/method-call-path-notes.cpp.plist
index 0a0c884d1ede6..51296dff2f618 100644
--- a/clang/test/Analysis/Inputs/expected-plists/method-call-path-notes.cpp.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/method-call-path-notes.cpp.plist
@@ -538,7 +538,7 @@
    <key>type</key><string>Called C++ object pointer is null</string>
    <key>check_name</key><string>core.CallAndMessage</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f15e85d881c87a35df8a4d30e1db5ed7</string>
+   <key>issue_hash_content_of_line_in_context</key><string>c5bd8e35fb6da070914016804720ae4d</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>test_ic_null</string>
   <key>issue_hash_function_offset</key><string>2</string>
@@ -815,7 +815,7 @@
    <key>type</key><string>Called C++ object pointer is null</string>
    <key>check_name</key><string>core.CallAndMessage</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>8efb5c75089d50fcdc228e06741f4ab5</string>
+   <key>issue_hash_content_of_line_in_context</key><string>e23397f9f2eff1b08593c2b2db137494</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>test_cast</string>
   <key>issue_hash_function_offset</key><string>2</string>

diff  --git a/clang/test/Analysis/analyzer-display-progress.cpp b/clang/test/Analysis/analyzer-display-progress.cpp
index dc8e27a8c3b45..6767b3770abfc 100644
--- a/clang/test/Analysis/analyzer-display-progress.cpp
+++ b/clang/test/Analysis/analyzer-display-progress.cpp
@@ -27,4 +27,4 @@ namespace ns {
 // CHECK: analyzer-display-progress.cpp SomeOtherStruct::f() : {{[0-9]+}}
 // CHECK: analyzer-display-progress.cpp ns::SomeStruct::f(int) : {{[0-9]+}}
 // CHECK: analyzer-display-progress.cpp ns::SomeStruct::f(float, ::SomeStruct) : {{[0-9]+}}
-// CHECK: analyzer-display-progress.cpp ns::SomeStruct::f(float, SomeStruct) : {{[0-9]+}}
+// CHECK: analyzer-display-progress.cpp ns::SomeStruct::f(float, struct ns::SomeStruct) : {{[0-9]+}}

diff  --git a/clang/test/Analysis/auto-obj-dtors-cfg-output.cpp b/clang/test/Analysis/auto-obj-dtors-cfg-output.cpp
index 02ab461459f0f..e5397f5678cb5 100644
--- a/clang/test/Analysis/auto-obj-dtors-cfg-output.cpp
+++ b/clang/test/Analysis/auto-obj-dtors-cfg-output.cpp
@@ -49,16 +49,16 @@ extern const bool UV;
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: a
-// CHECK-NEXT:   4: [B1.3] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:   4: [B1.3] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:   5: const A &b = a;
-// WARNINGS-NEXT:   6: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:   6: A() (CXXConstructExpr, [B1.9], A)
+// WARNINGS-NEXT:   6: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   6: A() (CXXConstructExpr, [B1.9], class A)
 // CHECK-NEXT:   7: [B1.6] (BindTemporary)
-// CHECK-NEXT:   8: [B1.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:   8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:   9: [B1.8]
 // CHECK:       10: const A &c = A();
 // CHECK:       11: [B1.10].~A() (Implicit destructor)
@@ -76,9 +76,9 @@ void test_const_ref() {
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1: A() (CXXConstructExpr, A)
-// CXX98-ANALYZER-NEXT:   1: A() (CXXConstructExpr, [B1.2], A)
-// CXX11-ANALYZER-NEXT:   1: A() (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:   1: A() (CXXConstructExpr, class A)
+// CXX98-ANALYZER-NEXT:   1: A() (CXXConstructExpr, [B1.2], class A)
+// CXX11-ANALYZER-NEXT:   1: A() (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   2: [B1.1] (BindTemporary)
 // CXX98-NEXT:   3: [B1.2].x
 // CXX98-NEXT:   4: [B1.3]
@@ -100,9 +100,9 @@ void test_const_ref_to_field() {
 // CHECK:        [B2 (ENTRY)]
 // CHECK-NEXT:     Succs (1): B1
 // CHECK:        [B1]
-// WARNINGS-NEXT:     1: A() (CXXConstructExpr, A)
-// CXX98-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], A)
-// CXX11-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:     1: A() (CXXConstructExpr, class A)
+// CXX98-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], class A)
+// CXX11-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:     2: [B1.1] (BindTemporary)
 // CXX98-NEXT:     3: A::x
 // CXX98-NEXT:     4: &[B1.3]
@@ -129,23 +129,23 @@ void test_pointer_to_member() {
 // CHECK:        [B2 (ENTRY)]
 // CHECK-NEXT:     Succs (1): B1
 // CHECK:        [B1]
-// WARNINGS-NEXT:     1: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.4], A)
+// WARNINGS-NEXT:     1: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.4], class A)
 // CHECK-NEXT:     2: [B1.1] (BindTemporary)
-// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:     4: [B1.3]
 // CHECK-NEXT:     5: {[B1.4]}
 // CHECK-NEXT:     6: B b = {A()};
-// WARNINGS-NEXT:     7: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:     7: A() (CXXConstructExpr, [B1.10], A)
+// WARNINGS-NEXT:     7: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     7: A() (CXXConstructExpr, [B1.10], class A)
 // CHECK-NEXT:     8: [B1.7] (BindTemporary)
-// CHECK-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    10: [B1.9]
 // CHECK-NEXT:    11: {[B1.10]}
-// WARNINGS-NEXT:    12: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    12: A() (CXXConstructExpr, [B1.15], A)
+// WARNINGS-NEXT:    12: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    12: A() (CXXConstructExpr, [B1.15], class A)
 // CHECK-NEXT:    13: [B1.12] (BindTemporary)
-// CHECK-NEXT:    14: [B1.13] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    14: [B1.13] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    15: [B1.14]
 // CHECK-NEXT:    16: {[B1.15]}
 // CHECK-NEXT:    17: {[B1.10], [B1.15]}
@@ -169,18 +169,18 @@ void test_aggregate_lifetime_extension() {
 // CXX11:        [B2 (ENTRY)]
 // CXX11-NEXT:     Succs (1): B1
 // CXX11:        [B1]
-// CXX11-WARNINGS-NEXT:     1: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], [B1.4], A)
+// CXX11-WARNINGS-NEXT:     1: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], [B1.4], class A)
 // CXX11-NEXT:     2: [B1.1] (BindTemporary)
-// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, const A)
-// CXX11-WARNINGS-NEXT:     6: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:     6: A() (CXXConstructExpr, [B1.7], [B1.9], A)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, const class A)
+// CXX11-WARNINGS-NEXT:     6: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:     6: A() (CXXConstructExpr, [B1.7], [B1.9], class A)
 // CXX11-NEXT:     7: [B1.6] (BindTemporary)
-// CXX11-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:     9: [B1.8]
-// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, const A)
+// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, const class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CXX11-NEXT:    11: {[B1.2], [B1.7]}
 // CXX11-NEXT:    12: [B1.11] (BindTemporary)
@@ -190,35 +190,35 @@ void test_aggregate_lifetime_extension() {
 // CXX11-NEXT:    15: C c = {{[{][{]}}A(), A(){{[}][}]}};
 // CXX11-NEXT:    16: ~A() (Temporary object destructor)
 // CXX11-NEXT:    17: ~A() (Temporary object destructor)
-// CXX11-WARNINGS-NEXT:    18: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:    18: A() (CXXConstructExpr, [B1.19], [B1.21], A)
+// CXX11-WARNINGS-NEXT:    18: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:    18: A() (CXXConstructExpr, [B1.19], [B1.21], class A)
 // CXX11-NEXT:    19: [B1.18] (BindTemporary)
-// CXX11-NEXT:    20: [B1.19] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:    20: [B1.19] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:    21: [B1.20]
-// CXX11-NEXT:    22: [B1.21] (CXXConstructExpr, const A)
-// CXX11-WARNINGS-NEXT:    23: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:    23: A() (CXXConstructExpr, [B1.24], [B1.26], A)
+// CXX11-NEXT:    22: [B1.21] (CXXConstructExpr, const class A)
+// CXX11-WARNINGS-NEXT:    23: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:    23: A() (CXXConstructExpr, [B1.24], [B1.26], class A)
 // CXX11-NEXT:    24: [B1.23] (BindTemporary)
-// CXX11-NEXT:    25: [B1.24] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:    25: [B1.24] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:    26: [B1.25]
-// CXX11-NEXT:    27: [B1.26] (CXXConstructExpr, const A)
+// CXX11-NEXT:    27: [B1.26] (CXXConstructExpr, const class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CXX11-NEXT:    28: {[B1.19], [B1.24]}
 // CXX11-NEXT:    29: [B1.28] (BindTemporary)
 // CXX11-NEXT:    30: [B1.29]
 // CXX11-NEXT:    31: {[B1.30]}
-// CXX11-WARNINGS-NEXT:    32: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:    32: A() (CXXConstructExpr, [B1.33], [B1.35], A)
+// CXX11-WARNINGS-NEXT:    32: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:    32: A() (CXXConstructExpr, [B1.33], [B1.35], class A)
 // CXX11-NEXT:    33: [B1.32] (BindTemporary)
-// CXX11-NEXT:    34: [B1.33] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:    34: [B1.33] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:    35: [B1.34]
-// CXX11-NEXT:    36: [B1.35] (CXXConstructExpr, const A)
-// CXX11-WARNINGS-NEXT:    37: A() (CXXConstructExpr, A)
-// CXX11-ANALYZER-NEXT:    37: A() (CXXConstructExpr, [B1.38], [B1.40], A)
+// CXX11-NEXT:    36: [B1.35] (CXXConstructExpr, const class A)
+// CXX11-WARNINGS-NEXT:    37: A() (CXXConstructExpr, class A)
+// CXX11-ANALYZER-NEXT:    37: A() (CXXConstructExpr, [B1.38], [B1.40], class A)
 // CXX11-NEXT:    38: [B1.37] (BindTemporary)
-// CXX11-NEXT:    39: [B1.38] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:    39: [B1.38] (ImplicitCastExpr, NoOp, const class A)
 // CXX11-NEXT:    40: [B1.39]
-// CXX11-NEXT:    41: [B1.40] (CXXConstructExpr, const A)
+// CXX11-NEXT:    41: [B1.40] (CXXConstructExpr, const class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CXX11-NEXT:    42: {[B1.33], [B1.38]}
 // CXX11-NEXT:    43: [B1.42] (BindTemporary)
@@ -254,24 +254,24 @@ void test_aggregate_array_lifetime_extension() {
 // CHECK:        [B2 (ENTRY)]
 // CHECK-NEXT:     Succs (1): B1
 // CHECK:        [B1]
-// WARNINGS-NEXT:     1: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], [B1.4], A)
+// WARNINGS-NEXT:     1: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     1: A() (CXXConstructExpr, [B1.2], [B1.4], class A)
 // CHECK-NEXT:     2: [B1.1] (BindTemporary)
-// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:     4: [B1.3]
-// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, A)
-// WARNINGS-NEXT:     6: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:     6: A() (CXXConstructExpr, [B1.7], [B1.9], A)
+// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:     6: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     6: A() (CXXConstructExpr, [B1.7], [B1.9], class A)
 // CHECK-NEXT:     7: [B1.6] (BindTemporary)
-// CHECK-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:     9: [B1.8]
-// CHECK-NEXT:    10: [B1.9] (CXXConstructExpr, A)
-// WARNINGS-NEXT:    11: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    11: A() (CXXConstructExpr, [B1.12], [B1.14], A)
+// CHECK-NEXT:    10: [B1.9] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:    11: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    11: A() (CXXConstructExpr, [B1.12], [B1.14], class A)
 // CHECK-NEXT:    12: [B1.11] (BindTemporary)
-// CHECK-NEXT:    13: [B1.12] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    13: [B1.12] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    14: [B1.13]
-// CHECK-NEXT:    15: [B1.14] (CXXConstructExpr, A)
+// CHECK-NEXT:    15: [B1.14] (CXXConstructExpr, class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CHECK-NEXT:    16: {[B1.7], [B1.12]}
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
@@ -280,46 +280,46 @@ void test_aggregate_array_lifetime_extension() {
 // CHECK-NEXT:    19: ~A() (Temporary object destructor)
 // CHECK-NEXT:    20: ~A() (Temporary object destructor)
 // CHECK-NEXT:    21: ~A() (Temporary object destructor)
-// WARNINGS-NEXT:    22: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    22: A() (CXXConstructExpr, [B1.23], [B1.25], A)
+// WARNINGS-NEXT:    22: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    22: A() (CXXConstructExpr, [B1.23], [B1.25], class A)
 // CHECK-NEXT:    23: [B1.22] (BindTemporary)
-// CHECK-NEXT:    24: [B1.23] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    24: [B1.23] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    25: [B1.24]
-// CHECK-NEXT:    26: [B1.25] (CXXConstructExpr, A)
-// WARNINGS-NEXT:    27: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    27: A() (CXXConstructExpr, [B1.28], [B1.30], A)
+// CHECK-NEXT:    26: [B1.25] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:    27: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    27: A() (CXXConstructExpr, [B1.28], [B1.30], class A)
 // CHECK-NEXT:    28: [B1.27] (BindTemporary)
-// CHECK-NEXT:    29: [B1.28] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    29: [B1.28] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    30: [B1.29]
-// CHECK-NEXT:    31: [B1.30] (CXXConstructExpr, A)
-// WARNINGS-NEXT:    32: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    32: A() (CXXConstructExpr, [B1.33], [B1.35], A)
+// CHECK-NEXT:    31: [B1.30] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:    32: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    32: A() (CXXConstructExpr, [B1.33], [B1.35], class A)
 // CHECK-NEXT:    33: [B1.32] (BindTemporary)
-// CHECK-NEXT:    34: [B1.33] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    34: [B1.33] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    35: [B1.34]
-// CHECK-NEXT:    36: [B1.35] (CXXConstructExpr, A)
+// CHECK-NEXT:    36: [B1.35] (CXXConstructExpr, class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CHECK-NEXT:    37: {[B1.28], [B1.33]}
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CHECK-NEXT:    38: {[B1.23], {[B1.28], [B1.33]}}
-// WARNINGS-NEXT:    39: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    39: A() (CXXConstructExpr, [B1.40], [B1.42], A)
+// WARNINGS-NEXT:    39: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    39: A() (CXXConstructExpr, [B1.40], [B1.42], class A)
 // CHECK-NEXT:    40: [B1.39] (BindTemporary)
-// CHECK-NEXT:    41: [B1.40] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    41: [B1.40] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    42: [B1.41]
-// CHECK-NEXT:    43: [B1.42] (CXXConstructExpr, A)
-// WARNINGS-NEXT:    44: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    44: A() (CXXConstructExpr, [B1.45], [B1.47], A)
+// CHECK-NEXT:    43: [B1.42] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:    44: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    44: A() (CXXConstructExpr, [B1.45], [B1.47], class A)
 // CHECK-NEXT:    45: [B1.44] (BindTemporary)
-// CHECK-NEXT:    46: [B1.45] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    46: [B1.45] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    47: [B1.46]
-// CHECK-NEXT:    48: [B1.47] (CXXConstructExpr, A)
-// WARNINGS-NEXT:    49: A() (CXXConstructExpr, A)
-// ANALYZER-NEXT:    49: A() (CXXConstructExpr, [B1.50], [B1.52], A)
+// CHECK-NEXT:    48: [B1.47] (CXXConstructExpr, class A)
+// WARNINGS-NEXT:    49: A() (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    49: A() (CXXConstructExpr, [B1.50], [B1.52], class A)
 // CHECK-NEXT:    50: [B1.49] (BindTemporary)
-// CHECK-NEXT:    51: [B1.50] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    51: [B1.50] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    52: [B1.51]
-// CHECK-NEXT:    53: [B1.52] (CXXConstructExpr, A)
+// CHECK-NEXT:    53: [B1.52] (CXXConstructExpr, class A)
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
 // CHECK-NEXT:    54: {[B1.45], [B1.50]}
 // FIXME: Why does it look as if the initializer list consumes uncopied objects?
@@ -357,11 +357,11 @@ void test_aggregate_with_nontrivial_own_destructor() {
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A[2])
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A[2])
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A[2])
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A[2])
 // CHECK-NEXT:   2: A a[2];
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A[0])
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], A[0])
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A[0])
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], class A[0])
 // CHECK-NEXT:   4: A b[0];
 // CHECK-NEXT:   5: [B1.2].~A[2]() (Implicit destructor)
 // CHECK-NEXT:   Preds (1): B2
@@ -376,19 +376,19 @@ void test_array() {
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A a;
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], A)
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
 // CHECK-NEXT:   4: A c;
-// WARNINGS-NEXT:   5:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   5:  (CXXConstructExpr, [B1.6], A)
+// WARNINGS-NEXT:   5:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   5:  (CXXConstructExpr, [B1.6], class A)
 // CHECK-NEXT:   6: A d;
 // CHECK-NEXT:   7: [B1.6].~A() (Implicit destructor)
 // CHECK-NEXT:   8: [B1.4].~A() (Implicit destructor)
-// WARNINGS-NEXT:   9:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   9:  (CXXConstructExpr, [B1.10], A)
+// WARNINGS-NEXT:   9:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   9:  (CXXConstructExpr, [B1.10], class A)
 // CHECK:       10: A b;
 // CHECK:       11: [B1.10].~A() (Implicit destructor)
 // CHECK:       12: [B1.2].~A() (Implicit destructor)
@@ -407,8 +407,8 @@ void test_scope() {
 // CHECK:      [B4 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B3
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B3.4].~A() (Implicit destructor)
@@ -422,11 +422,11 @@ void test_scope() {
 // CHECK-NEXT:   Preds (1): B3
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A a;
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B3.4], A)
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B3.4], class A)
 // CHECK-NEXT:   4: A b;
 // CHECK-NEXT:   5: UV
 // CHECK-NEXT:   6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -446,8 +446,8 @@ void test_return() {
 // CHECK-NEXT:   Succs (1): B7
 // CHECK:      [B1]
 // CHECK:       l1:
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B6.2].~A() (Implicit destructor)
@@ -455,8 +455,8 @@ void test_return() {
 // CHECK-NEXT:   Preds (2): B2 B3
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A b;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B6.4].~A() (Implicit destructor)
@@ -481,11 +481,11 @@ void test_return() {
 // CHECK-NEXT:   Succs (1): B6
 // CHECK:      [B6]
 // CHECK:       l0:
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B6.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B6.2], class A)
 // CHECK-NEXT:   2: A b;
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B6.4], A)
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B6.4], class A)
 // CHECK-NEXT:   4: A a;
 // CHECK-NEXT:   5: UV
 // CHECK-NEXT:   6: [B6.5] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -493,8 +493,8 @@ void test_return() {
 // CHECK-NEXT:   Preds (2): B7 B5
 // CHECK-NEXT:   Succs (2): B5 B4
 // CHECK:      [B7]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B7.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B7.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   Preds (1): B8
 // CHECK-NEXT:   Succs (1): B6
@@ -521,27 +521,27 @@ void test_goto() {
 // CHECK-NEXT:   Preds (2): B2 B3
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (1): B4
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (1): B4
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B4]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: a
 // CHECK-NEXT:   4: [B4.3] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   5: [B4.4] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   5: [B4.4] (CXXConstructExpr, [B4.6], A)
+// WARNINGS-NEXT:   5: [B4.4] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   5: [B4.4] (CXXConstructExpr, [B4.6], class A)
 // CHECK-NEXT:   6: A b = a;
 // CHECK-NEXT:   7: b
 // CHECK-NEXT:   8: [B4.7] (ImplicitCastExpr, NoOp, const class A)
@@ -565,16 +565,16 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B8
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B8.6].~A() (Implicit destructor)
-// WARNINGS-NEXT:   2:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:   2:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   3: A e;
 // CHECK-NEXT:   4: [B1.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: [B8.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (2): B2 B5
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B4.2].~A() (Implicit destructor)
@@ -588,8 +588,8 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B4
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B4]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -597,8 +597,8 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B8
 // CHECK-NEXT:   Succs (2): B3 B2
 // CHECK:      [B5]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B5.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B7.2].~A() (Implicit destructor)
@@ -612,8 +612,8 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B7
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B7]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B7.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B7.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -621,13 +621,13 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B8
 // CHECK-NEXT:   Succs (2): B6 B5
 // CHECK:      [B8]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B8.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B8.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: a
 // CHECK-NEXT:   4: [B8.3] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   5: [B8.4] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   5: [B8.4] (CXXConstructExpr, [B8.6], A)
+// WARNINGS-NEXT:   5: [B8.4] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   5: [B8.4] (CXXConstructExpr, [B8.6], class A)
 // CHECK-NEXT:   6: A b = a;
 // CHECK-NEXT:   7: b
 // CHECK-NEXT:   8: [B8.7] (ImplicitCastExpr, NoOp, const class A)
@@ -665,8 +665,8 @@ void test_if_jumps() {
 // CHECK-NEXT:   Preds (1): B3
 // CHECK-NEXT:   Succs (1): B4
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B4.4].~A() (Implicit destructor)
@@ -675,8 +675,8 @@ void test_if_jumps() {
 // CHECK:      [B4]
 // CHECK-NEXT:   1: a
 // CHECK-NEXT:   2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   3: [B4.2] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3: [B4.2] (CXXConstructExpr, [B4.4], A)
+// WARNINGS-NEXT:   3: [B4.2] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3: [B4.2] (CXXConstructExpr, [B4.4], class A)
 // CHECK-NEXT:   4: A b = a;
 // CHECK-NEXT:   5: b
 // CHECK-NEXT:   6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
@@ -688,8 +688,8 @@ void test_if_jumps() {
 // CHECK-NEXT:   Preds (2): B2 B5
 // CHECK-NEXT:   Succs (2): B3 B1
 // CHECK:      [B5]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   Preds (1): B6
 // CHECK-NEXT:   Succs (1): B4
@@ -705,8 +705,8 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B11
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B10.4].~A() (Implicit destructor)
-// WARNINGS-NEXT:   2:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:   2:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   3: A e;
 // CHECK-NEXT:   4: [B1.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: [B11.2].~A() (Implicit destructor)
@@ -716,8 +716,8 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (1): B10
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.2].~A() (Implicit destructor)
@@ -755,8 +755,8 @@ void test_while_implicit_scope() {
 // CHECK:        Preds (1): B9
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -766,8 +766,8 @@ void test_while_implicit_scope() {
 // CHECK:      [B10]
 // CHECK-NEXT:   1: a
 // CHECK-NEXT:   2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   3: [B10.2] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3: [B10.2] (CXXConstructExpr, [B10.4], A)
+// WARNINGS-NEXT:   3: [B10.2] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3: [B10.2] (CXXConstructExpr, [B10.4], class A)
 // CHECK-NEXT:   4: A b = a;
 // CHECK-NEXT:   5: b
 // CHECK-NEXT:   6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
@@ -779,8 +779,8 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B2 B11
 // CHECK-NEXT:   Succs (2): B9 B1
 // CHECK:      [B11]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B10
@@ -807,8 +807,8 @@ void test_while_jumps() {
 // CHECK-NEXT:   Preds (1): B2
 // CHECK-NEXT:   Succs (2): B3 B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (2): B3 B4
@@ -826,8 +826,8 @@ void test_do_implicit_scope() {
 // CHECK:      [B12 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B11
 // CHECK:      [B1]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B11.2].~A() (Implicit destructor)
@@ -840,8 +840,8 @@ void test_do_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (2): B10 B1
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.2].~A() (Implicit destructor)
@@ -876,8 +876,8 @@ void test_do_implicit_scope() {
 // CHECK:        Preds (1): B9
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], class A)
 // CHECK-NEXT:   2: A b;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -888,8 +888,8 @@ void test_do_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B2
 // CHECK-NEXT:   Succs (1): B9
 // CHECK:      [B11]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B9
@@ -915,12 +915,12 @@ void test_do_jumps() {
 // CHECK-NEXT:   Preds (2): B3 B2
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: a
 // CHECK-NEXT:   4: [B2.3] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   5: [B2.4] (CXXConstructExpr, A)
+// CHECK-NEXT:   5: [B2.4] (CXXConstructExpr, class A)
 // CHECK-NEXT:   6: A b = a;
 // CHECK-NEXT:   7: b
 // CHECK-NEXT:   8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
@@ -931,8 +931,8 @@ void test_do_jumps() {
 // CHECK-NEXT:   Preds (1): B4
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Succs (1): B1
@@ -948,20 +948,20 @@ void test_switch_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B2
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B2.6].~A() (Implicit destructor)
-// WARNINGS-NEXT:   2:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:   2:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   3: A g;
 // CHECK-NEXT:   4: [B1.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (3): B3 B7 B2
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   3: a
 // CHECK-NEXT:   4: [B2.3] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   5: [B2.4] (CXXConstructExpr, A)
+// CHECK-NEXT:   5: [B2.4] (CXXConstructExpr, class A)
 // CHECK-NEXT:   6: A b = a;
 // CHECK-NEXT:   7: b
 // CHECK-NEXT:   8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
@@ -977,8 +977,8 @@ void test_switch_implicit_scope() {
 // CHECK:        Preds (2): B2 B4
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B4]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B4.2], class A)
 // CHECK-NEXT:   2: A f;
 // CHECK-NEXT:   3: [B4.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B8.2].~A() (Implicit destructor)
@@ -1004,8 +1004,8 @@ void test_switch_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B8]
 // CHECK:       case 0:
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B8.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B8.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B8.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -1040,8 +1040,8 @@ void test_switch_jumps() {
 // CHECK-NEXT:   Preds (1): B3
 // CHECK-NEXT:   Succs (1): B4
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B4.4].~A() (Implicit destructor)
@@ -1050,8 +1050,8 @@ void test_switch_jumps() {
 // CHECK:      [B4]
 // CHECK-NEXT:   1: a
 // CHECK-NEXT:   2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   3: [B4.2] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3: [B4.2] (CXXConstructExpr, [B4.4], A)
+// WARNINGS-NEXT:   3: [B4.2] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3: [B4.2] (CXXConstructExpr, [B4.4], class A)
 // CHECK-NEXT:   4: A b = a;
 // CHECK-NEXT:   5: b
 // CHECK-NEXT:   6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
@@ -1063,8 +1063,8 @@ void test_switch_jumps() {
 // CHECK-NEXT:   Preds (2): B2 B5
 // CHECK-NEXT:   Succs (2): B3 B1
 // CHECK:      [B5]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B5.2], class A)
 // CHECK-NEXT:   2: A a;
 // CHECK-NEXT:   Preds (1): B6
 // CHECK-NEXT:   Succs (1): B4
@@ -1099,8 +1099,8 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   3: *[B3.2]
 // CHECK-NEXT:   4: [B3.3] (ImplicitCastExpr, LValueToRValue, int)
 // CHECK-NEXT:   5: int n
-// WARNINGS-NEXT:   6:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   6:  (CXXConstructExpr, [B3.7], A)
+// WARNINGS-NEXT:   6:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   6:  (CXXConstructExpr, [B3.7], class A)
 // CHECK-NEXT:   7: A c;
 // CHECK-NEXT:   8: [B3.7].~A() (Implicit destructor)
 // CHECK-NEXT:   Preds (1): B1
@@ -1133,8 +1133,8 @@ void test_for_range_implicit_scope() {
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B10.4].~A() (Implicit destructor)
 // CHECK-NEXT:   2: [B11.4].~A() (Implicit destructor)
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], A)
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
 // CHECK-NEXT:   4: A f;
 // CHECK-NEXT:   5: [B1.4].~A() (Implicit destructor)
 // CHECK-NEXT:   6: [B11.2].~A() (Implicit destructor)
@@ -1144,8 +1144,8 @@ void test_for_range_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (1): B10
 // CHECK:      [B3]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A e;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.2].~A() (Implicit destructor)
@@ -1183,8 +1183,8 @@ void test_for_range_implicit_scope() {
 // CHECK:        Preds (1): B9
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B9.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: UV
 // CHECK-NEXT:   4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -1194,8 +1194,8 @@ void test_for_range_implicit_scope() {
 // CHECK:      [B10]
 // CHECK-NEXT:   1: b
 // CHECK-NEXT:   2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
-// WARNINGS-NEXT:   3: [B10.2] (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3: [B10.2] (CXXConstructExpr, [B10.4], A)
+// WARNINGS-NEXT:   3: [B10.2] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3: [B10.2] (CXXConstructExpr, [B10.4], class A)
 // CHECK-NEXT:   4: A c = b;
 // CHECK-NEXT:   5: c
 // CHECK-NEXT:   6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
@@ -1207,11 +1207,11 @@ void test_for_range_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B2 B11
 // CHECK-NEXT:   Succs (2): B9 B1
 // CHECK:      [B11]
-// WARNINGS-NEXT:   1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], A)
+// WARNINGS-NEXT:   1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   1:  (CXXConstructExpr, [B11.2], class A)
 // CHECK-NEXT:   2: A a;
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B11.4], A)
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B11.4], class A)
 // CHECK-NEXT:   4: A b;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B10

diff  --git a/clang/test/Analysis/blocks.mm b/clang/test/Analysis/blocks.mm
index 81db705b6afbc..033be376d552c 100644
--- a/clang/test/Analysis/blocks.mm
+++ b/clang/test/Analysis/blocks.mm
@@ -52,8 +52,8 @@ void testBlockWithCopyExpression(StructWithCopyConstructor s) {
 
 // CHECK: [B1]
 // CHECK-NEXT:   1: s
-// CHECK-NEXT:   2: [B1.1] (ImplicitCastExpr, NoOp, const StructWithCopyConstructor)
-// CHECK-NEXT:   3: [B1.2] (CXXConstructExpr, const StructWithCopyConstructor)
+// CHECK-NEXT:   2: [B1.1] (ImplicitCastExpr, NoOp, const struct StructWithCopyConstructor)
+// CHECK-NEXT:   3: [B1.2] (CXXConstructExpr, const struct StructWithCopyConstructor)
 // CHECK-NEXT:   4: ^{ }
 // CHECK-NEXT:   5: (void)([B1.4]) (CStyleCastExpr, ToVoid, void)
 // CHECK-NEXT:   Preds (1): B2
@@ -76,8 +76,8 @@ void testBlockWithCaptureByReference() {
 
 // CHECK: [B1]
 // CHECK-NEXT:   1: 5
-// WARNINGS-NEXT:   2: [B1.1] (CXXConstructExpr, StructWithCopyConstructor)
-// ANALYZER-NEXT:   2: [B1.1] (CXXConstructExpr, [B1.3], StructWithCopyConstructor)
+// WARNINGS-NEXT:   2: [B1.1] (CXXConstructExpr, struct StructWithCopyConstructor)
+// ANALYZER-NEXT:   2: [B1.1] (CXXConstructExpr, [B1.3], struct StructWithCopyConstructor)
 // CHECK-NEXT:   3: StructWithCopyConstructor s(5) __attribute__((blocks("byref")));
 // CHECK-NEXT:   4: ^{ }
 // CHECK-NEXT:   5: (void)([B1.4]) (CStyleCastExpr, ToVoid, void)

diff  --git a/clang/test/Analysis/bug_hash_test.cpp b/clang/test/Analysis/bug_hash_test.cpp
index 7b812a76558dd..f397d181e6656 100644
--- a/clang/test/Analysis/bug_hash_test.cpp
+++ b/clang/test/Analysis/bug_hash_test.cpp
@@ -43,7 +43,7 @@ class X {
   void OutOfLine();
 
   X &operator=(int) {
-    clang_analyzer_hashDump(5); // expected-warning {{debug.ExprInspection$X & AA::X::operator=(int)$29$clang_analyzer_hashDump(5);$Category}}
+    clang_analyzer_hashDump(5); // expected-warning {{debug.ExprInspection$class AA::X & AA::X::operator=(int)$29$clang_analyzer_hashDump(5);$Category}}
     return *this;
   }
 

diff  --git a/clang/test/Analysis/cast-value-notes.cpp b/clang/test/Analysis/cast-value-notes.cpp
index 7ee224dc6e5d8..b3d32552e6ec8 100644
--- a/clang/test/Analysis/cast-value-notes.cpp
+++ b/clang/test/Analysis/cast-value-notes.cpp
@@ -86,7 +86,7 @@ void evalReferences_addrspace(const Shape &S) {
   const auto &C = dyn_cast<DEVICE Circle>(S);
   clang_analyzer_printState();
   // X86-CHECK-SUPPRESSED: "dynamic_types": [
-  // X86-CHECK-SUPPRESSED-NEXT: { "region": "SymRegion{reg_$0<const Shape & S>}", "dyn_type": "const __attribute__((address_space(3))) class clang::Circle &", "sub_classable": true }
+  // X86-CHECK-SUPPRESSED-NEXT: { "region": "SymRegion{reg_$0<const struct clang::Shape & S>}", "dyn_type": "const __attribute__((address_space(3))) class clang::Circle &", "sub_classable": true }
   (void)C;
 }
 #endif
@@ -98,7 +98,7 @@ void evalReferences_addrspace(const Shape &S) {
   // expected-warning at -3 {{Dereference of null pointer}}
   clang_analyzer_printState();
   // X86-CHECK: "dynamic_types": [
-  // X86-CHECK-NEXT: { "region": "SymRegion{reg_$0<const Shape & S>}", "dyn_type": "const __attribute__((address_space(3))) class clang::Circle &", "sub_classable": true }
+  // X86-CHECK-NEXT: { "region": "SymRegion{reg_$0<const struct clang::Shape & S>}", "dyn_type": "const __attribute__((address_space(3))) class clang::Circle &", "sub_classable": true }
   (void)C;
 }
 #endif

diff  --git a/clang/test/Analysis/cast-value-state-dump.cpp b/clang/test/Analysis/cast-value-state-dump.cpp
index 07fd7abd848ab..c9d85f0b4460f 100644
--- a/clang/test/Analysis/cast-value-state-dump.cpp
+++ b/clang/test/Analysis/cast-value-state-dump.cpp
@@ -31,10 +31,10 @@ void evalNonNullParamNonNullReturn(const Shape *S) {
   clang_analyzer_printState();
 
   // CHECK:      "dynamic_types": [
-  // CHECK-NEXT:   { "region": "SymRegion{reg_$0<const Shape * S>}", "dyn_type": "const class clang::Circle", "sub_classable": true }
+  // CHECK-NEXT:   { "region": "SymRegion{reg_$0<const struct clang::Shape * S>}", "dyn_type": "const class clang::Circle", "sub_classable": true }
   // CHECK-NEXT: ],
   // CHECK-NEXT: "dynamic_casts": [
-  // CHECK:        { "region": "SymRegion{reg_$0<const Shape * S>}", "casts": [
+  // CHECK:        { "region": "SymRegion{reg_$0<const struct clang::Shape * S>}", "casts": [
   // CHECK-NEXT:     { "from": "struct clang::Shape", "to": "class clang::Circle", "kind": "success" },
   // CHECK-NEXT:     { "from": "struct clang::Shape", "to": "class clang::Square", "kind": "fail" }
   // CHECK-NEXT:   ] }

diff  --git a/clang/test/Analysis/cfg-rich-constructors.cpp b/clang/test/Analysis/cfg-rich-constructors.cpp
index aea983f1f74da..620fd9a9f8a48 100644
--- a/clang/test/Analysis/cfg-rich-constructors.cpp
+++ b/clang/test/Analysis/cfg-rich-constructors.cpp
@@ -24,7 +24,7 @@ namespace operator_new {
 
 // CHECK: void operatorNewWithConstructor()
 // CHECK:          1: CFGNewAllocator(C *)
-// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], C)
+// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], class C)
 // CHECK-NEXT:     3: new C([B1.2])
 void operatorNewWithConstructor() {
   new C();
@@ -33,9 +33,9 @@ void operatorNewWithConstructor() {
 // CHECK: void operatorNewWithConstructorWithOperatorNewWithContstructor()
 // CHECK:          1: CFGNewAllocator(C *)
 // CHECK-NEXT:     2: CFGNewAllocator(C *)
-// CHECK-NEXT:     3:  (CXXConstructExpr, [B1.4], C)
+// CHECK-NEXT:     3:  (CXXConstructExpr, [B1.4], class C)
 // CHECK-NEXT:     4: new C([B1.3])
-// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], C)
+// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], class C)
 // CHECK-NEXT:     6: new C([B1.5])
 void operatorNewWithConstructorWithOperatorNewWithContstructor() {
 	new C(new C());
@@ -43,11 +43,11 @@ void operatorNewWithConstructorWithOperatorNewWithContstructor() {
 
 // CHECK: void operatorPlacementNewWithConstructorWithinPlacementArgument()
 // CHECK:          1: CFGNewAllocator(C *)
-// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], C)
+// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], class C)
 // CHECK-NEXT:     3: new C([B1.2])
 // CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, BitCast, void *)
 // CHECK-NEXT:     5: CFGNewAllocator(C *)
-// CHECK-NEXT:     6:  (CXXConstructExpr, [B1.7], C)
+// CHECK-NEXT:     6:  (CXXConstructExpr, [B1.7], class C)
 // CHECK-NEXT:     7: new ([B1.4]) C([B1.6])
 void operatorPlacementNewWithConstructorWithinPlacementArgument() {
 	new (new C()) C();
@@ -58,14 +58,14 @@ void operatorPlacementNewWithConstructorWithinPlacementArgument() {
 namespace decl_stmt {
 
 // CHECK: void simpleVariable()
-// CHECK:          1:  (CXXConstructExpr, [B1.2], C)
+// CHECK:          1:  (CXXConstructExpr, [B1.2], class C)
 // CHECK-NEXT:     2: C c;
 void simpleVariable() {
   C c;
 }
 
 // CHECK: void simpleVariableWithBraces()
-// CHECK:          1: {} (CXXConstructExpr, [B1.2], C)
+// CHECK:          1: {} (CXXConstructExpr, [B1.2], class C)
 // CHECK-NEXT:     2: C c{};
 void simpleVariableWithBraces() {
   C c{};
@@ -73,8 +73,8 @@ void simpleVariableWithBraces() {
 
 // CHECK: void simpleVariableWithConstructorArgument()
 // CHECK:          1: 0
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, C *)
-// CHECK-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CHECK-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], class C)
 // CHECK-NEXT:     4: C c(0);
 void simpleVariableWithConstructorArgument() {
   C c(0);
@@ -82,9 +82,9 @@ void simpleVariableWithConstructorArgument() {
 
 // CHECK: void simpleVariableWithOperatorNewInConstructorArgument()
 // CHECK:          1: CFGNewAllocator(C *)
-// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], C)
+// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], class C)
 // CHECK-NEXT:     3: new C([B1.2])
-// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.5], C)
+// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.5], class C)
 // CHECK-NEXT:     5: C c(new C());
 void simpleVariableWithOperatorNewInConstructorArgument() {
   C c(new C());
@@ -92,9 +92,9 @@ void simpleVariableWithOperatorNewInConstructorArgument() {
 
 // CHECK: void simpleVariableWithOperatorNewInBraces()
 // CHECK:          1: CFGNewAllocator(C *)
-// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], C)
+// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], class C)
 // CHECK-NEXT:     3: new C([B1.2])
-// CHECK-NEXT:     4: {[B1.3]} (CXXConstructExpr, [B1.5], C)
+// CHECK-NEXT:     4: {[B1.3]} (CXXConstructExpr, [B1.5], class C)
 // CHECK-NEXT:     5: C c{new C()};
 void simpleVariableWithOperatorNewInBraces() {
   C c{new C()};
@@ -102,11 +102,11 @@ void simpleVariableWithOperatorNewInBraces() {
 
 // CHECK: void simpleVariableInitializedByValue()
 // CHECK:          1: C::get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.5])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], C)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], class C)
 // CXX11-NEXT:     6: C c = C::get();
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX17-NEXT:     4: C c = C::get();
@@ -121,30 +121,30 @@ void simpleVariableInitializedByValue() {
 // CHECK:        [B1]
 // CXX11-NEXT:     1: [B4.2] ? [B2.5] : [B3.6]
 // CXX11-NEXT:     2: [B1.1]
-// CXX11-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], C)
+// CXX11-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], class C)
 // CXX11-NEXT:     4: C c = coin ? C::get() : C(0);
 // CXX17-NEXT:     1: [B4.2] ? [B2.3] : [B3.4]
 // CXX17-NEXT:     2: C c = coin ? C::get() : C(0);
 // CHECK:        [B2]
 // CHECK-NEXT:     1: C::get
-// CHECK-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B2.4], [B2.5])
 // CXX11-NOELIDE-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B2.4])
 // CXX11-NEXT:     4: [B2.3]
-// CXX11-ELIDE-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.2], [B1.3], C)
-// CXX11-NOELIDE-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.2], C)
+// CXX11-ELIDE-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.2], [B1.3], class C)
+// CXX11-NOELIDE-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.2], class C)
 // CXX17-NEXT:     3: [B2.2]()
 // CHECK:        [B3]
 // CHECK-NEXT:     1: 0
-// CHECK-NEXT:     2: [B3.1] (ImplicitCastExpr, NullToPointer, C *)
-// CXX11-ELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], [B3.6], C)
-// CXX11-NOELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], C)
-// CXX11-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CHECK-NEXT:     2: [B3.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CXX11-ELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], [B3.6], class C)
+// CXX11-NOELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], class C)
+// CXX11-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CXX11-NEXT:     5: [B3.4]
-// CXX11-ELIDE-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.2], [B1.3], C)
-// CXX11-NOELIDE-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.2], C)
-// CXX17-NEXT:     3: [B3.2] (CXXConstructExpr, C)
-// CXX17-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CXX11-ELIDE-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.2], [B1.3], class C)
+// CXX11-NOELIDE-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.2], class C)
+// CXX17-NEXT:     3: [B3.2] (CXXConstructExpr, class C)
+// CXX17-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CHECK:        [B4]
 // CHECK-NEXT:     1: coin
 // CHECK-NEXT:     2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -155,13 +155,13 @@ void simpleVariableWithTernaryOperator(bool coin) {
 
 // CHECK: void simpleVariableWithElidableCopy()
 // CHECK:          1: 0
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, C *)
-// CXX11-ELIDE-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], [B1.6], C)
-// CXX11-NOELIDE-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], C)
-// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], C)
-// CHECK-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CXX11-ELIDE-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], [B1.6], class C)
+// CXX11-NOELIDE-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], class C)
+// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], class C)
+// CHECK-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CXX11-NEXT:     5: [B1.4]
-// CXX11-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.7], C)
+// CXX11-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.7], class C)
 // CXX11-NEXT:     7: C c = C(0);
 // CXX17-NEXT:     5: C c = C(0);
 void simpleVariableWithElidableCopy() {
@@ -170,8 +170,8 @@ void simpleVariableWithElidableCopy() {
 
 // CHECK: void referenceVariableWithConstructor()
 // CHECK:          1: 0
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, C *)
-// CHECK-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], const C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CHECK-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], const class C)
 // CHECK-NEXT:     4: [B1.3]
 // CHECK-NEXT:     5: const C &c(0);
 void referenceVariableWithConstructor() {
@@ -179,8 +179,8 @@ void referenceVariableWithConstructor() {
 }
 
 // CHECK: void referenceVariableWithInitializer()
-// CHECK:          1: C() (CXXConstructExpr, [B1.3], C)
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const C)
+// CHECK:          1: C() (CXXConstructExpr, [B1.3], class C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class C)
 // CHECK-NEXT:     3: [B1.2]
 // CHECK-NEXT:     4: const C &c = C();
 void referenceVariableWithInitializer() {
@@ -191,27 +191,27 @@ void referenceVariableWithInitializer() {
 // CHECK:        [B1]
 // CXX11-NEXT:     1: [B4.2] ? [B2.5] : [B3.6]
 // CXX17-NEXT:     1: [B4.2] ? [B2.3] : [B3.4]
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class C)
 // CHECK-NEXT:     3: [B1.2]
 // CHECK-NEXT:     4: const C &c = coin ? C::get() : C(0);
 // CHECK:        [B2]
 // CHECK-NEXT:     1: C::get
-// CHECK-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B2.4], [B2.5])
 // CXX11-NOELIDE-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B2.4])
 // CXX11-NEXT:     4: [B2.3]
-// CXX11-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.3], C)
+// CXX11-NEXT:     5: [B2.4] (CXXConstructExpr, [B1.3], class C)
 // CXX17-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B1.3])
 // CHECK:        [B3]
 // CHECK-NEXT:     1: 0
-// CHECK-NEXT:     2: [B3.1] (ImplicitCastExpr, NullToPointer, C *)
-// CXX11-ELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], [B3.6], C)
-// CXX11-NOELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], C)
-// CXX11-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CHECK-NEXT:     2: [B3.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CXX11-ELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], [B3.6], class C)
+// CXX11-NOELIDE-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.5], class C)
+// CXX11-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CXX11-NEXT:     5: [B3.4]
-// CXX11-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.3], C)
-// CXX17-NEXT:     3: [B3.2] (CXXConstructExpr, [B1.3], C)
-// CXX17-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CXX11-NEXT:     6: [B3.5] (CXXConstructExpr, [B1.3], class C)
+// CXX17-NEXT:     3: [B3.2] (CXXConstructExpr, [B1.3], class C)
+// CXX17-NEXT:     4: C([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CHECK:        [B4]
 // CHECK-NEXT:     1: coin
 // CHECK-NEXT:     2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -230,12 +230,12 @@ class D: public C {
 public:
 
 // CHECK: D()
-// CHECK:          1:  (CXXConstructExpr, C() (Base initializer), C)
+// CHECK:          1:  (CXXConstructExpr, C() (Base initializer), class C)
 // CHECK-NEXT:     2: C([B1.1]) (Base initializer)
 // CHECK-NEXT:     3: CFGNewAllocator(C *)
-// CHECK-NEXT:     4:  (CXXConstructExpr, [B1.5], C)
+// CHECK-NEXT:     4:  (CXXConstructExpr, [B1.5], class C)
 // CHECK-NEXT:     5: new C([B1.4])
-// CHECK-NEXT:     6: [B1.5] (CXXConstructExpr, c1([B1.5]) (Member initializer), C)
+// CHECK-NEXT:     6: [B1.5] (CXXConstructExpr, c1([B1.5]) (Member initializer), class C)
 // CHECK-NEXT:     7: c1([B1.6]) (Member initializer)
   D(): C(), c1(new C()) {}
 
@@ -248,24 +248,24 @@ class D: public C {
 // detected the test would not fail, because FileCheck allows partial matches.
 // CHECK: D(double)
 // CHECK:          1: C::get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CHECK-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CHECK-NEXT:     4: [B1.3]
-// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, C([B1.4]) (Base initializer), C)
+// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, C([B1.4]) (Base initializer), class C)
 // CHECK-NEXT:     6: C([B1.5]) (Base initializer)
 // CHECK-NEXT:     7: CFGNewAllocator(C *)
 // CHECK-NEXT:     8: C::get
-// CHECK-NEXT:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:    10: [B1.9]() (CXXRecordTypedCall, [B1.11], [B1.12])
 // CXX11-NOELIDE-NEXT:    10: [B1.9]() (CXXRecordTypedCall, [B1.11])
 // CXX11-NEXT:    11: [B1.10]
-// CXX11-NEXT:    12: [B1.11] (CXXConstructExpr, [B1.13], C)
+// CXX11-NEXT:    12: [B1.11] (CXXConstructExpr, [B1.13], class C)
 // CXX11-NEXT:    13: new C([B1.12])
-// CXX11-NEXT:    14: [B1.13] (CXXConstructExpr, c1([B1.13]) (Member initializer), C)
+// CXX11-NEXT:    14: [B1.13] (CXXConstructExpr, c1([B1.13]) (Member initializer), class C)
 // CXX11-NEXT:    15: c1([B1.14]) (Member initializer)
 // CXX17-NEXT:    10: [B1.9]()
 // CXX17-NEXT:    11: new C([B1.10])
-// CXX17-NEXT:    12: [B1.11] (CXXConstructExpr, c1([B1.11]) (Member initializer), C)
+// CXX17-NEXT:    12: [B1.11] (CXXConstructExpr, c1([B1.11]) (Member initializer), class C)
 // CXX17-NEXT:    13: c1([B1.12]) (Member initializer)
   D(double): C(C::get()), c1(new C(C::get())) {}
 };
@@ -284,19 +284,19 @@ class F {
 // FIXME: There should be no temporary destructor in C++17.
 // CHECK: F()
 // CHECK:          1: E::get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, E (*)(
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class ctor_initializers::E (*)(
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.6], [B1.7])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.6])
 // CXX11-NEXT:     4: [B1.3] (BindTemporary)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const E)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class ctor_initializers::E)
 // CXX11-NEXT:     6: [B1.5]
-// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, e([B1.6]) (Member initializer), E)
+// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, e([B1.6]) (Member initializer), class ctor_initializers
 // CXX11-NEXT:     8: e([B1.7]) (Member initializer)
-// CXX11-NEXT:     9: ~E() (Temporary object destructor)
+// CXX11-NEXT:     9: ~ctor_initializers::E() (Temporary object destructor)
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, e([B1.4]) (Member initializer), [B1.4])
 // CXX17-NEXT:     4: [B1.3] (BindTemporary)
 // CXX17-NEXT:     5: e([B1.4]) (Member initializer)
-// CXX17-NEXT:     6: ~E() (Temporary object destructor)
+// CXX17-NEXT:     6: ~ctor_initializers::E() (Temporary object destructor)
   F(): e(E::get()) {}
 };
 } // end namespace ctor_initializers
@@ -304,11 +304,11 @@ class F {
 namespace return_stmt_without_dtor {
 
 // CHECK: C returnVariable()
-// CHECK:          1:  (CXXConstructExpr, [B1.2], C)
+// CHECK:          1:  (CXXConstructExpr, [B1.2], class C)
 // CHECK-NEXT:     2: C c;
 // CHECK-NEXT:     3: c
-// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, C)
-// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], C)
+// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, class C)
+// CHECK-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], class C)
 // CHECK-NEXT:     6: return [B1.5];
 C returnVariable() {
   C c;
@@ -316,7 +316,7 @@ C returnVariable() {
 }
 
 // CHECK: C returnEmptyBraces()
-// CHECK:          1: {} (CXXConstructExpr, [B1.2], C)
+// CHECK:          1: {} (CXXConstructExpr, [B1.2], class C)
 // CHECK-NEXT:     2: return [B1.1];
 C returnEmptyBraces() {
   return {};
@@ -324,9 +324,9 @@ C returnEmptyBraces() {
 
 // CHECK: C returnBracesWithOperatorNew()
 // CHECK:          1: CFGNewAllocator(C *)
-// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], C)
+// CHECK-NEXT:     2:  (CXXConstructExpr, [B1.3], class C)
 // CHECK-NEXT:     3: new C([B1.2])
-// CHECK-NEXT:     4: {[B1.3]} (CXXConstructExpr, [B1.5], C)
+// CHECK-NEXT:     4: {[B1.3]} (CXXConstructExpr, [B1.5], class C)
 // CHECK-NEXT:     5: return [B1.4];
 C returnBracesWithOperatorNew() {
   return {new C()};
@@ -335,19 +335,19 @@ C returnBracesWithOperatorNew() {
 // CHECK: C returnBracesWithMultipleItems()
 // CHECK:          1: 123
 // CHECK-NEXT:     2: 456
-// CHECK-NEXT:     3: {[B1.1], [B1.2]} (CXXConstructExpr, [B1.4], C)
+// CHECK-NEXT:     3: {[B1.1], [B1.2]} (CXXConstructExpr, [B1.4], class C)
 // CHECK-NEXT:     4: return [B1.3];
 C returnBracesWithMultipleItems() {
   return {123, 456};
 }
 
 // CHECK: C returnTemporary()
-// CXX11-ELIDE:    1: C() (CXXConstructExpr, [B1.2], [B1.3], C)
-// CXX11-NOELIDE:  1: C() (CXXConstructExpr, [B1.2], C)
+// CXX11-ELIDE:    1: C() (CXXConstructExpr, [B1.2], [B1.3], class C)
+// CXX11-NOELIDE:  1: C() (CXXConstructExpr, [B1.2], class C)
 // CXX11-NEXT:     2: [B1.1]
-// CXX11-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], C)
+// CXX11-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.4], class C)
 // CXX11-NEXT:     4: return [B1.3];
-// CXX17:          1: C() (CXXConstructExpr, [B1.2], C)
+// CXX17:          1: C() (CXXConstructExpr, [B1.2], class C)
 // CXX17-NEXT:     2: return [B1.1];
 C returnTemporary() {
   return C();
@@ -355,13 +355,13 @@ C returnTemporary() {
 
 // CHECK: C returnTemporaryWithArgument()
 // CHECK:          1: nullptr
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, C *)
-// CXX11-ELIDE-NEXT: 3: [B1.2] (CXXConstructExpr, [B1.5], [B1.6], C)
-// CXX11-NOELIDE-NEXT: 3: [B1.2] (CXXConstructExpr, [B1.5], C)
-// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], C)
-// CHECK-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NullToPointer, class C *)
+// CXX11-ELIDE-NEXT: 3: [B1.2] (CXXConstructExpr, [B1.5], [B1.6], class C)
+// CXX11-NOELIDE-NEXT: 3: [B1.2] (CXXConstructExpr, [B1.5], class C)
+// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], class C)
+// CHECK-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CXX11-NEXT:     5: [B1.4]
-// CXX11-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.7], C)
+// CXX11-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.7], class C)
 // CXX11-NEXT:     7: return [B1.6];
 // CXX17-NEXT:     5: return [B1.4];
 
@@ -371,11 +371,11 @@ C returnTemporaryWithArgument() {
 
 // CHECK: C returnTemporaryConstructedByFunction()
 // CHECK:          1: C::get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.5])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], C)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], class C)
 // CXX11-NEXT:     6: return [B1.5];
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX17-NEXT:     4: return [B1.3];
@@ -385,18 +385,18 @@ C returnTemporaryConstructedByFunction() {
 
 // CHECK: C returnChainOfCopies()
 // CHECK:          1: C::get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.5])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-ELIDE-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], [B1.8], C)
-// CXX11-NOELIDE-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], C)
-// CXX11-NEXT:     6: C([B1.5]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CXX11-ELIDE-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], [B1.8], class C)
+// CXX11-NOELIDE-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], class C)
+// CXX11-NEXT:     6: C([B1.5]) (CXXFunctionalCastExpr, ConstructorConversion, class C)
 // CXX11-NEXT:     7: [B1.6]
-// CXX11-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.9], C)
+// CXX11-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.9], class C)
 // CXX11-NEXT:     9: return [B1.8];
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.5])
-// CXX17-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, NoOp, C)
+// CXX17-NEXT:     4: C([B1.3]) (CXXFunctionalCastExpr, NoOp, class C)
 // CXX17-NEXT:     5: return [B1.4];
 C returnChainOfCopies() {
   return C(C::get());
@@ -412,16 +412,16 @@ class D {
   ~D();
 };
 
-// CHECK:  D returnTemporary()
-// CXX11-ELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], D)
-// CXX11-NOELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], D)
+// CHECK:  return_stmt_with_dtor::D returnTemporary()
+// CXX11-ELIDE:          1: return_stmt_with_dtor::D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class return_stmt_with_dtor::D)
+// CXX11-NOELIDE:          1: return_stmt_with_dtor::D() (CXXConstructExpr, [B1.2], [B1.4], class return_stmt_with_dtor::D)
 // CXX11-NEXT:     2: [B1.1] (BindTemporary)
-// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class return_stmt_with_dtor::D)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], D)
-// CXX11-NEXT:     6: ~D() (Temporary object destructor)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.7], class return_stmt_with_dtor::D)
+// CXX11-NEXT:     6: ~return_stmt_with_dtor::D() (Temporary object destructor)
 // CXX11-NEXT:     7: return [B1.5];
-// CXX17:          1: D() (CXXConstructExpr, [B1.3], [B1.2], D)
+// CXX17:          1: return_stmt_with_dtor::D() (CXXConstructExpr, [B1.3], [B1.2], class return_stmt_w
 // CXX17-NEXT:     2: [B1.1] (BindTemporary)
 // CXX17-NEXT:     3: return [B1.2];
 D returnTemporary() {
@@ -430,19 +430,19 @@ D returnTemporary() {
 
 // CHECK: void returnByValueIntoVariable()
 // CHECK:          1: returnTemporary
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, D (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class return_stmt_with_dtor::D (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.6], [B1.7])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.6])
 // CXX11-NEXT:     4: [B1.3] (BindTemporary)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class return_stmt_with_dtor::D)
 // CXX11-NEXT:     6: [B1.5]
-// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], D)
-// CXX11-NEXT:     8: D d = returnTemporary();
-// CXX11-NEXT:     9: ~D() (Temporary object destructor)
-// CXX11-NEXT:    10: [B1.8].~D() (Implicit destructor)
+// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], class return_stmt_with_dtor::D)
+// CXX11-NEXT:     8: return_stmt_with_dtor::D d = returnTemporary();
+// CXX11-NEXT:     9: ~return_stmt_with_dtor::D() (Temporary object destructor)
+// CXX11-NEXT:    10: [B1.8].~return_stmt_with_dtor::D() (Implicit destructor)
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.5], [B1.4])
 // CXX17-NEXT:     4: [B1.3] (BindTemporary)
-// CXX17-NEXT:     5: D d = returnTemporary();
+// CXX17-NEXT:     5: return_stmt_with_dtor::D d = returnTemporary();
 void returnByValueIntoVariable() {
   D d = returnTemporary();
 }
@@ -454,13 +454,13 @@ namespace temporary_object_expr_without_dtors {
 // TODO: Should provide construction context for the constructor,
 // even if there is no specific trigger statement here.
 // CHECK: void simpleTemporary()
-// CHECK:          1: C() (CXXConstructExpr, C)
+// CHECK:          1: C() (CXXConstructExpr, class C)
 void simpleTemporary() {
   C();
 }
 
 // CHECK: void temporaryInCondition()
-// CHECK:          1: C() (CXXConstructExpr, [B2.2], C)
+// CHECK:          1: C() (CXXConstructExpr, [B2.2], class C)
 // CHECK-NEXT:     2: [B2.1]
 // CHECK-NEXT:     3: [B2.2] (ImplicitCastExpr, NoOp, const class C)
 // CHECK-NEXT:     4: [B2.3].operator bool
@@ -472,10 +472,10 @@ void temporaryInCondition() {
 }
 
 // CHECK: void temporaryInConditionVariable()
-// CXX11-ELIDE:    1: C() (CXXConstructExpr, [B2.2], [B2.3], C)
-// CXX11-NOELIDE:  1: C() (CXXConstructExpr, [B2.2], C)
+// CXX11-ELIDE:    1: C() (CXXConstructExpr, [B2.2], [B2.3], class C)
+// CXX11-NOELIDE:  1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX11-NEXT:     2: [B2.1]
-// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], C)
+// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], class C)
 // CXX11-NEXT:     4: C c = C();
 // CXX11-NEXT:     5: c
 // CXX11-NEXT:     6: [B2.5] (ImplicitCastExpr, NoOp, const class C)
@@ -483,7 +483,7 @@ void temporaryInCondition() {
 // CXX11-NEXT:     8: [B2.6]
 // CXX11-NEXT:     9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX11-NEXT:     T: if [B2.9]
-// CXX17:          1: C() (CXXConstructExpr, [B2.2], C)
+// CXX17:          1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX17-NEXT:     2: C c = C();
 // CXX17-NEXT:     3: c
 // CXX17-NEXT:     4: [B2.3] (ImplicitCastExpr, NoOp, const class C)
@@ -498,10 +498,10 @@ void temporaryInConditionVariable() {
 
 // CHECK: void temporaryInForLoopConditionVariable()
 // CHECK:        [B2]
-// CXX11-ELIDE-NEXT:     1: C() (CXXConstructExpr, [B2.2], [B2.3], C)
-// CXX11-NOELIDE-NEXT:     1: C() (CXXConstructExpr, [B2.2], C)
+// CXX11-ELIDE-NEXT:     1: C() (CXXConstructExpr, [B2.2], [B2.3], class C)
+// CXX11-NOELIDE-NEXT:     1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX11-NEXT:     2: [B2.1]
-// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], C)
+// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], class C)
 // CXX11-NEXT:     4: C c2 = C();
 // CXX11-NEXT:     5: c2
 // CXX11-NEXT:     6: [B2.5] (ImplicitCastExpr, NoOp, const class C)
@@ -509,7 +509,7 @@ void temporaryInConditionVariable() {
 // CXX11-NEXT:     8: [B2.6]
 // CXX11-NEXT:     9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX11-NEXT:     T: for (...; [B2.9]; )
-// CXX17-NEXT:     1: C() (CXXConstructExpr, [B2.2], C)
+// CXX17-NEXT:     1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX17-NEXT:     2: C c2 = C();
 // CXX17-NEXT:     3: c2
 // CXX17-NEXT:     4: [B2.3] (ImplicitCastExpr, NoOp, const class C)
@@ -518,12 +518,12 @@ void temporaryInConditionVariable() {
 // CXX17-NEXT:     7: [B2.6] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX17-NEXT:     T: for (...; [B2.7]; )
 // CHECK:        [B3]
-// CXX11-ELIDE-NEXT:     1: C() (CXXConstructExpr, [B3.2], [B3.3], C)
-// CXX11-NOELIDE-NEXT:     1: C() (CXXConstructExpr, [B3.2], C)
+// CXX11-ELIDE-NEXT:     1: C() (CXXConstructExpr, [B3.2], [B3.3], class C)
+// CXX11-NOELIDE-NEXT:     1: C() (CXXConstructExpr, [B3.2], class C)
 // CXX11-NEXT:     2: [B3.1]
-// CXX11-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.4], C)
+// CXX11-NEXT:     3: [B3.2] (CXXConstructExpr, [B3.4], class C)
 // CXX11-NEXT:     4: C c1 = C();
-// CXX17-NEXT:     1: C() (CXXConstructExpr, [B3.2], C)
+// CXX17-NEXT:     1: C() (CXXConstructExpr, [B3.2], class C)
 // CXX17-NEXT:     2: C c1 = C();
 void temporaryInForLoopConditionVariable() {
   for (C c1 = C(); C c2 = C(); );
@@ -531,10 +531,10 @@ void temporaryInForLoopConditionVariable() {
 
 
 // CHECK: void temporaryInWhileLoopConditionVariable()
-// CXX11-ELIDE:          1: C() (CXXConstructExpr, [B2.2], [B2.3], C)
-// CXX11-NOELIDE:          1: C() (CXXConstructExpr, [B2.2], C)
+// CXX11-ELIDE:          1: C() (CXXConstructExpr, [B2.2], [B2.3], class C)
+// CXX11-NOELIDE:          1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX11-NEXT:     2: [B2.1]
-// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], C)
+// CXX11-NEXT:     3: [B2.2] (CXXConstructExpr, [B2.4], class C)
 // CXX11-NEXT:     4: C c = C();
 // CXX11-NEXT:     5: c
 // CXX11-NEXT:     6: [B2.5] (ImplicitCastExpr, NoOp, const class C)
@@ -542,7 +542,7 @@ void temporaryInForLoopConditionVariable() {
 // CXX11-NEXT:     8: [B2.6]
 // CXX11-NEXT:     9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX11-NEXT:     T: while [B2.9]
-// CXX17:          1: C() (CXXConstructExpr, [B2.2], C)
+// CXX17:          1: C() (CXXConstructExpr, [B2.2], class C)
 // CXX17-NEXT:     2: C c = C();
 // CXX17-NEXT:     3: c
 // CXX17-NEXT:     4: [B2.3] (ImplicitCastExpr, NoOp, const class C)
@@ -570,22 +570,22 @@ class D {
 };
 
 // CHECK: void simpleTemporary()
-// CHECK:          1: D() (CXXConstructExpr, [B1.2], D)
+// CHECK:          1: temporary_object_expr_with_dtors::D() (CXXConstructExpr, [B1.2], class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     2: [B1.1] (BindTemporary)
-// CHECK-NEXT:     3: ~D() (Temporary object destructor)
+// CHECK-NEXT:     3: ~temporary_object_expr_with_dtors::D() (Temporary object destructor)
 void simpleTemporary() {
   D();
 }
 
 // CHECK:  void temporaryInCondition()
-// CHECK:          1: D() (CXXConstructExpr, [B2.2], [B2.3], D)
+// CHECK:          1: temporary_object_expr_with_dtors::D() (CXXConstructExpr, [B2.2], [B2.3], class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     2: [B2.1] (BindTemporary)
 // CHECK-NEXT:     3: [B2.2]
 // CHECK-NEXT:     4: [B2.3] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     5: [B2.4].operator bool
 // CHECK-NEXT:     6: [B2.4]
 // CHECK-NEXT:     7: [B2.6] (ImplicitCastExpr, UserDefinedConversion, _Bool)
-// CHECK-NEXT:     8: ~D() (Temporary object destructor)
+// CHECK-NEXT:     8: ~temporary_object_expr_with_dtors::D() (Temporary object destructor)
 // CHECK-NEXT:     T: if [B2.7]
 void temporaryInCondition() {
   if (D());
@@ -593,58 +593,58 @@ void temporaryInCondition() {
 
 // CHECK: void referenceVariableWithConstructor()
 // CHECK:          1: 0
-// CHECK-NEXT:     2: [B1.1] (CXXConstructExpr, [B1.4], const D)
+// CHECK-NEXT:     2: [B1.1] (CXXConstructExpr, [B1.4], const class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     3: [B1.2] (BindTemporary)
 // CHECK-NEXT:     4: [B1.3]
-// CHECK-NEXT:     5: const D &d(0);
-// CHECK-NEXT:     6: [B1.5].~D() (Implicit destructor)
+// CHECK-NEXT:     5: const temporary_object_expr_with_dtors::D &d(0);
+// CHECK-NEXT:     6: [B1.5].~temporary_object_expr_with_dtors::D() (Implicit destructor)
 void referenceVariableWithConstructor() {
   const D &d(0);
 }
 
 // CHECK: void referenceVariableWithInitializer()
-// CHECK:          1: D() (CXXConstructExpr, [B1.4], D)
+// CHECK:          1: temporary_object_expr_with_dtors::D() (CXXConstructExpr, [B1.4], class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     2: [B1.1] (BindTemporary)
-// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const D)
+// CHECK-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     4: [B1.3]
-// CHECK-NEXT:     5: const D &d = D();
-// CHECK-NEXT:     6: [B1.5].~D() (Implicit destructor)
+// CHECK-NEXT:     5: const temporary_object_expr_with_dtors::D &d = temporary_object_expr_with_dtors::D();
+// CHECK-NEXT:     6: [B1.5].~temporary_object_expr_with_dtors::D() (Implicit destructor)
 void referenceVariableWithInitializer() {
   const D &d = D();
 }
 
 // CHECK: void referenceVariableWithTernaryOperator(bool coin)
 // CXX11:        [B1]
-// CXX11-NEXT:     1: [B4.4].~D() (Implicit destructor)
+// CXX11-NEXT:     1: [B4.4].~temporary_object_expr_with_dtors::D() (Implicit destructor)
 // CXX11:        [B2]
-// CXX11-NEXT:     1: ~D() (Temporary object destructor)
+// CXX11-NEXT:     1: ~temporary_object_expr_with_dtors::D() (Temporary object destructor)
 // CXX11:        [B3]
-// CXX11-NEXT:     1: ~D() (Temporary object destructor)
+// CXX11-NEXT:     1: ~temporary_object_expr_with_dtors::D() (Temporary object destructor)
 // CXX11:        [B4]
 // CXX11-NEXT:     1: [B7.2] ? [B5.8] : [B6.8]
-// CXX11-NEXT:     2: [B4.1] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     2: [B4.1] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     3: [B4.2]
-// CXX11-NEXT:     4: const D &d = coin ? D::get() : D(0);
+// CXX11-NEXT:     4: const temporary_object_expr_with_dtors::D &d = coin ? D::get() : temporary_object_expr_with_dtors::D(0);
 // CXX11-NEXT:     T: (Temp Dtor) [B6.3]
 // CXX11:        [B5]
 // CXX11-NEXT:     1: D::get
-// CXX11-NEXT:     2: [B5.1] (ImplicitCastExpr, FunctionToPointerDecay, D (*)(void))
+// CXX11-NEXT:     2: [B5.1] (ImplicitCastExpr, FunctionToPointerDecay, class temporary_object_expr_with_dtors::D (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B5.2]() (CXXRecordTypedCall, [B5.4], [B5.6], [B5.7])
 // CXX11-NOELIDE-NEXT:     3: [B5.2]() (CXXRecordTypedCall, [B5.4], [B5.6])
 // CXX11-NEXT:     4: [B5.3] (BindTemporary)
-// CXX11-NEXT:     5: [B5.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     5: [B5.4] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     6: [B5.5]
-// CXX11-NEXT:     7: [B5.6] (CXXConstructExpr, [B4.3], D)
+// CXX11-NEXT:     7: [B5.6] (CXXConstructExpr, [B4.3], class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     8: [B5.7] (BindTemporary)
 // CXX11:        [B6]
 // CXX11-NEXT:     1: 0
-// CXX11-ELIDE-NEXT:     2: [B6.1] (CXXConstructExpr, [B6.3], [B6.6], [B6.7], D)
-// CXX11-NOELIDE-NEXT:     2: [B6.1] (CXXConstructExpr, [B6.3], [B6.6], D)
+// CXX11-ELIDE-NEXT:     2: [B6.1] (CXXConstructExpr, [B6.3], [B6.6], [B6.7], class temporary_object_expr_with_dtors::D)
+// CXX11-NOELIDE-NEXT:     2: [B6.1] (CXXConstructExpr, [B6.3], [B6.6], class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     3: [B6.2] (BindTemporary)
-// CXX11-NEXT:     4: D([B6.3]) (CXXFunctionalCastExpr, ConstructorConversion, D)
-// CXX11-NEXT:     5: [B6.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     4: temporary_object_expr_with_dtors::D([B6.3]) (CXXFunctionalCastExpr, ConstructorConversion, class temporary_object_expr_with_dtors::D)
+// CXX11-NEXT:     5: [B6.4] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     6: [B6.5]
-// CXX11-NEXT:     7: [B6.6] (CXXConstructExpr, [B4.3], D)
+// CXX11-NEXT:     7: [B6.6] (CXXConstructExpr, [B4.3], class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     8: [B6.7] (BindTemporary)
 // CXX11:        [B7]
 // CXX11-NEXT:     1: coin
@@ -652,20 +652,20 @@ void referenceVariableWithInitializer() {
 // CXX11-NEXT:     T: [B7.2] ? ... : ...
 // CXX17:        [B1]
 // CXX17-NEXT:     1: [B4.2] ? [B2.4] : [B3.4]
-// CXX17-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const D)
+// CXX17-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX17-NEXT:     3: [B1.2]
-// CXX17-NEXT:     4: const D &d = coin ? D::get() : D(0);
-// CXX17-NEXT:     5: [B1.4].~D() (Implicit destructor)
+// CXX17-NEXT:     4: const temporary_object_expr_with_dtors::D &d = coin ? D::get() : temporary_object_expr_with_dtors::D(0);
+// CXX17-NEXT:     5: [B1.4].~temporary_object_expr_with_dtors::D() (Implicit destructor)
 // CXX17:        [B2]
 // CXX17-NEXT:     1: D::get
-// CXX17-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, D (*)(void))
+// CXX17-NEXT:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, class temporary_object_expr_with_dtors::D (*)(void))
 // CXX17-NEXT:     3: [B2.2]() (CXXRecordTypedCall, [B1.3])
 // CXX17-NEXT:     4: [B2.3] (BindTemporary)
 // CXX17:        [B3]
 // CXX17-NEXT:     1: 0
-// CXX17-NEXT:     2: [B3.1] (CXXConstructExpr, [B1.3], D)
+// CXX17-NEXT:     2: [B3.1] (CXXConstructExpr, [B1.3], class temporary_object_expr_with_dtors::D)
 // CXX17-NEXT:     3: [B3.2] (BindTemporary)
-// CXX17-NEXT:     4: D([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, D)
+// CXX17-NEXT:     4: temporary_object_expr_with_dtors::D([B3.3]) (CXXFunctionalCastExpr, ConstructorConversion, class temporary_object_expr_with_dtors::D)
 // CXX17:        [B4]
 // CXX17-NEXT:     1: coin
 // CXX17-NEXT:     2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -676,12 +676,12 @@ void referenceVariableWithTernaryOperator(bool coin) {
 
 // CHECK: void referenceWithFunctionalCast()
 // CHECK:          1: 1
-// CHECK-NEXT:     2: [B1.1] (CXXConstructExpr, [B1.5], D)
+// CHECK-NEXT:     2: [B1.1] (CXXConstructExpr, [B1.5], class temporary_object_expr_with_dtors::D)
 // CHECK-NEXT:     3: [B1.2] (BindTemporary)
-// CHECK-NEXT:     4: D([B1.3]) (CXXFunctionalCastExpr, ConstructorCon
+// CHECK-NEXT:     4: temporary_object_expr_with_dtors::D([B1.3]) (CXXFunctionalCastExpr, ConstructorCon
 // CHECK-NEXT:     5: [B1.4]
-// CHECK-NEXT:     6: D &&d = D(1);
-// CHECK-NEXT:     7: [B1.6].~D() (Implicit destructor)
+// CHECK-NEXT:     6: temporary_object_expr_with_dtors::D &&d = temporary_object_expr_with_dtors::D(1);
+// CHECK-NEXT:     7: [B1.6].~temporary_object_expr_with_dtors::D() (Implicit destructor)
 void referenceWithFunctionalCast() {
   D &&d = D(1);
 }
@@ -689,9 +689,9 @@ void referenceWithFunctionalCast() {
 // Test the condition constructor, we don't care about branch constructors here.
 // CHECK: void constructorInTernaryCondition()
 // CXX11:          1: 1
-// CXX11-NEXT:     2: [B7.1] (CXXConstructExpr, [B7.3], [B7.5], D)
+// CXX11-NEXT:     2: [B7.1] (CXXConstructExpr, [B7.3], [B7.5], class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     3: [B7.2] (BindTemporary)
-// CXX11-NEXT:     4: D([B7.3]) (CXXFunctionalCastExpr, ConstructorConversion, D)
+// CXX11-NEXT:     4: temporary_object_expr_with_dtors::D([B7.3]) (CXXFunctionalCastExpr, ConstructorConversion, class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     5: [B7.4]
 // CXX11-NEXT:     6: [B7.5] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX11-NEXT:     7: [B7.6].operator bool
@@ -699,9 +699,9 @@ void referenceWithFunctionalCast() {
 // CXX11-NEXT:     9: [B7.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX11-NEXT:     T: [B7.9] ? ... : ...
 // CXX17:          1: 1
-// CXX17-NEXT:     2: [B4.1] (CXXConstructExpr, [B4.3], [B4.5], D)
+// CXX17-NEXT:     2: [B4.1] (CXXConstructExpr, [B4.3], [B4.5], class temporary_object_expr_with_dtors::D)
 // CXX17-NEXT:     3: [B4.2] (BindTemporary)
-// CXX17-NEXT:     4: D([B4.3]) (CXXFunctionalCastExpr, ConstructorConversion, D)
+// CXX17-NEXT:     4: temporary_object_expr_with_dtors::D([B4.3]) (CXXFunctionalCastExpr, ConstructorConversion, class temporary_object_expr_with_dtors::D)
 // CXX17-NEXT:     5: [B4.4]
 // CXX17-NEXT:     6: [B4.5] (ImplicitCastExpr, NoOp, const class temporary_object_expr_with_dtors::D)
 // CXX17-NEXT:     7: [B4.6].operator bool
@@ -726,79 +726,79 @@ class B {
 };
 
 // CHECK: void implicitConstructionConversionFromTemporary()
-// CHECK:          1: A() (CXXConstructExpr, [B1.3], A)
-// CXX11-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:          1: implicit_constructor_conversion::A() (CXXConstructExpr, [B1.3], class implicit_constructor_conversion::A)
+// CXX11-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::A)
 // CXX11-NEXT:     3: [B1.2]
-// CXX11-ELIDE-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], [B1.8], [B1.9], B)
-// CXX11-NOELIDE-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], [B1.8], B)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, B)
+// CXX11-ELIDE-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], [B1.8], [B1.9], class implicit_constructor_conversion::B)
+// CXX11-NOELIDE-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], [B1.8], class implicit_constructor_conversion::B)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_conversion::B)
 // CXX11-NEXT:     6: [B1.5] (BindTemporary)
-// CXX11-NEXT:     7: [B1.6] (ImplicitCastExpr, NoOp, const B)
+// CXX11-NEXT:     7: [B1.6] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::B)
 // CXX11-NEXT:     8: [B1.7]
-// CXX11-NEXT:     9: [B1.8] (CXXConstructExpr, [B1.10], B)
-// CXX11-NEXT:    10: B b = A();
-// CXX11-NEXT:    11: ~B() (Temporary object destructor)
-// CXX11-NEXT:    12: [B1.10].~B() (Implicit destructor)
-// CXX17-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const A)
+// CXX11-NEXT:     9: [B1.8] (CXXConstructExpr, [B1.10], class implicit_constructor_conversion::B)
+// CXX11-NEXT:    10: implicit_constructor_conversion::B b = implicit_constructor_conversion::A();
+// CXX11-NEXT:    11: ~implicit_constructor_conversion::B() (Temporary object destructor)
+// CXX11-NEXT:    12: [B1.10].~implicit_constructor_conversion::B() (Implicit destructor)
+// CXX17-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::A)
 // CXX17-NEXT:     3: [B1.2]
-// CXX17-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], B)
-// CXX17-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, B)
-// CXX17-NEXT:     6: B b = A();
-// CXX17-NEXT:     7: [B1.6].~B() (Implicit destructor)
+// CXX17-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], class implicit_constructor_conversion::B)
+// CXX17-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_conversion::B)
+// CXX17-NEXT:     6: implicit_constructor_conversion::B b = implicit_constructor_conversion::A();
+// CXX17-NEXT:     7: [B1.6].~implicit_constructor_conversion::B() (Implicit destructor)
 void implicitConstructionConversionFromTemporary() {
   B b = A();
 }
 
 // CHECK: void implicitConstructionConversionFromFunctionValue()
 // CHECK:          1: get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, A (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class implicit_constructor_conversion::A (*)(void))
 // CHECK-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.5])
-// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::A)
 // CHECK-NEXT:     5: [B1.4]
-// CXX11-ELIDE-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], [B1.10], [B1.11], B)
-// CXX11-NOELIDE-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], [B1.10], B)
-// CXX11-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, B)
+// CXX11-ELIDE-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], [B1.10], [B1.11], class implicit_constructor_conversion::B)
+// CXX11-NOELIDE-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], [B1.10], class implicit_constructor_conversion::B)
+// CXX11-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_conversion::B)
 // CXX11-NEXT:     8: [B1.7] (BindTemporary)
-// CXX11-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const B)
+// CXX11-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::B)
 // CXX11-NEXT:    10: [B1.9]
-// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12], B)
-// CXX11-NEXT:    12: B b = get();
-// CXX11-NEXT:    13: ~B() (Temporary object destructor)
-// CXX11-NEXT:    14: [B1.12].~B() (Implicit destructor)
-// CXX17-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], B)
-// CXX17-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, B)
-// CXX17-NEXT:     8: B b = get();
-// CXX17-NEXT:     9: [B1.8].~B() (Implicit destructor)
+// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12], class implicit_constructor_conversion::B)
+// CXX11-NEXT:    12: implicit_constructor_conversion::B b = get();
+// CXX11-NEXT:    13: ~implicit_constructor_conversion::B() (Temporary object destructor)
+// CXX11-NEXT:    14: [B1.12].~implicit_constructor_conversion::B() (Implicit destructor)
+// CXX17-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.8], class implicit_constructor_conversion::B)
+// CXX17-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_conversion::B)
+// CXX17-NEXT:     8: implicit_constructor_conversion::B b = get();
+// CXX17-NEXT:     9: [B1.8].~implicit_constructor_conversion::B() (Implicit destructor)
 void implicitConstructionConversionFromFunctionValue() {
   B b = get();
 }
 
 // CHECK: void implicitConstructionConversionFromTemporaryWithLifetimeExtension()
-// CHECK:          1: A() (CXXConstructExpr, [B1.3], A)
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:          1: implicit_constructor_conversion::A() (CXXConstructExpr, [B1.3], class implicit_constructor_conversion::A)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::A)
 // CHECK-NEXT:     3: [B1.2]
-// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.7], B)
-// CHECK-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, B)
-// CHECK-NEXT:     6: [B1.5] (ImplicitCastExpr, NoOp, const B)
+// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.7], class implicit_constructor_conversion::B)
+// CHECK-NEXT:     5: [B1.4] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_conversion::B)
+// CHECK-NEXT:     6: [B1.5] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::B)
 // CHECK-NEXT:     7: [B1.6]
-// CHECK-NEXT:     8: const B &b = A();
-// CHECK-NEXT:     9: [B1.8].~B() (Implicit destructor)
+// CHECK-NEXT:     8: const implicit_constructor_conversion::B &b = implicit_constructor_conversion::A();
+// CHECK-NEXT:     9: [B1.8].~implicit_constructor_conversion::B() (Implicit destructor)
 void implicitConstructionConversionFromTemporaryWithLifetimeExtension() {
   const B &b = A();
 }
 
 // CHECK: void implicitConstructionConversionFromFunctionValueWithLifetimeExtension()
 // CHECK:          1: get
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, A (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class implicit_constructor_conver
 // CHECK-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.5])
-// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::A)
 // CHECK-NEXT:     5: [B1.4]
-// CHECK-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.9], B)
-// CHECK-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, B)
-// CHECK-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const B)
+// CHECK-NEXT:     6: [B1.5] (CXXConstructExpr, [B1.9], class implicit_constructor_conversion::B)
+// CHECK-NEXT:     7: [B1.6] (ImplicitCastExpr, ConstructorConversion, class implicit_constructor_convers
+// CHECK-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const class implicit_constructor_conversion::B)
 // CHECK-NEXT:     9: [B1.8]
-// CHECK-NEXT:    10: const B &b = get();
-// CHECK-NEXT:    11: [B1.10].~B() (Implicit destructor)
+// CHECK-NEXT:    10: const implicit_constructor_conversion::B &b = get();
+// CHECK-NEXT:    11: [B1.10].~implicit_constructor_conversion::B() (Implicit destructor)
 void implicitConstructionConversionFromFunctionValueWithLifetimeExtension() {
   const B &b = get(); // no-crash
 }
@@ -826,13 +826,13 @@ void useCAndD(C c, D d);
 
 // CHECK: void passArgument()
 // CHECK:          1: useC
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(C))
-// CXX11-ELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], [B1.5], C)
-// CXX11-NOELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(class C))
+// CXX11-ELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], [B1.5], class C)
+// CXX11-NOELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], class C)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6]+0, C)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6]+0, class C)
 // CXX11-NEXT:     6: [B1.2]([B1.5])
-// CXX17-NEXT:     3: C() (CXXConstructExpr, [B1.4]+0, C)
+// CXX17-NEXT:     3: C() (CXXConstructExpr, [B1.4]+0, class C)
 // CXX17-NEXT:     4: [B1.2]([B1.3])
 void passArgument() {
   useC(C());
@@ -841,35 +841,35 @@ void passArgument() {
 // CHECK: void passTwoArguments()
 // CHECK:        [B1]
 // CHECK-NEXT:     1: useCAndD
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(C, D))
-// CXX11-ELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], [B1.5], C)
-// CXX11-NOELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(class C, class argument_constructors::D))
+// CXX11-ELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], [B1.5], class C)
+// CXX11-NOELIDE-NEXT:     3: C() (CXXConstructExpr, [B1.4], class C)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.12]+0, C)
-// CXX11-ELIDE-NEXT:     6: D() (CXXConstructExpr, [B1.7], [B1.9], [B1.10], D)
-// CXX11-NOELIDE-NEXT:     6: D() (CXXConstructExpr, [B1.7], [B1.9], D)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.12]+0, class C)
+// CXX11-ELIDE-NEXT:     6: argument_constructors::D() (CXXConstructExpr, [B1.7], [B1.9], [B1.10], class argument_constructors::D)
+// CXX11-NOELIDE-NEXT:     6: argument_constructors::D() (CXXConstructExpr, [B1.7], [B1.9], class argument_constructors::D)
 // CXX11-NEXT:     7: [B1.6] (BindTemporary)
-// CXX11-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     8: [B1.7] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CXX11-NEXT:     9: [B1.8]
-// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, [B1.11], [B1.12]+1, D)
+// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, [B1.11], [B1.12]+1, class argument_constructors::D)
 // CXX11-NEXT:    11: [B1.10] (BindTemporary)
 // CXX11-NEXT:    12: [B1.2]([B1.5], [B1.11])
-// CXX11-NEXT:    13: ~D() (Temporary object destructor)
-// CXX11-NEXT:    14: ~D() (Temporary object destructor)
-// CXX17-NEXT:     3: C() (CXXConstructExpr, [B1.6]+0, C)
-// CXX17-NEXT:     4: D() (CXXConstructExpr, [B1.5], [B1.6]+1, D)
+// CXX11-NEXT:    13: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    14: ~argument_constructors::D() (Temporary object destructor)
+// CXX17-NEXT:     3: C() (CXXConstructExpr, [B1.6]+0, class C)
+// CXX17-NEXT:     4: argument_constructors::D() (CXXConstructExpr, [B1.5], [B1.6]+1, class argument_co
 // CXX17-NEXT:     5: [B1.4] (BindTemporary)
 // CXX17-NEXT:     6: [B1.2]([B1.3], [B1.5])
-// CXX17-NEXT:     7: ~D() (Temporary object destructor)
+// CXX17-NEXT:     7: ~argument_constructors::D() (Temporary object destructor)
 void passTwoArguments() {
   useCAndD(C(), D());
 }
 
 // CHECK: void passArgumentByReference()
 // CHECK:          1: useCByReference
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const C &))
-// CHECK-NEXT:     3: C() (CXXConstructExpr, [B1.5], C)
-// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const C)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class C &))
+// CHECK-NEXT:     3: C() (CXXConstructExpr, [B1.5], class C)
+// CHECK-NEXT:     4: [B1.3] (ImplicitCastExpr, NoOp, const class C)
 // CHECK-NEXT:     5: [B1.4]
 // CHECK-NEXT:     6: [B1.2]([B1.5])
 void passArgumentByReference() {
@@ -878,92 +878,92 @@ void passArgumentByReference() {
 
 // CHECK: void passArgumentWithDestructor()
 // CHECK:          1: useD
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(D))
-// CXX11-ELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], [B1.7], D)
-// CXX11-NOELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], D)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(class argument_constructors::D))
+// CXX11-ELIDE-NEXT:     3: argument_constructors::D() (CXXConstructExpr, [B1.4], [B1.6], [B1.7], class argument_constructors::D)
+// CXX11-NOELIDE-NEXT:     3: argument_constructors::D() (CXXConstructExpr, [B1.4], [B1.6], class argument_constructors::D)
 // CXX11-NEXT:     4: [B1.3] (BindTemporary)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CXX11-NEXT:     6: [B1.5]
-// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], [B1.9]+0, D)
+// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], [B1.9]+0, class argument_constructors::D)
 // CXX11-NEXT:     8: [B1.7] (BindTemporary)
 // CXX11-NEXT:     9: [B1.2]([B1.8])
-// CXX11-NEXT:    10: ~D() (Temporary object destructor)
-// CXX11-NEXT:    11: ~D() (Temporary object destructor)
-// CXX17-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.5]+0, D)
+// CXX11-NEXT:    10: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    11: ~argument_constructors::D() (Temporary object destructor)
+// CXX17-NEXT:     3: argument_constructors::D() (CXXConstructExpr, [B1.4], [B1.5]+0, class argument_constructors::D)
 // CXX17-NEXT:     4: [B1.3] (BindTemporary)
 // CXX17-NEXT:     5: [B1.2]([B1.4])
-// CXX17-NEXT:     6: ~D() (Temporary object destructor)
+// CXX17-NEXT:     6: ~argument_constructors::D() (Temporary object destructor)
 void passArgumentWithDestructor() {
   useD(D());
 }
 
 // CHECK: void passArgumentWithDestructorByReference()
 // CHECK:          1: useDByReference
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const D &))
-// CHECK-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], D)
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class argumen
+// CHECK-NEXT:     3: argument_constructors::D() (CXXConstructExpr, [B1.4], [B1.6], class argument_c
 // CHECK-NEXT:     4: [B1.3] (BindTemporary)
-// CHECK-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const D)
+// CHECK-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CHECK-NEXT:     6: [B1.5]
 // CHECK-NEXT:     7: [B1.2]([B1.6])
-// CHECK-NEXT:     8: ~D() (Temporary object destructor)
+// CHECK-NEXT:     8: ~argument_constructors::D() (Temporary object destructor)
 void passArgumentWithDestructorByReference() {
   useDByReference(D());
 }
 
 // CHECK: void passArgumentIntoAnotherConstructor()
-// CXX11-ELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], D)
-// CXX11-NOELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], D)
+// CXX11-ELIDE:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class argument_constructors::D)
+// CXX11-NOELIDE:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.4], class argument_constructors::D)
 // CXX11-NEXT:     2: [B1.1] (BindTemporary)
-// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], [B1.7]+0, D)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], [B1.7]+0, class argument_constructors::D)
 // CXX11-NEXT:     6: [B1.5] (BindTemporary)
-// CXX11-ELIDE-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.9], [B1.10], E)
-// CXX11-NOELIDE-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.9], E)
-// CXX11-NEXT:     8: E([B1.7]) (CXXFunctionalCastExpr, ConstructorConversion, E)
+// CXX11-ELIDE-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.9], [B1.10], class argument_constructors::E)
+// CXX11-NOELIDE-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.9], class argument_constructors::E)
+// CXX11-NEXT:     8: argument_constructors::E([B1.7]) (CXXFunctionalCastExpr, ConstructorConversion, class argument_constructors::E)
 // CXX11-NEXT:     9: [B1.8]
-// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, [B1.11], E)
-// CXX11-NEXT:    11: E e = E(D());
-// CXX11-NEXT:    12: ~D() (Temporary object destructor)
-// CXX11-NEXT:    13: ~D() (Temporary object destructor)
-// CXX17:          1: D() (CXXConstructExpr, [B1.2], [B1.3]+0, D)
+// CXX11-NEXT:    10: [B1.9] (CXXConstructExpr, [B1.11], class argument_constructors::E)
+// CXX11-NEXT:    11: argument_constructors::E e = argument_constructors::E(argument_constructors::D());
+// CXX11-NEXT:    12: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    13: ~argument_constructors::D() (Temporary object destructor)
+// CXX17:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.3]+0, class argument_constructors::D)
 // CXX17-NEXT:     2: [B1.1] (BindTemporary)
-// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], E)
-// CXX17-NEXT:     4: E([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, E)
-// CXX17-NEXT:     5: E e = E(D());
-// CXX17-NEXT:     6: ~D() (Temporary object destructor)
+// CXX17-NEXT:     3: [B1.2] (CXXConstructExpr, [B1.5], class argument_constructors::E)
+// CXX17-NEXT:     4: argument_constructors::E([B1.3]) (CXXFunctionalCastExpr, ConstructorConversion, class argument_constructors::E)
+// CXX17-NEXT:     5: argument_constructors::E e = argument_constructors::E(argument_constructors::D());
+// CXX17-NEXT:     6: ~argument_constructors::D() (Temporary object destructor)
 void passArgumentIntoAnotherConstructor() {
   E e = E(D());
 }
 
 
 // CHECK: void passTwoArgumentsIntoAnotherConstructor()
-// CXX11-ELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], D)
-// CXX11-NOELIDE:          1: D() (CXXConstructExpr, [B1.2], [B1.4], D)
+// CXX11-ELIDE:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class argument_constructors::D)
+// CXX11-NOELIDE:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.4], class argument_constructors::D)
 // CXX11-NEXT:     2: [B1.1] (BindTemporary)
-// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     3: [B1.2] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], [B1.13]+0, D)
+// CXX11-NEXT:     5: [B1.4] (CXXConstructExpr, [B1.6], [B1.13]+0, class argument_constructors::D)
 // CXX11-NEXT:     6: [B1.5] (BindTemporary)
-// CXX11-ELIDE-NEXT:     7: D() (CXXConstructExpr, [B1.8], [B1.10], [B1.11], D)
-// CXX11-NOELIDE-NEXT:     7: D() (CXXConstructExpr, [B1.8], [B1.10], D)
+// CXX11-ELIDE-NEXT:     7: argument_constructors::D() (CXXConstructExpr, [B1.8], [B1.10], [B1.11], class argument_constructors::D)
+// CXX11-NOELIDE-NEXT:     7: argument_constructors::D() (CXXConstructExpr, [B1.8], [B1.10], class argument_constructors::D)
 // CXX11-NEXT:     8: [B1.7] (BindTemporary)
-// CXX11-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     9: [B1.8] (ImplicitCastExpr, NoOp, const class argument_constructors::D)
 // CXX11-NEXT:    10: [B1.9]
-// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12], [B1.13]+1, D)
+// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12], [B1.13]+1, class argument_constructors::D)
 // CXX11-NEXT:    12: [B1.11] (BindTemporary)
-// CXX11-NEXT:    13: E([B1.6], [B1.12]) (CXXConstructExpr, E)
-// CXX11-NEXT:    14: ~D() (Temporary object destructor)
-// CXX11-NEXT:    15: ~D() (Temporary object destructor)
-// CXX11-NEXT:    16: ~D() (Temporary object destructor)
-// CXX11-NEXT:    17: ~D() (Temporary object destructor)
-// CXX17:          1: D() (CXXConstructExpr, [B1.2], [B1.5]+0, D)
+// CXX11-NEXT:    13: argument_constructors::E([B1.6], [B1.12]) (CXXConstructExpr, class argument_constructors::E)
+// CXX11-NEXT:    14: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    15: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    16: ~argument_constructors::D() (Temporary object destructor)
+// CXX11-NEXT:    17: ~argument_constructors::D() (Temporary object destructor)
+// CXX17:          1: argument_constructors::D() (CXXConstructExpr, [B1.2], [B1.5]+0, class argument_constructors::D)
 // CXX17-NEXT:     2: [B1.1] (BindTemporary)
-// CXX17-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.5]+1, D)
+// CXX17-NEXT:     3: argument_constructors::D() (CXXConstructExpr, [B1.4], [B1.5]+1, class argument_constructors::D)
 // CXX17-NEXT:     4: [B1.3] (BindTemporary)
-// CXX17-NEXT:     5: E([B1.2], [B1.4]) (CXXConstructExpr, E)
-// CXX17-NEXT:     6: ~D() (Temporary object destructor)
-// CXX17-NEXT:     7: ~D() (Temporary object destructor)
+// CXX17-NEXT:     5: argument_constructors::E([B1.2], [B1.4]) (CXXConstructExpr, class argument_constructors::E)
+// CXX17-NEXT:     6: ~argument_constructors::D() (Temporary object destructor)
+// CXX17-NEXT:     7: ~argument_constructors::D() (Temporary object destructor)
 void passTwoArgumentsIntoAnotherConstructor() {
   E(D(), D());
 }
@@ -978,15 +978,15 @@ class C {
 
 // CHECK: void testCopyElisionWhenCopyConstructorHasExtraArguments()
 // CHECK:        [B1]
-// CXX11-ELIDE-NEXT:     1: C() (CXXConstructExpr, [B1.3], [B1.5], C)
-// CXX11-NOELIDE-NEXT:     1: C() (CXXConstructExpr, [B1.3], C)
-// CXX11-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const C)
+// CXX11-ELIDE-NEXT:     1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.3], [B1.5], class copy_elision_with_extra_arguments::C)
+// CXX11-NOELIDE-NEXT:     1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.3], class copy_elision_with_extra_arguments::C)
+// CXX11-NEXT:     2: [B1.1] (ImplicitCastExpr, NoOp, const class copy_elision_with_extra_arguments::C)
 // CXX11-NEXT:     3: [B1.2]
 // CXX11-NEXT:     4:
-// CXX11-NEXT:     5: [B1.3] (CXXConstructExpr, [B1.6], C)
-// CXX11-NEXT:     6: C c = C();
-// CXX17-NEXT:     1: C() (CXXConstructExpr, [B1.2], C)
-// CXX17-NEXT:     2: C c = C();
+// CXX11-NEXT:     5: [B1.3] (CXXConstructExpr, [B1.6], class copy_elision_with_extra_arguments::C)
+// CXX11-NEXT:     6: copy_elision_with_extra_arguments::C c = copy_elision_with_extra_arguments::C();
+// CXX17-NEXT:     1: copy_elision_with_extra_arguments::C() (CXXConstructExpr, [B1.2], class copy_elision_with_extra_arguments::C)
+// CXX17-NEXT:     2: copy_elision_with_extra_arguments::C c = copy_elision_with_extra_arguments::C();
 void testCopyElisionWhenCopyConstructorHasExtraArguments() {
   C c = C();
 }
@@ -1004,20 +1004,20 @@ class C {
 // CHECK: void testOperators()
 // CHECK:        [B1]
 // CHECK-NEXT:     1: operator+
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C &(*)(C))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class operators::C &(*)(class o
 // CHECK-NEXT:     3: 1
-// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], C)
-// CHECK-NEXT:     5: C([B1.4]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CHECK-NEXT:     4: [B1.3] (CXXConstructExpr, [B1.6], class operators::C)
+// CHECK-NEXT:     5: operators::C([B1.4]) (CXXFunctionalCastExpr, ConstructorConversion, class operato
 // CHECK-NEXT:     6: [B1.5]
 // CHECK-NEXT:     7: 2
-// CXX11-ELIDE-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10], [B1.11], C)
-// CXX11-NOELIDE-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10], C)
-// CXX11-NEXT:     9: C([B1.8]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CXX11-ELIDE-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10], [B1.11], class operators::C)
+// CXX11-NOELIDE-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10], class operators::C)
+// CXX11-NEXT:     9: operators::C([B1.8]) (CXXFunctionalCastExpr, ConstructorConversion, class operato
 // CXX11-NEXT:    10: [B1.9]
-// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12]+1, C)
+// CXX11-NEXT:    11: [B1.10] (CXXConstructExpr, [B1.12]+1, class operators::C)
 // CXX11-NEXT:    12: [B1.6] + [B1.11] (OperatorCall)
-// CXX17-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10]+1, C)
-// CXX17-NEXT:     9: C([B1.8]) (CXXFunctionalCastExpr, ConstructorConversion, C)
+// CXX17-NEXT:     8: [B1.7] (CXXConstructExpr, [B1.10]+1, class operators::C)
+// CXX17-NEXT:     9: operators::C([B1.8]) (CXXFunctionalCastExpr, ConstructorConversion, class operato
 // CXX17-NEXT:    10: [B1.6] + [B1.9] (OperatorCall)
 void testOperators() {
   C(1) + C(2);
@@ -1042,15 +1042,15 @@ void testCrashOnVariadicArgument() {
 // CHECK: void testTransparentInitListExprs()
 // CHECK:        [B1]
 // CHECK-NEXT:     1: getC
-// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C (*)(void))
+// CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class transparent_init_list_exprs::C (*)(void))
 // CXX11-ELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.5])
 // CXX11-NOELIDE-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.4])
 // CXX11-NEXT:     4: [B1.3]
-// CXX11-NEXT:     5: {[B1.4]} (CXXConstructExpr, [B1.6], C)
-// CXX11-NEXT:     6: C c{getC()};
+// CXX11-NEXT:     5: {[B1.4]} (CXXConstructExpr, [B1.6], class transparent_init_list_exprs::C)
+// CXX11-NEXT:     6: transparent_init_list_exprs::C c{getC()};
 // CXX17-NEXT:     3: [B1.2]() (CXXRecordTypedCall, [B1.5])
 // CXX17-NEXT:     4: {[B1.3]}
-// CXX17-NEXT:     5: C c{getC()};
+// CXX17-NEXT:     5: transparent_init_list_exprs::C c{getC()};
 namespace transparent_init_list_exprs {
 class C {};
 C getC();

diff  --git a/clang/test/Analysis/cfg-rich-constructors.mm b/clang/test/Analysis/cfg-rich-constructors.mm
index f048f061e9fba..88a44377a6ca9 100644
--- a/clang/test/Analysis/cfg-rich-constructors.mm
+++ b/clang/test/Analysis/cfg-rich-constructors.mm
@@ -21,18 +21,18 @@ -(D) bar;
 // CHECK: void passArgumentIntoMessage(E *e)
 // CHECK:          1: e
 // CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, LValueToRValue, E *)
-// CXX11-ELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], [B1.7], D)
-// CXX11-NOELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], D)
+// CXX11-ELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], [B1.7], class D)
+// CXX11-NOELIDE-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.6], class D)
 // CXX11-NEXT:     4: [B1.3] (BindTemporary)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class D)
 // CXX11-NEXT:     6: [B1.5]
-// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], [B1.9]+0, D)
+// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], [B1.9]+0, class D)
 // CXX11-NEXT:     8: [B1.7] (BindTemporary)
 // Double brackets trigger FileCheck variables, escape.
 // CXX11-NEXT:     9: {{\[}}[B1.2] foo:[B1.8]]
 // CXX11-NEXT:    10: ~D() (Temporary object destructor)
 // CXX11-NEXT:    11: ~D() (Temporary object destructor)
-// CXX17-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.5]+0, D)
+// CXX17-NEXT:     3: D() (CXXConstructExpr, [B1.4], [B1.5]+0, class D)
 // CXX17-NEXT:     4: [B1.3] (BindTemporary)
 // Double brackets trigger FileCheck variables, escape.
 // CXX17-NEXT:     5: {{\[}}[B1.2] foo:[B1.4]]
@@ -49,9 +49,9 @@ void passArgumentIntoMessage(E *e) {
 // CXX11-ELIDE-NEXT:     3: {{\[}}[B1.2] bar] (CXXRecordTypedCall, [B1.4], [B1.6], [B1.7])
 // CXX11-NOELIDE-NEXT:     3: {{\[}}[B1.2] bar] (CXXRecordTypedCall, [B1.4], [B1.6])
 // CXX11-NEXT:     4: [B1.3] (BindTemporary)
-// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const D)
+// CXX11-NEXT:     5: [B1.4] (ImplicitCastExpr, NoOp, const class D)
 // CXX11-NEXT:     6: [B1.5]
-// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], D)
+// CXX11-NEXT:     7: [B1.6] (CXXConstructExpr, [B1.8], class D)
 // CXX11-NEXT:     8: D d = [e bar];
 // CXX11-NEXT:     9: ~D() (Temporary object destructor)
 // CXX11-NEXT:    10: [B1.8].~D() (Implicit destructor)

diff  --git a/clang/test/Analysis/cfg.cpp b/clang/test/Analysis/cfg.cpp
index 32cd074c9e585..df4c7b32fb685 100644
--- a/clang/test/Analysis/cfg.cpp
+++ b/clang/test/Analysis/cfg.cpp
@@ -53,7 +53,7 @@ void checkDeclStmts() {
 // CHECK-NEXT: Succs (1): B1
 // CHECK: [B1]
 // CHECK-NEXT:   1: e
-// CHECK-NEXT:   2: [B1.1] (ImplicitCastExpr, LValueToRValue, EmptyE)
+// CHECK-NEXT:   2: [B1.1] (ImplicitCastExpr, LValueToRValue, enum EmptyE)
 // CHECK-NEXT:   3: [B1.2] (ImplicitCastExpr, IntegralCast, int)
 // CHECK-NEXT:   T: switch [B1.3]
 // CHECK-NEXT:   Preds (1): B2
@@ -93,12 +93,12 @@ class A {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK: [B1]
 // CHECK-NEXT:   1:  CFGNewAllocator(A *)
-// WARNINGS-NEXT:   2:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], A)
+// WARNINGS-NEXT:   2:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   3: new A([B1.2])
 // CHECK-NEXT:   4: A *a = new A();
 // CHECK-NEXT:   5: a
-// CHECK-NEXT:   6: [B1.5] (ImplicitCastExpr, LValueToRValue, A *)
+// CHECK-NEXT:   6: [B1.5] (ImplicitCastExpr, LValueToRValue, class A *)
 // CHECK-NEXT:   7: [B1.6]->~A() (Implicit destructor)
 // CHECK-NEXT:   8: delete [B1.6]
 // CHECK-NEXT:   Preds (1): B2
@@ -116,12 +116,12 @@ void test_deletedtor() {
 // CHECK: [B1]
 // CHECK-NEXT:   1: 5
 // CHECK-NEXT:   2: CFGNewAllocator(A *)
-// WARNINGS-NEXT:   3:  (CXXConstructExpr, A[5])
-// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], A[5])
+// WARNINGS-NEXT:   3:  (CXXConstructExpr, class A[5])
+// ANALYZER-NEXT:   3:  (CXXConstructExpr, [B1.4], class A[5])
 // CHECK-NEXT:   4: new A {{\[\[}}B1.1]]
 // CHECK-NEXT:   5: A *a = new A [5];
 // CHECK-NEXT:   6: a
-// CHECK-NEXT:   7: [B1.6] (ImplicitCastExpr, LValueToRValue, A *)
+// CHECK-NEXT:   7: [B1.6] (ImplicitCastExpr, LValueToRValue, class A *)
 // CHECK-NEXT:   8: [B1.7]->~A() (Implicit destructor)
 // CHECK-NEXT:   9: delete [] [B1.7]
 // CHECK-NEXT:   Preds (1): B2
@@ -148,7 +148,7 @@ namespace NoReturnSingleSuccessor {
 // CHECK-LABEL: int test1(int *x)
 // CHECK: 1: 1
 // CHECK-NEXT: 2: return
-// CHECK-NEXT: ~B() (Implicit destructor)
+// CHECK-NEXT: ~NoReturnSingleSuccessor::B() (Implicit destructor)
 // CHECK-NEXT: Preds (1)
 // CHECK-NEXT: Succs (1): B0
   int test1(int *x) {
@@ -309,8 +309,8 @@ int test_enum_with_extension_default(enum MyEnum value) {
 // CHECK-NEXT:  3: [B1.2] (ImplicitCastExpr, ArrayToPointerDecay, int *)
 // CHECK-NEXT:  4: [B1.3] (ImplicitCastExpr, BitCast, void *)
 // CHECK-NEXT:  5: CFGNewAllocator(MyClass *)
-// WARNINGS-NEXT:  6:  (CXXConstructExpr, MyClass)
-// ANALYZER-NEXT:  6:  (CXXConstructExpr, [B1.7], MyClass)
+// WARNINGS-NEXT:  6:  (CXXConstructExpr, class MyClass)
+// ANALYZER-NEXT:  6:  (CXXConstructExpr, [B1.7], class MyClass)
 // CHECK-NEXT:  7: new ([B1.4]) MyClass([B1.6])
 // CHECK-NEXT:  8: MyClass *obj = new (buffer) MyClass();
 // CHECK-NEXT:  Preds (1): B2
@@ -342,8 +342,8 @@ void test_placement_new() {
 // CHECK-NEXT:  4: [B1.3] (ImplicitCastExpr, BitCast, void *)
 // CHECK-NEXT:  5: 5
 // CHECK-NEXT:  6: CFGNewAllocator(MyClass *)
-// WARNINGS-NEXT:  7:  (CXXConstructExpr, MyClass[5])
-// ANALYZER-NEXT:  7:  (CXXConstructExpr, [B1.8], MyClass[5])
+// WARNINGS-NEXT:  7:  (CXXConstructExpr, class MyClass[5])
+// ANALYZER-NEXT:  7:  (CXXConstructExpr, [B1.8], class MyClass[5])
 // CHECK-NEXT:  8: new ([B1.4]) MyClass {{\[\[}}B1.5]]
 // CHECK-NEXT:  9: MyClass *obj = new (buffer) MyClass [5];
 // CHECK-NEXT:  Preds (1): B2
@@ -418,10 +418,10 @@ void test_lifetime_extended_temporaries() {
 // CHECK:  [B2 (ENTRY)]
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:  [B1]
-// WARNINGS-NEXT:    1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:    1:  (CXXConstructExpr, [B1.2], A)
-// CHECK-NEXT:    2: A a;
-// CHECK-NEXT:    3: [B1.2].~A() (Implicit destructor)
+// WARNINGS-NEXT:    1:  (CXXConstructExpr, struct pr37688_deleted_union_destructor::A)
+// ANALYZER-NEXT:    1:  (CXXConstructExpr, [B1.2], struct pr37688_deleted_union_destructor::A)
+// CHECK-NEXT:    2: pr37688_deleted_union_destructor::A a;
+// CHECK-NEXT:    3: [B1.2].~pr37688_deleted_union_destructor::A() (Implicit destructor)
 // CHECK-NEXT:    Preds (1): B2
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:  [B0 (EXIT)]
@@ -577,13 +577,13 @@ int vla_evaluate(int x) {
 
 // CHECK-LABEL: void CommaTemp::f()
 // CHECK:       [B1]
-// CHECK-NEXT:    1: A() (CXXConstructExpr,
+// CHECK-NEXT:    1: CommaTemp::A() (CXXConstructExpr,
 // CHECK-NEXT:    2: [B1.1] (BindTemporary)
-// CHECK-NEXT:    3: B() (CXXConstructExpr,
+// CHECK-NEXT:    3: CommaTemp::B() (CXXConstructExpr,
 // CHECK-NEXT:    4: [B1.3] (BindTemporary)
 // CHECK-NEXT:    5: ... , [B1.4]
-// CHECK-NEXT:    6: ~B() (Temporary object destructor)
-// CHECK-NEXT:    7: ~A() (Temporary object destructor)
+// CHECK-NEXT:    6: ~CommaTemp::B() (Temporary object destructor)
+// CHECK-NEXT:    7: ~CommaTemp::A() (Temporary object destructor)
 namespace CommaTemp {
   struct A { ~A(); };
   struct B { ~B(); };
@@ -611,8 +611,8 @@ void CommaTemp::f() {
 // CHECK-NEXT:    Preds (2): B3 B4
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B3]
-// WARNINGS-NEXT: 1:  (CXXConstructExpr, ClassWithDtor)
-// ANALYZER-NEXT: 1:  (CXXConstructExpr, [B3.2], ClassWithDtor)
+// WARNINGS-NEXT: 1:  (CXXConstructExpr, struct ClassWithDtor)
+// ANALYZER-NEXT: 1:  (CXXConstructExpr, [B3.2], struct ClassWithDtor)
 // CHECK-NEXT:    2: thread_local ClassWithDtor a;
 // CHECK-NEXT:    Preds (1): B4
 // CHECK-NEXT:    Succs (1): B2

diff  --git a/clang/test/Analysis/copy-elision.cpp b/clang/test/Analysis/copy-elision.cpp
index dee1a5fc86e7f..9da896fc2598d 100644
--- a/clang/test/Analysis/copy-elision.cpp
+++ b/clang/test/Analysis/copy-elision.cpp
@@ -156,19 +156,19 @@ class ClassWithoutDestructor {
 ClassWithoutDestructor make1(AddressVector<ClassWithoutDestructor> &v) {
   return ClassWithoutDestructor(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithoutDestructor' is still \
+object of type 'address_vector_tests::ClassWithoutDestructor' is still \
 referred to by the stack variable 'v' upon returning to the caller}}
 }
 ClassWithoutDestructor make2(AddressVector<ClassWithoutDestructor> &v) {
   return make1(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithoutDestructor' is still \
+object of type 'address_vector_tests::ClassWithoutDestructor' is still \
 referred to by the stack variable 'v' upon returning to the caller}}
 }
 ClassWithoutDestructor make3(AddressVector<ClassWithoutDestructor> &v) {
   return make2(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithoutDestructor' is still \
+object of type 'address_vector_tests::ClassWithoutDestructor' is still \
 referred to by the stack variable 'v' upon returning to the caller}}
 }
 
@@ -265,7 +265,7 @@ struct TestCtorInitializer {
   TestCtorInitializer(AddressVector<ClassWithDestructor> &v)
     : c(ClassWithDestructor(v)) {}
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithDestructor' is still referred \
+object of type 'address_vector_tests::ClassWithDestructor' is still referred \
 to by the stack variable 'v' upon returning to the caller}}
 };
 
@@ -301,19 +301,19 @@ void testCtorInitializer() {
 ClassWithDestructor make1(AddressVector<ClassWithDestructor> &v) {
   return ClassWithDestructor(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithDestructor' is still referred \
+object of type 'address_vector_tests::ClassWithDestructor' is still referred \
 to by the stack variable 'v' upon returning to the caller}}
 }
 ClassWithDestructor make2(AddressVector<ClassWithDestructor> &v) {
   return make1(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithDestructor' is still referred \
+object of type 'address_vector_tests::ClassWithDestructor' is still referred \
 to by the stack variable 'v' upon returning to the caller}}
 }
 ClassWithDestructor make3(AddressVector<ClassWithDestructor> &v) {
   return make2(v);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'ClassWithDestructor' is still referred \
+object of type 'address_vector_tests::ClassWithDestructor' is still referred \
 to by the stack variable 'v' upon returning to the caller}}
 }
 
@@ -406,7 +406,7 @@ struct Foo {
 Foo make1(Foo **r) {
   return Foo(r);
   // no-elide-warning at -1 {{Address of stack memory associated with temporary \
-object of type 'Foo' is still referred to by the stack \
+object of type 'address_vector_tests::Foo' is still referred to by the stack \
 variable 'z' upon returning to the caller}}
 }
 

diff  --git a/clang/test/Analysis/cxx-uninitialized-object-inheritance.cpp b/clang/test/Analysis/cxx-uninitialized-object-inheritance.cpp
index 8456751173ffc..6d92b41251466 100644
--- a/clang/test/Analysis/cxx-uninitialized-object-inheritance.cpp
+++ b/clang/test/Analysis/cxx-uninitialized-object-inheritance.cpp
@@ -783,7 +783,7 @@ void fVirtualDiamondInheritanceTest3() {
 
 struct DynTBase1 {};
 struct DynTDerived1 : DynTBase1 {
-  int y; // expected-note{{uninitialized field 'static_cast<DynTDerived1 *>(this->bptr)->y'}}
+  int y; // expected-note{{uninitialized field 'static_cast<struct DynTDerived1 *>(this->bptr)->y'}}
 };
 
 struct DynamicTypeTest1 {
@@ -799,10 +799,10 @@ void fDynamicTypeTest1() {
 };
 
 struct DynTBase2 {
-  int x; // expected-note{{uninitialized field 'static_cast<DynTDerived2 *>(this->bptr)->DynTBase2::x'}}
+  int x; // expected-note{{uninitialized field 'static_cast<struct DynTDerived2 *>(this->bptr)->DynTBase2::x'}}
 };
 struct DynTDerived2 : DynTBase2 {
-  int y; // expected-note{{uninitialized field 'static_cast<DynTDerived2 *>(this->bptr)->y'}}
+  int y; // expected-note{{uninitialized field 'static_cast<struct DynTDerived2 *>(this->bptr)->y'}}
 };
 
 struct DynamicTypeTest2 {

diff  --git a/clang/test/Analysis/dump_egraph.cpp b/clang/test/Analysis/dump_egraph.cpp
index d1229b2634674..f695362cf0acb 100644
--- a/clang/test/Analysis/dump_egraph.cpp
+++ b/clang/test/Analysis/dump_egraph.cpp
@@ -23,5 +23,5 @@ void foo() {
 
 // CHECK: \"cluster\": \"t\", \"pointer\": \"{{0x[0-9a-f]+}}\", \"items\": [\l        \{ \"kind\": \"Default\", \"offset\": 0, \"value\": \"conj_$2\{int, LC5, no stmt, #1\}\"
 
-// CHECK: \"dynamic_types\": [\l      \{ \"region\": \"HeapSymRegion\{conj_$1\{S *, LC1, S{{[0-9]+}}, #1\}\}\", \"dyn_type\": \"S\", \"sub_classable\": false \}\l
+// CHECK: \"dynamic_types\": [\l      \{ \"region\": \"HeapSymRegion\{conj_$1\{struct S *, LC1, S{{[0-9]+}}, #1\}\}\", \"dyn_type\": \"struct S\", \"sub_classable\": false \}\l
 

diff  --git a/clang/test/Analysis/exploded-graph-rewriter/dynamic_types.cpp b/clang/test/Analysis/exploded-graph-rewriter/dynamic_types.cpp
index 01914a86ad4a5..b9e7671ecb03a 100644
--- a/clang/test/Analysis/exploded-graph-rewriter/dynamic_types.cpp
+++ b/clang/test/Analysis/exploded-graph-rewriter/dynamic_types.cpp
@@ -9,9 +9,9 @@ struct S {};
 void test() {
   // CHECK: Dynamic Types:
   // CHECK-SAME: <tr><td align="left"><table border="0"><tr>
-  // CHECK-SAME:   <td align="left">HeapSymRegion\{conj_$1\{S *, LC1,
+  // CHECK-SAME:   <td align="left">HeapSymRegion\{conj_$1\{struct S *, LC1,
   // CHECK-SAME:       S{{[0-9]*}}, #1\}\}</td>
-  // CHECK-SAME:   <td align="left">S</td>
+  // CHECK-SAME:   <td align="left">struct S</td>
   // CHECK-SAME: </tr></table></td></tr>
   new S;
 }

diff  --git a/clang/test/Analysis/initializers-cfg-output.cpp b/clang/test/Analysis/initializers-cfg-output.cpp
index 808bc8d51712e..14c1b1e99a416 100644
--- a/clang/test/Analysis/initializers-cfg-output.cpp
+++ b/clang/test/Analysis/initializers-cfg-output.cpp
@@ -33,8 +33,8 @@ class B : public virtual A {
   // CHECK:        [B3 (ENTRY)]
   // CHECK-NEXT:     Succs (1): B2
   // CHECK:        [B1]
-  // WARNINGS-NEXT:     1:  (CXXConstructExpr, A)
-  // ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), A)
+  // WARNINGS-NEXT:     1:  (CXXConstructExpr, class A)
+  // ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), class A)
   // CHECK-NEXT:     2: A([B1.1]) (Base initializer)
   // CHECK-NEXT:     Preds (1): B2
   // CHECK-NEXT:     Succs (1): B0
@@ -52,8 +52,8 @@ class B : public virtual A {
   // CHECK:        [B1]
   // CHECK-NEXT:     1: i
   // CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, LValueToRValue, int)
-  // WARNINGS-NEXT:     3: [B1.2] (CXXConstructExpr, A)
-  // ANALYZER-NEXT:     3: [B1.2] (CXXConstructExpr, A([B1.2]) (Base initializer), A)
+  // WARNINGS-NEXT:     3: [B1.2] (CXXConstructExpr, class A)
+  // ANALYZER-NEXT:     3: [B1.2] (CXXConstructExpr, A([B1.2]) (Base initializer), class A)
   // CHECK-NEXT:     4: A([B1.3]) (Base initializer)
   // CHECK-NEXT:     Preds (1): B2
   // CHECK-NEXT:     Succs (1): B0
@@ -72,8 +72,8 @@ class C : public virtual A {
   // CHECK:        [B3 (ENTRY)]
   // CHECK-NEXT:     Succs (1): B2
   // CHECK:        [B1]
-  // WARNINGS-NEXT:     1:  (CXXConstructExpr, A)
-  // ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), A)
+  // WARNINGS-NEXT:     1:  (CXXConstructExpr, class A)
+  // ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), class A)
   // CHECK-NEXT:     2: A([B1.1]) (Base initializer)
   // CHECK-NEXT:     Preds (1): B2
   // CHECK-NEXT:     Succs (1): B0
@@ -91,8 +91,8 @@ class C : public virtual A {
   // CHECK:        [B1]
   // CHECK-NEXT:     1: i
   // CHECK-NEXT:     2: [B1.1] (ImplicitCastExpr, LValueToRValue, int)
-  // WARNINGS-NEXT:     3: [B1.2] (CXXConstructExpr, A)
-  // ANALYZER-NEXT:     3: [B1.2] (CXXConstructExpr, A([B1.2]) (Base initializer), A)
+  // WARNINGS-NEXT:     3: [B1.2] (CXXConstructExpr, class A)
+  // ANALYZER-NEXT:     3: [B1.2] (CXXConstructExpr, A([B1.2]) (Base initializer), class A)
   // CHECK-NEXT:     4: A([B1.3]) (Base initializer)
   // CHECK-NEXT:     Preds (1): B2
   // CHECK-NEXT:     Succs (1): B0
@@ -117,27 +117,27 @@ class TestOrder : public C, public B, public A {
 // CHECK:        [B4 (ENTRY)]
 // CHECK-NEXT:     Succs (1): B3
 // CHECK:        [B1]
-// WARNINGS-NEXT:     1:  (CXXConstructExpr, C)
-// ANALYZER-NEXT:     1:  (CXXConstructExpr, C() (Base initializer), C)
+// WARNINGS-NEXT:     1:  (CXXConstructExpr, class C)
+// ANALYZER-NEXT:     1:  (CXXConstructExpr, C() (Base initializer), class C)
 // CHECK-NEXT:     2: C([B1.1]) (Base initializer)
-// WARNINGS-NEXT:     3:  (CXXConstructExpr, B)
-// ANALYZER-NEXT:     3:  (CXXConstructExpr, B() (Base initializer), B)
+// WARNINGS-NEXT:     3:  (CXXConstructExpr, class B)
+// ANALYZER-NEXT:     3:  (CXXConstructExpr, B() (Base initializer), class B)
 // CHECK-NEXT:     4: B([B1.3]) (Base initializer)
-// WARNINGS-NEXT:     5:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:     5:  (CXXConstructExpr, A() (Base initializer), A)
+// WARNINGS-NEXT:     5:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     5:  (CXXConstructExpr, A() (Base initializer), class A)
 // CHECK-NEXT:     6: A([B1.5]) (Base initializer)
 // CHECK-NEXT:     7: i(/*implicit*/(int)0) (Member initializer)
 // CHECK-NEXT:     8: this
 // CHECK-NEXT:    9: [B1.8]->i
 // CHECK-NEXT:    10: r([B1.9]) (Member initializer)
-// WARNINGS-NEXT:    11:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:    11:  (CXXConstructExpr, [B1.12], A)
+// WARNINGS-NEXT:    11:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:    11:  (CXXConstructExpr, [B1.12], class A)
 // CHECK-NEXT:    12: A a;
 // CHECK-NEXT:     Preds (2): B2 B3
 // CHECK-NEXT:     Succs (1): B0
 // CHECK:        [B2]
-// WARNINGS-NEXT:     1:  (CXXConstructExpr, A)
-// ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), A)
+// WARNINGS-NEXT:     1:  (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     1:  (CXXConstructExpr, A() (Base initializer), class A)
 // CHECK-NEXT:     2: A([B2.1]) (Base initializer)
 // CHECK-NEXT:     Preds (1): B3
 // CHECK-NEXT:     Succs (1): B1
@@ -244,8 +244,8 @@ class TestMoreControlFlow : public virtual A {
 // CHECK-NEXT:     Succs (1): B9
 // CHECK:        [B1]
 // CHECK-NEXT:     1: [B4.2] ? [B2.1] : [B3.1]
-// WARNINGS-NEXT:     2: [B1.1] (CXXConstructExpr, A)
-// ANALYZER-NEXT:     2: [B1.1] (CXXConstructExpr, a([B1.1]) (Member initializer), A)
+// WARNINGS-NEXT:     2: [B1.1] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     2: [B1.1] (CXXConstructExpr, a([B1.1]) (Member initializer), class A)
 // CHECK-NEXT:     3: a([B1.2]) (Member initializer)
 // CHECK-NEXT:     Preds (2): B2 B3
 // CHECK-NEXT:     Succs (1): B0
@@ -265,8 +265,8 @@ class TestMoreControlFlow : public virtual A {
 // CHECK-NEXT:     Succs (2): B2 B3
 // CHECK:        [B5]
 // CHECK-NEXT:     1: [B8.2] ? [B6.1] : [B7.1]
-// WARNINGS-NEXT:     2: [B5.1] (CXXConstructExpr, A)
-// ANALYZER-NEXT:     2: [B5.1] (CXXConstructExpr, A([B5.1]) (Base initializer), A)
+// WARNINGS-NEXT:     2: [B5.1] (CXXConstructExpr, class A)
+// ANALYZER-NEXT:     2: [B5.1] (CXXConstructExpr, A([B5.1]) (Base initializer), class A)
 // CHECK-NEXT:     3: A([B5.2]) (Base initializer)
 // CHECK-NEXT:     Preds (2): B6 B7
 // CHECK-NEXT:     Succs (1): B4

diff  --git a/clang/test/Analysis/inlining/Inputs/expected-plists/path-notes.cpp.plist b/clang/test/Analysis/inlining/Inputs/expected-plists/path-notes.cpp.plist
index 6215d48ebd2c8..a857fd8b94c3f 100644
--- a/clang/test/Analysis/inlining/Inputs/expected-plists/path-notes.cpp.plist
+++ b/clang/test/Analysis/inlining/Inputs/expected-plists/path-notes.cpp.plist
@@ -1384,7 +1384,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>9261b182b35fa6b6f1d0c750c41f4933</string>
+   <key>issue_hash_content_of_line_in_context</key><string>675157873c1414a885eb1f429b26f389</string>
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
@@ -1714,7 +1714,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>a073d3adfe741b2e3d871c7442446e3b</string>
+   <key>issue_hash_content_of_line_in_context</key><string>aff5e83726a1ce1144580e4c80bde47c</string>
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
@@ -2046,7 +2046,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>37a2ac98868b90fdc54ac673daab004f</string>
+   <key>issue_hash_content_of_line_in_context</key><string>9484c73e190dfe4b8c6c5bdfad9700c1</string>
   <key>issue_context_kind</key><string>C++ method</string>
   <key>issue_context</key><string>operator=</string>
   <key>issue_hash_function_offset</key><string>1</string>
@@ -2381,7 +2381,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>350efb59f475dca2427e8ac4c72f33f1</string>
+   <key>issue_hash_content_of_line_in_context</key><string>a0f0ac76cf282b61236bfac7eb2eca62</string>
   <key>issue_context_kind</key><string>C++ method</string>
   <key>issue_context</key><string>operator=</string>
   <key>issue_hash_function_offset</key><string>1</string>
@@ -4188,7 +4188,7 @@
    <key>type</key><string>Dereference of null pointer</string>
    <key>check_name</key><string>core.NullDereference</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>59af00b5ddf4849d000d583bb5722c8a</string>
+   <key>issue_hash_content_of_line_in_context</key><string>749bda64658e48896477213e90176f5e</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>test</string>
   <key>issue_hash_function_offset</key><string>2</string>
@@ -4750,7 +4750,7 @@
    <key>type</key><string>Called C++ object pointer is null</string>
    <key>check_name</key><string>core.CallAndMessage</string>
    <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f5a1486363a2814a8268d71daf54a2f8</string>
+   <key>issue_hash_content_of_line_in_context</key><string>8b577b362ffa5a7290d00d03635c1fca</string>
   <key>issue_context_kind</key><string>function</string>
   <key>issue_context</key><string>testDeclRefExprToReferenceInGetDerefExpr</string>
   <key>issue_hash_function_offset</key><string>8</string>

diff  --git a/clang/test/Analysis/lambdas.cpp b/clang/test/Analysis/lambdas.cpp
index 4db1aeed6234f..fdd1c61164f4c 100644
--- a/clang/test/Analysis/lambdas.cpp
+++ b/clang/test/Analysis/lambdas.cpp
@@ -399,8 +399,8 @@ int f() {
 // CHECK:   Succs (1): B1
 // CHECK: [B1]
 // CHECK:   1: x
-// CHECK:   2: [B1.1] (ImplicitCastExpr, NoOp, const X)
-// CHECK:   3: [B1.2] (CXXConstructExpr, X)
+// CHECK:   2: [B1.1] (ImplicitCastExpr, NoOp, const struct X)
+// CHECK:   3: [B1.2] (CXXConstructExpr, struct X)
 // CHECK:   4: [x]     {
 // CHECK:    }
 // CHECK:   5: (void)[B1.4] (CStyleCastExpr, ToVoid, void)

diff  --git a/clang/test/Analysis/lifetime-cfg-output.cpp b/clang/test/Analysis/lifetime-cfg-output.cpp
index f8e93c603745c..2c574c7cae8a4 100644
--- a/clang/test/Analysis/lifetime-cfg-output.cpp
+++ b/clang/test/Analysis/lifetime-cfg-output.cpp
@@ -58,14 +58,14 @@ class A {
 // CHECK:       [B2 (ENTRY)]
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    3: a
-// CHECK-NEXT:    4: [B1.3] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    4: [B1.3] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    5: const A &b = a;
-// CHECK-NEXT:    6: A() (CXXConstructExpr, A)
+// CHECK-NEXT:    6: A() (CXXConstructExpr, class A)
 // CHECK-NEXT:    7: [B1.6] (BindTemporary)
-// CHECK-NEXT:    8: [B1.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK-NEXT:    8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK-NEXT:    9: [B1.8]
 // CHECK-NEXT:   10: const A &c = A();
 // CHECK-NEXT:   11: [B1.10] (Lifetime ends)
@@ -84,9 +84,9 @@ void test_const_ref() {
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A[2])
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A[2])
 // CHECK-NEXT:    2: A a[2];
-// CHECK-NEXT:    3:  (CXXConstructExpr, A[0])
+// CHECK-NEXT:    3:  (CXXConstructExpr, class A[0])
 // CHECK-NEXT:    4: A b[0];
 // lifetime of a ends when its destructors are run
 // CHECK-NEXT:    5: [B1.2] (Lifetime ends)
@@ -104,15 +104,15 @@ void test_array() {
 // CHECK:      [B2 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
-// CHECK-NEXT:    3:  (CXXConstructExpr, A)
+// CHECK-NEXT:    3:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A c;
-// CHECK-NEXT:    5:  (CXXConstructExpr, A)
+// CHECK-NEXT:    5:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    6: A d;
 // CHECK-NEXT:    7: [B1.6] (Lifetime ends)
 // CHECK-NEXT:    8: [B1.4] (Lifetime ends)
-// CHECK-NEXT:    9:  (CXXConstructExpr, A)
+// CHECK-NEXT:    9:  (CXXConstructExpr, class A)
 // CHECK-NEXT:   10: A b;
 // CHECK-NEXT:   11: [B1.10] (Lifetime ends)
 // CHECK-NEXT:   12: [B1.2] (Lifetime ends)
@@ -132,7 +132,7 @@ void test_scope() {
 // CHECK:      [B4 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B3
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B1.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B3.4] (Lifetime ends)
@@ -146,9 +146,9 @@ void test_scope() {
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
-// CHECK-NEXT:    3:  (CXXConstructExpr, A)
+// CHECK-NEXT:    3:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A b;
 // CHECK-NEXT:    5: UV
 // CHECK-NEXT:    6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -174,23 +174,23 @@ void test_return() {
 // CHECK-NEXT:    Preds (2): B2 B3
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B2]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B2.2] (Lifetime ends)
 // CHECK-NEXT:    Preds (1): B4
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    Preds (1): B4
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B4]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    3: a
 // CHECK-NEXT:    4: [B4.3] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    5: [B4.4] (CXXConstructExpr, A)
+// CHECK-NEXT:    5: [B4.4] (CXXConstructExpr, class A)
 // CHECK-NEXT:    6: A b = a;
 // CHECK-NEXT:    7: b
 // CHECK-NEXT:    8: [B4.7] (ImplicitCastExpr, NoOp, const class A)
@@ -215,14 +215,14 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:    Succs (1): B8
 // CHECK:       [B1]
 // CHECK-NEXT:    1: [B8.6] (Lifetime ends)
-// CHECK-NEXT:    2:  (CXXConstructExpr, A)
+// CHECK-NEXT:    2:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    3: A e;
 // CHECK-NEXT:    4: [B1.3] (Lifetime ends)
 // CHECK-NEXT:    5: [B8.2] (Lifetime ends)
 // CHECK-NEXT:    Preds (2): B2 B5
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B2]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A d;
 // CHECK-NEXT:    3: [B2.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B4.2] (Lifetime ends)
@@ -236,7 +236,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B4
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B4]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: UV
 // CHECK-NEXT:    4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -244,7 +244,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B8
 // CHECK-NEXT:    Succs (2): B3 B2
 // CHECK:       [B5]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A d;
 // CHECK-NEXT:    3: [B5.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B7.2] (Lifetime ends)
@@ -258,7 +258,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B7
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B7]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: UV
 // CHECK-NEXT:    4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -266,11 +266,11 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B8
 // CHECK-NEXT:    Succs (2): B6 B5
 // CHECK:       [B8]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    3: a
 // CHECK-NEXT:    4: [B8.3] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    5: [B8.4] (CXXConstructExpr, A)
+// CHECK-NEXT:    5: [B8.4] (CXXConstructExpr, class A)
 // CHECK-NEXT:    6: A b = a;
 // CHECK-NEXT:    7: b
 // CHECK-NEXT:    8: [B8.7] (ImplicitCastExpr, NoOp, const class A)
@@ -310,7 +310,7 @@ void test_if_jumps() {
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B4
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B4.4] (Lifetime ends)
@@ -319,7 +319,7 @@ void test_if_jumps() {
 // CHECK:       [B4]
 // CHECK-NEXT:    1: a
 // CHECK-NEXT:    2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    3: [B4.2] (CXXConstructExpr, A)
+// CHECK-NEXT:    3: [B4.2] (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A b = a;
 // CHECK-NEXT:    5: b
 // CHECK-NEXT:    6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
@@ -331,7 +331,7 @@ void test_if_jumps() {
 // CHECK-NEXT:    Preds (2): B2 B5
 // CHECK-NEXT:    Succs (2): B3 B1
 // CHECK:       [B5]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    Preds (1): B6
 // CHECK-NEXT:    Succs (1): B4
@@ -347,7 +347,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:    Succs (1): B11
 // CHECK:       [B1]
 // CHECK-NEXT:    1: [B10.4] (Lifetime ends)
-// CHECK-NEXT:    2:  (CXXConstructExpr, A)
+// CHECK-NEXT:    2:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    3: A e;
 // CHECK-NEXT:    4: [B1.3] (Lifetime ends)
 // CHECK-NEXT:    5: [B11.2] (Lifetime ends)
@@ -357,7 +357,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:    Preds (2): B3 B6
 // CHECK-NEXT:    Succs (1): B10
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A d;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B9.2] (Lifetime ends)
@@ -395,7 +395,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B9
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B9]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: UV
 // CHECK-NEXT:    4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -405,7 +405,7 @@ void test_while_implicit_scope() {
 // CHECK:       [B10]
 // CHECK-NEXT:    1: a
 // CHECK-NEXT:    2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    3: [B10.2] (CXXConstructExpr, A)
+// CHECK-NEXT:    3: [B10.2] (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A b = a;
 // CHECK-NEXT:    5: b
 // CHECK-NEXT:    6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
@@ -417,7 +417,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:    Preds (2): B2 B11
 // CHECK-NEXT:    Succs (2): B9 B1
 // CHECK:       [B11]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    Preds (1): B12
 // CHECK-NEXT:    Succs (1): B10
@@ -441,7 +441,7 @@ void test_while_jumps() {
 // CHECK:       [B12 (ENTRY)]
 // CHECK-NEXT:    Succs (1): B11
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A d;
 // CHECK-NEXT:    3: [B1.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B11.2] (Lifetime ends)
@@ -454,7 +454,7 @@ void test_while_jumps() {
 // CHECK-NEXT:    Preds (2): B3 B6
 // CHECK-NEXT:    Succs (2): B10 B1
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B9.2] (Lifetime ends)
@@ -489,7 +489,7 @@ void test_while_jumps() {
 // CHECK-NEXT:    Preds (1): B9
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B9]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A b;
 // CHECK-NEXT:    3: UV
 // CHECK-NEXT:    4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -500,7 +500,7 @@ void test_while_jumps() {
 // CHECK-NEXT:    Preds (1): B2
 // CHECK-NEXT:    Succs (1): B9
 // CHECK:       [B11]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    Preds (1): B12
 // CHECK-NEXT:    Succs (1): B9
@@ -532,7 +532,7 @@ void test_do_jumps() {
 // CHECK-NEXT:    Preds (1): B3
 // CHECK-NEXT:    Succs (1): B4
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A c;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B4.4] (Lifetime ends)
@@ -541,7 +541,7 @@ void test_do_jumps() {
 // CHECK:       [B4]
 // CHECK-NEXT:    1: a
 // CHECK-NEXT:    2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    3: [B4.2] (CXXConstructExpr, A)
+// CHECK-NEXT:    3: [B4.2] (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A b = a;
 // CHECK-NEXT:    5: b
 // CHECK-NEXT:    6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
@@ -553,7 +553,7 @@ void test_do_jumps() {
 // CHECK-NEXT:    Preds (2): B2 B5
 // CHECK-NEXT:    Succs (2): B3 B1
 // CHECK:       [B5]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    Preds (1): B6
 // CHECK-NEXT:    Succs (1): B4
@@ -569,7 +569,7 @@ void test_for_implicit_scope() {
 // CHECK:       [B1]
 // CHECK-NEXT:    1: [B10.4] (Lifetime ends)
 // CHECK-NEXT:    2: [B11.4] (Lifetime ends)
-// CHECK-NEXT:    3:  (CXXConstructExpr, A)
+// CHECK-NEXT:    3:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A f;
 // CHECK-NEXT:    5: [B1.4] (Lifetime ends)
 // CHECK-NEXT:    6: [B11.2] (Lifetime ends)
@@ -579,7 +579,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:    Preds (2): B3 B6
 // CHECK-NEXT:    Succs (1): B10
 // CHECK:       [B3]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A e;
 // CHECK-NEXT:    3: [B3.2] (Lifetime ends)
 // CHECK-NEXT:    4: [B9.2] (Lifetime ends)
@@ -617,7 +617,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:    Preds (1): B9
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B9]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A d;
 // CHECK-NEXT:    3: UV
 // CHECK-NEXT:    4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -627,7 +627,7 @@ void test_for_implicit_scope() {
 // CHECK:       [B10]
 // CHECK-NEXT:    1: b
 // CHECK-NEXT:    2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:    3: [B10.2] (CXXConstructExpr, A)
+// CHECK-NEXT:    3: [B10.2] (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A c = b;
 // CHECK-NEXT:    5: c
 // CHECK-NEXT:    6: [B10.5] (ImplicitCastExpr, NoOp, const class A)
@@ -639,9 +639,9 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:    Preds (2): B2 B11
 // CHECK-NEXT:    Succs (2): B9 B1
 // CHECK:       [B11]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
-// CHECK-NEXT:    3:  (CXXConstructExpr, A)
+// CHECK-NEXT:    3:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    4: A b;
 // CHECK-NEXT:    Preds (1): B12
 // CHECK-NEXT:    Succs (1): B10
@@ -665,7 +665,7 @@ void test_for_jumps() {
 // CHECK:       [B2 (ENTRY)]
 // CHECK-NEXT:    Succs (1): B1
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, A)
+// CHECK-NEXT:    1:  (CXXConstructExpr, class A)
 // CHECK-NEXT:    2: A a;
 // CHECK-NEXT:    3: int n;
 // CHECK-NEXT:    4: n
@@ -762,7 +762,7 @@ struct B {
 // CHECK-NEXT:    Succs (1): B0
 // CHECK:       [B2]
 // CHECK-NEXT:   label:
-// CHECK-NEXT:    1:  (CXXConstructExpr, B)
+// CHECK-NEXT:    1:  (CXXConstructExpr, struct B)
 // CHECK-NEXT:    2: B b;
 // CHECK-NEXT:    3: [B2.2] (Lifetime ends)
 // CHECK-NEXT:    T: goto label;

diff  --git a/clang/test/Analysis/malloc-sizeof.cpp b/clang/test/Analysis/malloc-sizeof.cpp
index c787a7648a2c2..77ddf3412b52b 100644
--- a/clang/test/Analysis/malloc-sizeof.cpp
+++ b/clang/test/Analysis/malloc-sizeof.cpp
@@ -12,12 +12,12 @@ struct B {};
 
 void foo(unsigned int unsignedInt, unsigned int readSize) {
   // Verify the checker is working as expected.
-  A* a = static_cast<A*>(malloc(sizeof(int))); // expected-warning {{Result of 'malloc' is converted to a pointer of type 'A', which is incompatible with sizeof operand type 'int'}}
+  A* a = static_cast<A*>(malloc(sizeof(int))); // expected-warning {{Result of 'malloc' is converted to a pointer of type 'struct A', which is incompatible with sizeof operand type 'int'}}
   free(a);
 }
 
 void bar() {
-  A *x = static_cast<A*>(calloc(10, sizeof(void*))); // expected-warning {{Result of 'calloc' is converted to a pointer of type 'A', which is incompatible with sizeof operand type 'void *'}}
+  A *x = static_cast<A*>(calloc(10, sizeof(void*))); // expected-warning {{Result of 'calloc' is converted to a pointer of type 'struct A', which is incompatible with sizeof operand type 'void *'}}
   // sizeof(void*) is compatible with any pointer.
   A **y = static_cast<A**>(calloc(10, sizeof(void*))); // no-warning
   free(x);

diff  --git a/clang/test/Analysis/memory-model.cpp b/clang/test/Analysis/memory-model.cpp
index ee5d4d4d656e7..7e1d23e43b692 100644
--- a/clang/test/Analysis/memory-model.cpp
+++ b/clang/test/Analysis/memory-model.cpp
@@ -53,9 +53,9 @@ void string() {
 }
 
 void struct_simple_ptr(S *a) {
-  clang_analyzer_dump(a);             // expected-warning {{SymRegion{reg_$0<S * a>}}}
-  clang_analyzer_dumpExtent(a);       // expected-warning {{extent_$1{SymRegion{reg_$0<S * a>}}}}
-  clang_analyzer_dumpElementCount(a); // expected-warning {{(extent_$1{SymRegion{reg_$0<S * a>}}) / 4}}
+  clang_analyzer_dump(a);             // expected-warning {{SymRegion{reg_$0<struct S * a>}}}
+  clang_analyzer_dumpExtent(a);       // expected-warning {{extent_$1{SymRegion{reg_$0<struct S * a>}}}}
+  clang_analyzer_dumpElementCount(a); // expected-warning {{(extent_$1{SymRegion{reg_$0<struct S * a>}}) / 4}}
 }
 
 void field_ref(S a) {
@@ -65,7 +65,7 @@ void field_ref(S a) {
 }
 
 void field_ptr(S *a) {
-  clang_analyzer_dump(&a->f);             // expected-warning {{SymRegion{reg_$0<S * a>}.f}}
+  clang_analyzer_dump(&a->f);             // expected-warning {{SymRegion{reg_$0<struct S * a>}.f}}
   clang_analyzer_dumpExtent(&a->f);       // expected-warning {{4 S64b}}
   clang_analyzer_dumpElementCount(&a->f); // expected-warning {{1 S64b}}
 }

diff  --git a/clang/test/Analysis/missing-bind-temporary.cpp b/clang/test/Analysis/missing-bind-temporary.cpp
index 2781c46eabace..18204929bcbe0 100644
--- a/clang/test/Analysis/missing-bind-temporary.cpp
+++ b/clang/test/Analysis/missing-bind-temporary.cpp
@@ -21,8 +21,8 @@ class B {
 
 // CHECK: void foo(int)
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], B)
-// CHECK-NEXT:    2: B i;
+// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], class variant_0::B)
+// CHECK-NEXT:    2: variant_0::B i;
 // CHECK-NEXT:    3: operator=
 // CHECK-NEXT:    4: [B1.3] (ImplicitCastExpr, FunctionToPointerDecay, class variant_0::B &(*)(class variant_0::B &&) noexcept)
 // CHECK-NEXT:    5: i
@@ -31,7 +31,7 @@ class B {
 // CHECK-NEXT:    8: [B1.7]
 // CHECK-NEXT:    9: [B1.5] = [B1.8] (OperatorCall)
 // CHECK-NEXT:   10: ~variant_0::B() (Temporary object destructor)
-// CHECK-NEXT:   11: [B1.2].~B() (Implicit destructor)
+// CHECK-NEXT:   11: [B1.2].~variant_0::B() (Implicit destructor)
 void foo(int) {
   B i;
   i = {};
@@ -63,15 +63,15 @@ class B {
 // destructor.
 // CHECK: template<> void foo<int>(int)
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], B)
-// CHECK-NEXT:    2: B i;
+// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], class variant_1::B)
+// CHECK-NEXT:    2: variant_1::B i;
 // CHECK-NEXT:    3: operator=
 // CHECK-NEXT:    4: [B1.3] (ImplicitCastExpr, FunctionToPointerDecay, class variant_1::B &(*)(class variant_1::B &&) noexcept)
 // CHECK-NEXT:    5: i
 // CHECK-NEXT:    6: {} (CXXConstructExpr, class variant_1::B)
 // CHECK-NEXT:    7: [B1.6]
 // CHECK-NEXT:    8: [B1.5] = [B1.7] (OperatorCall)
-// CHECK-NEXT:    9: [B1.2].~B() (Implicit destructor)
+// CHECK-NEXT:    9: [B1.2].~variant_1::B() (Implicit destructor)
 template <typename T> void foo(T) {
   B i;
   i = {};
@@ -103,8 +103,8 @@ class B {
 
 // CHECK: template<> void foo<int>(int)
 // CHECK:       [B1]
-// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], B)
-// CHECK-NEXT:    2: B i;
+// CHECK-NEXT:    1:  (CXXConstructExpr, [B1.2], class variant_2::B)
+// CHECK-NEXT:    2: variant_2::B i;
 // CHECK-NEXT:    3: operator=
 // CHECK-NEXT:    4: [B1.3] (ImplicitCastExpr, FunctionToPointerDecay, class variant_2::B &(*)(class variant_2::B &&) noexcept)
 // CHECK-NEXT:    5: i
@@ -114,7 +114,7 @@ class B {
 // CHECK-NEXT:    9: [B1.8]
 // CHECK-NEXT:   10: [B1.5] = [B1.9] (OperatorCall)
 // CHECK-NEXT:   11: ~variant_2::B() (Temporary object destructor)
-// CHECK-NEXT:   12: [B1.2].~B() (Implicit destructor)
+// CHECK-NEXT:   12: [B1.2].~variant_2::B() (Implicit destructor)
 template <typename T> void foo(T) {
   B i;
   i = {};

diff  --git a/clang/test/Analysis/more-dtors-cfg-output.cpp b/clang/test/Analysis/more-dtors-cfg-output.cpp
index 044e0b7d6dcfd..21824506c73c8 100644
--- a/clang/test/Analysis/more-dtors-cfg-output.cpp
+++ b/clang/test/Analysis/more-dtors-cfg-output.cpp
@@ -46,7 +46,7 @@ void elided_assign() {
   Foo x = get_foo();
 }
 // CHECK: void elided_assign()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Implicit destructor)
 
@@ -54,7 +54,7 @@ void nonelided_assign() {
   Bar x = (const Bar &)get_bar();
 }
 // CHECK: void nonelided_assign()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~Bar() (Implicit destructor)
 
@@ -62,7 +62,7 @@ void elided_paren_init() {
   Foo x(get_foo());
 }
 // CHECK: void elided_paren_init()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Implicit destructor)
 
@@ -70,7 +70,7 @@ void nonelided_paren_init() {
   Bar x((const Bar &)get_bar());
 }
 // CHECK: void nonelided_paren_init()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~Bar() (Implicit destructor)
 
@@ -78,7 +78,7 @@ void elided_brace_init() {
   Foo x{get_foo()};
 }
 // CHECK: void elided_brace_init()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Implicit destructor)
 
@@ -86,7 +86,7 @@ void nonelided_brace_init() {
   Bar x{(const Bar &)get_bar()};
 }
 // CHECK: void nonelided_brace_init()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~Bar() (Implicit destructor)
 
@@ -97,7 +97,7 @@ void elided_lambda_capture_init() {
   auto z = [x=get_foo()]() {};
 }
 // CHECK: void elided_lambda_capture_init()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~(lambda at {{.*}})() (Temporary object destructor)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~(lambda at {{.*}})() (Implicit destructor)
@@ -107,7 +107,7 @@ void nonelided_lambda_capture_init() {
   auto z = [x((const Bar &)get_bar())]() {};
 }
 // CHECK: void nonelided_lambda_capture_init()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CXX14: ~(lambda at {{.*}})() (Temporary object destructor)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~(lambda at {{.*}})() (Implicit destructor)
@@ -117,9 +117,9 @@ Foo elided_return_stmt_expr() {
   return ({ get_foo(); });
 }
 // CHECK: Foo elided_return_stmt_expr()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 
 void elided_stmt_expr() {
@@ -127,7 +127,7 @@ void elided_stmt_expr() {
   ({ get_foo(); });
 }
 // CHECK: void elided_stmt_expr()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Temporary object destructor)
 
@@ -139,7 +139,7 @@ void elided_stmt_expr_multiple_stmts() {
 }
 // CHECK: void elided_stmt_expr_multiple_stmts()
 // CHECK: ~Bar() (Temporary object destructor)
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Temporary object destructor)
 
@@ -148,7 +148,7 @@ void unelided_stmt_expr() {
   ({ (const Bar &)get_bar(); });
 }
 // CHECK: void unelided_stmt_expr()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~Bar() (Temporary object destructor)
 
@@ -156,8 +156,8 @@ void elided_aggregate_init() {
   TwoFoos x{get_foo(), get_foo()};
 }
 // CHECK: void elided_aggregate_init()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~TwoFoos() (Implicit destructor)
@@ -166,8 +166,8 @@ void nonelided_aggregate_init() {
   TwoBars x{(const Bar &)get_bar(), (const Bar &)get_bar()};
 }
 // CHECK: void nonelided_aggregate_init()
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
-// CHECK: (CXXConstructExpr{{.*}}, Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
+// CHECK: (CXXConstructExpr{{.*}}, struct Bar)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~Bar() (Temporary object destructor)
 // CHECK: ~TwoBars() (Implicit destructor)
@@ -176,8 +176,8 @@ TwoFoos return_aggregate_init() {
   return TwoFoos{get_foo(), get_foo()};
 }
 // CHECK: TwoFoos return_aggregate_init()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~TwoFoos() (Temporary object destructor)
 // CXX14: ~Foo() (Temporary object destructor)
 // CXX14: ~Foo() (Temporary object destructor)
@@ -196,7 +196,7 @@ void not_lifetime_extended() {
   puts("one destroyed before, one destroyed after");
 }
 // CHECK: void not_lifetime_extended()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CHECK: ~Foo() (Temporary object destructor)
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: one destroyed before, one destroyed after
@@ -206,15 +206,15 @@ void compound_literal() {
   (void)(Bar[]){{}, {}};
 }
 // CHECK: void compound_literal()
-// CHECK: (CXXConstructExpr, Bar)
-// CHECK: (CXXConstructExpr, Bar)
+// CHECK: (CXXConstructExpr, struct Bar)
+// CHECK: (CXXConstructExpr, struct Bar)
 // CHECK: ~Bar[2]() (Temporary object destructor)
 
 Foo elided_return() {
   return get_foo();
 }
 // CHECK: Foo elided_return()
-// CXX14: (CXXConstructExpr{{.*}}, Foo)
+// CXX14: (CXXConstructExpr{{.*}}, struct Foo)
 // CXX14: ~Foo() (Temporary object destructor)
 
 auto elided_return_lambda() {
@@ -258,7 +258,7 @@ void default_ctor_with_default_arg() {
   DefaultArgInCtor qux[3];
 }
 // CHECK: void default_ctor_with_default_arg()
-// CHECK: CXXConstructExpr, {{.*}}, DefaultArgInCtor[3]
+// CHECK: CXXConstructExpr, {{.*}}, struct DefaultArgInCtor[3]
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Temporary object destructor)
 // CHECK: .~DefaultArgInCtor[3]() (Implicit destructor)
@@ -268,7 +268,7 @@ void new_default_ctor_with_default_arg(long count) {
   new DefaultArgInCtor[count];
 }
 // CHECK: void new_default_ctor_with_default_arg(long count)
-// CHECK: CXXConstructExpr, {{.*}}, DefaultArgInCtor[]
+// CHECK: CXXConstructExpr, {{.*}}, struct DefaultArgInCtor[]
 // CXX14: ~Foo() (Temporary object destructor)
 // CHECK: ~Foo() (Temporary object destructor)
 

diff  --git a/clang/test/Analysis/scopes-cfg-output.cpp b/clang/test/Analysis/scopes-cfg-output.cpp
index 61025c4fff941..ef2cac9538163 100644
--- a/clang/test/Analysis/scopes-cfg-output.cpp
+++ b/clang/test/Analysis/scopes-cfg-output.cpp
@@ -34,9 +34,9 @@ extern const bool UV;
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], A[2])
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], class A[2])
 // CHECK-NEXT:   3: A a[2];
-// CHECK-NEXT:   4:  (CXXConstructExpr, [B1.5], A[0])
+// CHECK-NEXT:   4:  (CXXConstructExpr, [B1.5], class A[0])
 // CHECK-NEXT:   5: A b[0];
 // CHECK-NEXT:   6: [B1.3].~A[2]() (Implicit destructor)
 // CHECK-NEXT:   7: CFGScopeEnd(a)
@@ -53,17 +53,17 @@ void test_array() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B1]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   4: CFGScopeBegin(c)
-// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], A)
+// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], class A)
 // CHECK-NEXT:   6: A c;
-// CHECK-NEXT:   7:  (CXXConstructExpr, [B1.8], A)
+// CHECK-NEXT:   7:  (CXXConstructExpr, [B1.8], class A)
 // CHECK-NEXT:   8: A d;
 // CHECK-NEXT:   9: [B1.8].~A() (Implicit destructor)
 // CHECK-NEXT:  10: [B1.6].~A() (Implicit destructor)
 // CHECK-NEXT:  11: CFGScopeEnd(c)
-// CHECK-NEXT:  12:  (CXXConstructExpr, [B1.13], A)
+// CHECK-NEXT:  12:  (CXXConstructExpr, [B1.13], class A)
 // CHECK-NEXT:  13: A b;
 // CHECK-NEXT:  14: [B1.13].~A() (Implicit destructor)
 // CHECK-NEXT:  15: [B1.3].~A() (Implicit destructor)
@@ -83,7 +83,7 @@ void test_scope() {
 // CHECK:      [B4 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B3
 // CHECK:      [B1]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B3.5].~A() (Implicit destructor)
@@ -100,9 +100,9 @@ void test_scope() {
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B3]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
 // CHECK-NEXT:   3: A a;
-// CHECK-NEXT:   4:  (CXXConstructExpr, [B3.5], A)
+// CHECK-NEXT:   4:  (CXXConstructExpr, [B3.5], class A)
 // CHECK-NEXT:   5: A b;
 // CHECK-NEXT:   6: UV
 // CHECK-NEXT:   7: [B3.6] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -129,7 +129,7 @@ void test_return() {
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B2.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B2.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: [B2.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: CFGScopeEnd(c)
@@ -137,7 +137,7 @@ void test_return() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B3]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: CFGScopeEnd(c)
@@ -145,12 +145,12 @@ void test_return() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B4]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   4: CFGScopeBegin(b)
 // CHECK-NEXT:   5: a
 // CHECK-NEXT:   6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   7: [B4.6] (CXXConstructExpr, [B4.8], A)
+// CHECK-NEXT:   7: [B4.6] (CXXConstructExpr, [B4.8], class A)
 // CHECK-NEXT:   8: A b = a;
 // CHECK-NEXT:   9: b
 // CHECK-NEXT:  10: [B4.9] (ImplicitCastExpr, NoOp, const class A)
@@ -175,7 +175,7 @@ void test_if_implicit_scope() {
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B8.8].~A() (Implicit destructor)
 // CHECK-NEXT:   2: CFGScopeEnd(b)
-// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], A)
+// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
 // CHECK-NEXT:   4: A e;
 // CHECK-NEXT:   5: [B1.4].~A() (Implicit destructor)
 // CHECK-NEXT:   6: [B8.3].~A() (Implicit destructor)
@@ -183,7 +183,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B2 B5
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B4.3].~A() (Implicit destructor)
@@ -202,7 +202,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B4]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: UV
 // CHECK-NEXT:   5: [B4.4] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -210,7 +210,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Preds (1): B8
 // CHECK-NEXT:   Succs (2): B3 B2
 // CHECK:      [B5]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B5.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B5.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B5.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B7.3].~A() (Implicit destructor)
@@ -229,7 +229,7 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B7]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: UV
 // CHECK-NEXT:   5: [B7.4] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -238,12 +238,12 @@ void test_if_implicit_scope() {
 // CHECK-NEXT:   Succs (2): B6 B5
 // CHECK:      [B8]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B8.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B8.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   4: CFGScopeBegin(b)
 // CHECK-NEXT:   5: a
 // CHECK-NEXT:   6: [B8.5] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   7: [B8.6] (CXXConstructExpr, [B8.8], A)
+// CHECK-NEXT:   7: [B8.6] (CXXConstructExpr, [B8.8], class A)
 // CHECK-NEXT:   8: A b = a;
 // CHECK-NEXT:   9: b
 // CHECK-NEXT:  10: [B8.9] (ImplicitCastExpr, NoOp, const class A)
@@ -284,7 +284,7 @@ void test_if_jumps() {
 // CHECK-NEXT:   Succs (1): B4
 // CHECK:      [B3]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: CFGScopeEnd(c)
@@ -296,7 +296,7 @@ void test_if_jumps() {
 // CHECK-NEXT:   1: CFGScopeBegin(b)
 // CHECK-NEXT:   2: a
 // CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], A)
+// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], class A)
 // CHECK-NEXT:   5: A b = a;
 // CHECK-NEXT:   6: b
 // CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, NoOp, const class A)
@@ -309,7 +309,7 @@ void test_if_jumps() {
 // CHECK-NEXT:   Succs (2): B3 B1
 // CHECK:      [B5]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   Preds (1): B6
 // CHECK-NEXT:   Succs (1): B4
@@ -326,7 +326,7 @@ void test_while_implicit_scope() {
 // CHECK:      [B1]
 // CHECK-NEXT:   1: [B10.5].~A() (Implicit destructor)
 // CHECK-NEXT:   2: CFGScopeEnd(b)
-// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], A)
+// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
 // CHECK-NEXT:   4: A e;
 // CHECK-NEXT:   5: [B1.4].~A() (Implicit destructor)
 // CHECK-NEXT:   6: [B11.3].~A() (Implicit destructor)
@@ -337,7 +337,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (1): B10
 // CHECK:      [B3]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
@@ -384,7 +384,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: UV
 // CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -395,7 +395,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   1: CFGScopeBegin(b)
 // CHECK-NEXT:   2: a
 // CHECK-NEXT:   3: [B10.2] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], A)
+// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], class A)
 // CHECK-NEXT:   5: A b = a;
 // CHECK-NEXT:   6: b
 // CHECK-NEXT:   7: [B10.6] (ImplicitCastExpr, NoOp, const class A)
@@ -408,7 +408,7 @@ void test_while_implicit_scope() {
 // CHECK-NEXT:   Succs (2): B9 B1
 // CHECK:      [B11]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B10
@@ -429,7 +429,7 @@ void test_while_jumps() {
 // CHECK:      [B12 (ENTRY)]
 // CHECK-NEXT:   Succs (1): B11
 // CHECK:      [B1]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A d;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B11.3].~A() (Implicit destructor)
@@ -443,7 +443,7 @@ void test_while_jumps() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (2): B10 B1
 // CHECK:      [B3]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
@@ -484,7 +484,7 @@ void test_while_jumps() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
 // CHECK-NEXT:   1: CFGScopeBegin(b)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
 // CHECK-NEXT:   3: A b;
 // CHECK-NEXT:   4: UV
 // CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -496,7 +496,7 @@ void test_while_jumps() {
 // CHECK-NEXT:   Succs (1): B9
 // CHECK:      [B11]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B9
@@ -528,7 +528,7 @@ void test_do_jumps() {
 // CHECK-NEXT:   Succs (1): B4
 // CHECK:      [B3]
 // CHECK-NEXT:   1: CFGScopeBegin(c)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
 // CHECK-NEXT:   3: A c;
 // CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
 // CHECK-NEXT:   5: CFGScopeEnd(c)
@@ -540,7 +540,7 @@ void test_do_jumps() {
 // CHECK-NEXT:   1: CFGScopeBegin(b)
 // CHECK-NEXT:   2: a
 // CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], A)
+// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], class A)
 // CHECK-NEXT:   5: A b = a;
 // CHECK-NEXT:   6: b
 // CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, NoOp, const class A)
@@ -553,7 +553,7 @@ void test_do_jumps() {
 // CHECK-NEXT:   Succs (2): B3 B1
 // CHECK:      [B5]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   Preds (1): B6
 // CHECK-NEXT:   Succs (1): B4
@@ -571,7 +571,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   2: CFGScopeEnd(c)
 // CHECK-NEXT:   3: [B11.6].~A() (Implicit destructor)
 // CHECK-NEXT:   4: CFGScopeEnd(b)
-// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], A)
+// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], class A)
 // CHECK-NEXT:   6: A f;
 // CHECK-NEXT:   7: [B1.6].~A() (Implicit destructor)
 // CHECK-NEXT:   8: [B11.3].~A() (Implicit destructor)
@@ -582,7 +582,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   Preds (2): B3 B6
 // CHECK-NEXT:   Succs (1): B10
 // CHECK:      [B3]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
 // CHECK-NEXT:   2: A e;
 // CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
@@ -629,7 +629,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   Succs (1): B1
 // CHECK:      [B9]
 // CHECK-NEXT:   1: CFGScopeBegin(d)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
 // CHECK-NEXT:   3: A d;
 // CHECK-NEXT:   4: UV
 // CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -640,7 +640,7 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   1: CFGScopeBegin(c)
 // CHECK-NEXT:   2: b
 // CHECK-NEXT:   3: [B10.2] (ImplicitCastExpr, NoOp, const class A)
-// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], A)
+// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], class A)
 // CHECK-NEXT:   5: A c = b;
 // CHECK-NEXT:   6: c
 // CHECK-NEXT:   7: [B10.6] (ImplicitCastExpr, NoOp, const class A)
@@ -653,10 +653,10 @@ void test_for_implicit_scope() {
 // CHECK-NEXT:   Succs (2): B9 B1
 // CHECK:      [B11]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   4: CFGScopeBegin(b)
-// CHECK-NEXT:   5:  (CXXConstructExpr, [B11.6], A)
+// CHECK-NEXT:   5:  (CXXConstructExpr, [B11.6], class A)
 // CHECK-NEXT:   6: A b;
 // CHECK-NEXT:   Preds (1): B12
 // CHECK-NEXT:   Succs (1): B10
@@ -678,7 +678,7 @@ void test_for_jumps() {
 // CHECK-NEXT:   Succs (1): B7
 // CHECK:      [B1]
 // CHECK-NEXT:  l1:
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
 // CHECK-NEXT:   2: A c;
 // CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B6.5].~A() (Implicit destructor)
@@ -688,7 +688,7 @@ void test_for_jumps() {
 // CHECK-NEXT:   Preds (2): B2 B3
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
-// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], A)
+// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
 // CHECK-NEXT:   2: A b;
 // CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
 // CHECK-NEXT:   4: [B6.8].~A() (Implicit destructor)
@@ -718,12 +718,12 @@ void test_for_jumps() {
 // CHECK:      [B6]
 // CHECK-NEXT:  l0:
 // CHECK-NEXT:   1: CFGScopeBegin(cb)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B6.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B6.3], class A)
 // CHECK-NEXT:   3: A cb;
-// CHECK-NEXT:   4:  (CXXConstructExpr, [B6.5], A)
+// CHECK-NEXT:   4:  (CXXConstructExpr, [B6.5], class A)
 // CHECK-NEXT:   5: A b;
 // CHECK-NEXT:   6: CFGScopeBegin(a)
-// CHECK-NEXT:   7:  (CXXConstructExpr, [B6.8], A)
+// CHECK-NEXT:   7:  (CXXConstructExpr, [B6.8], class A)
 // CHECK-NEXT:   8: A a;
 // CHECK-NEXT:   9: UV
 // CHECK-NEXT:  10: [B6.9] (ImplicitCastExpr, LValueToRValue, _Bool)
@@ -732,7 +732,7 @@ void test_for_jumps() {
 // CHECK-NEXT:   Succs (2): B5 B4
 // CHECK:      [B7]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], A)
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], class A)
 // CHECK-NEXT:   3: A a;
 // CHECK-NEXT:   Preds (1): B8
 // CHECK-NEXT:   Succs (1): B6
@@ -816,9 +816,9 @@ void test_for_compound_and_break() {
 // CHECK-NEXT:   Succs (1): B0
 // CHECK:      [B2]
 // CHECK-NEXT:   1: __begin1
-// CHECK-NEXT:   2: [B2.1] (ImplicitCastExpr, LValueToRValue, A *)
+// CHECK-NEXT:   2: [B2.1] (ImplicitCastExpr, LValueToRValue, class A *)
 // CHECK-NEXT:   3: __end1
-// CHECK-NEXT:   4: [B2.3] (ImplicitCastExpr, LValueToRValue, A *)
+// CHECK-NEXT:   4: [B2.3] (ImplicitCastExpr, LValueToRValue, class A *)
 // CHECK-NEXT:   5: [B2.2] != [B2.4]
 // CHECK-NEXT:   T: for (auto &i : [B5.4])
 // CHECK:         [B4.11];
@@ -832,7 +832,7 @@ void test_for_compound_and_break() {
 // CHECK:      [B4]
 // CHECK-NEXT:   1: CFGScopeBegin(i)
 // CHECK-NEXT:   2: __begin1
-// CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, LValueToRValue, A *)
+// CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, LValueToRValue, class A *)
 // CHECK-NEXT:   4: *[B4.3]
 // CHECK-NEXT:   5: auto &i
 // CHECK-NEXT:   6: operator=
@@ -846,18 +846,18 @@ void test_for_compound_and_break() {
 // CHECK-NEXT:   Succs (1): B3
 // CHECK:      [B5]
 // CHECK-NEXT:   1: CFGScopeBegin(a)
-// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], A[10])
+// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A[10])
 // CHECK-NEXT:   3: A a[10];
 // CHECK-NEXT:   4: a
 // CHECK-NEXT:   5: auto &&__range1 = a;
 // CHECK-NEXT:   6: CFGScopeBegin(__end1)
 // CHECK-NEXT:   7: __range1
-// CHECK-NEXT:   8: [B5.7] (ImplicitCastExpr, ArrayToPointerDecay, A *)
+// CHECK-NEXT:   8: [B5.7] (ImplicitCastExpr, ArrayToPointerDecay, class A *)
 // CHECK-NEXT:   9: 10
 // CHECK-NEXT:  10: [B5.8] + [B5.9]
 // CHECK-NEXT:  11: auto __end1 = __range1 + 10
 // CHECK-NEXT:  12: __range1
-// CHECK-NEXT:  13: [B5.12] (ImplicitCastExpr, ArrayToPointerDecay, A *)
+// CHECK-NEXT:  13: [B5.12] (ImplicitCastExpr, ArrayToPointerDecay, class A *)
 // CHECK-NEXT:  14: auto __begin1 = __range1;
 // CHECK-NEXT:   Preds (1): B6
 // CHECK-NEXT:   Succs (1): B2

diff  --git a/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp b/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp
index 3730c03e3e336..5b16915ae6f68 100644
--- a/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp
+++ b/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp
@@ -234,13 +234,13 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
-// WARNINGS:     5: [B1.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.7], A)
+// WARNINGS:     5: [B1.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.7], class A)
 // CHECK:     6: ~A() (Temporary object destructor)
 // CHECK:     7: return [B1.5];
 // CHECK:     Preds (1): B2
@@ -294,13 +294,13 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
-// WARNINGS:     5: [B1.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.7], A)
+// WARNINGS:     5: [B1.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.7], class A)
 // CHECK:     6: ~A() (Temporary object destructor)
 // CHECK:     7: return [B1.5];
 // CHECK:     Preds (1): B2
@@ -310,16 +310,16 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.3], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.3], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
 // CHECK:     3: [B1.2]
 // CHECK:     4: [B1.3].operator int
 // CHECK:     5: [B1.3]
 // CHECK:     6: [B1.5] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:     7: int([B1.6]) (CXXFunctionalCastExpr, NoOp, int)
-// WARNINGS:     8: B() (CXXConstructExpr, B)
-// ANALYZER:     8: B() (CXXConstructExpr, [B1.9], [B1.10], B)
+// WARNINGS:     8: B() (CXXConstructExpr, class B)
+// ANALYZER:     8: B() (CXXConstructExpr, [B1.9], [B1.10], class B)
 // CHECK:     9: [B1.8] (BindTemporary)
 // CHECK:    10: [B1.9]
 // CHECK:    11: [B1.10].operator int
@@ -332,16 +332,16 @@ const C &bar3(bool coin) {
 // CHECK:    18: ~A() (Temporary object destructor)
 // CHECK:    19: foo
 // CHECK:    20: [B1.19] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(int))
-// WARNINGS:    21: A() (CXXConstructExpr, A)
-// ANALYZER:    21: A() (CXXConstructExpr, [B1.22], [B1.23], A)
+// WARNINGS:    21: A() (CXXConstructExpr, class A)
+// ANALYZER:    21: A() (CXXConstructExpr, [B1.22], [B1.23], class A)
 // CHECK:    22: [B1.21] (BindTemporary)
 // CHECK:    23: [B1.22]
 // CHECK:    24: [B1.23].operator int
 // CHECK:    25: [B1.23]
 // CHECK:    26: [B1.25] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:    27: int([B1.26]) (CXXFunctionalCastExpr, NoOp, int)
-// WARNINGS:    28: B() (CXXConstructExpr, B)
-// ANALYZER:    28: B() (CXXConstructExpr, [B1.29], [B1.30], B)
+// WARNINGS:    28: B() (CXXConstructExpr, class B)
+// ANALYZER:    28: B() (CXXConstructExpr, [B1.29], [B1.30], class B)
 // CHECK:    29: [B1.28] (BindTemporary)
 // CHECK:    30: [B1.29]
 // CHECK:    31: [B1.30].operator int
@@ -375,8 +375,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (2): B4 B5
 // CHECK:     Succs (2): B2 B1
 // CHECK:   [B4]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B4.2], [B4.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B4.2], [B4.3], class B)
 // CHECK:     2: [B4.1] (BindTemporary)
 // CHECK:     3: [B4.2]
 // CHECK:     4: [B4.3].operator bool
@@ -388,8 +388,8 @@ const C &bar3(bool coin) {
 // CHECK:     1: ~A() (Temporary object destructor)
 // CHECK:     2: foo
 // CHECK:     3: [B5.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(_Bool))
-// WARNINGS:     4: A() (CXXConstructExpr, A)
-// ANALYZER:     4: A() (CXXConstructExpr, [B5.5], [B5.6], A)
+// WARNINGS:     4: A() (CXXConstructExpr, class A)
+// ANALYZER:     4: A() (CXXConstructExpr, [B5.5], [B5.6], class A)
 // CHECK:     5: [B5.4] (BindTemporary)
 // CHECK:     6: [B5.5]
 // CHECK:     7: [B5.6].operator bool
@@ -409,8 +409,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B6 B5
 // CHECK:   [B8]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B8.2], [B8.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B8.2], [B8.3], class B)
 // CHECK:     2: [B8.1] (BindTemporary)
 // CHECK:     3: [B8.2]
 // CHECK:     4: [B8.3].operator bool
@@ -419,8 +419,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B9
 // CHECK:     Succs (1): B7
 // CHECK:   [B9]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B9.2], [B9.3], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B9.2], [B9.3], class A)
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2]
 // CHECK:     4: [B9.3].operator bool
@@ -449,8 +449,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (2): B4 B5
 // CHECK:     Succs (2): B2 B1
 // CHECK:   [B4]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B4.2], [B4.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B4.2], [B4.3], class B)
 // CHECK:     2: [B4.1] (BindTemporary)
 // CHECK:     3: [B4.2]
 // CHECK:     4: [B4.3].operator bool
@@ -462,8 +462,8 @@ const C &bar3(bool coin) {
 // CHECK:     1: ~A() (Temporary object destructor)
 // CHECK:     2: foo
 // CHECK:     3: [B5.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(_Bool))
-// WARNINGS:     4: A() (CXXConstructExpr, A)
-// ANALYZER:     4: A() (CXXConstructExpr, [B5.5], [B5.6], A)
+// WARNINGS:     4: A() (CXXConstructExpr, class A)
+// ANALYZER:     4: A() (CXXConstructExpr, [B5.5], [B5.6], class A)
 // CHECK:     5: [B5.4] (BindTemporary)
 // CHECK:     6: [B5.5]
 // CHECK:     7: [B5.6].operator bool
@@ -483,8 +483,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B6 B5
 // CHECK:   [B8]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B8.2], [B8.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B8.2], [B8.3], class B)
 // CHECK:     2: [B8.1] (BindTemporary)
 // CHECK:     3: [B8.2]
 // CHECK:     4: [B8.3].operator bool
@@ -493,8 +493,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B9
 // CHECK:     Succs (1): B7
 // CHECK:   [B9]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B9.2], [B9.3], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B9.2], [B9.3], class A)
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2]
 // CHECK:     4: [B9.3].operator bool
@@ -528,8 +528,8 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B4]
 // CHECK:     1: ~B() (Temporary object destructor)
-// WARNINGS:     2: B() (CXXConstructExpr, B)
-// ANALYZER:     2: B() (CXXConstructExpr, [B4.3], [B4.4], B)
+// WARNINGS:     2: B() (CXXConstructExpr, class B)
+// ANALYZER:     2: B() (CXXConstructExpr, [B4.3], [B4.4], class B)
 // CHECK:     3: [B4.2] (BindTemporary)
 // CHECK:     4: [B4.3]
 // CHECK:     5: [B4.4].operator bool
@@ -553,50 +553,50 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B4
 // CHECK:   [B7]
 // CHECK:     1: [B10.6] ? [B8.6] : [B9.16]
-// CHECK:     2: [B7.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B7.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B7.2]
-// WARNINGS:     4: [B7.3] (CXXConstructExpr, A)
-// ANALYZER:     4: [B7.3] (CXXConstructExpr, [B7.5], A)
+// WARNINGS:     4: [B7.3] (CXXConstructExpr, class A)
+// ANALYZER:     4: [B7.3] (CXXConstructExpr, [B7.5], class A)
 // CHECK:     5: A a = B() ? A() : A(B());
 // CHECK:     T: (Temp Dtor) [B9.2]
 // CHECK:     Preds (2): B8 B9
 // CHECK:     Succs (2): B6 B5
 // CHECK:   [B8]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B8.2], [B8.4], [B8.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B8.2], [B8.4], [B8.5], class A)
 // CHECK:     2: [B8.1] (BindTemporary)
-// CHECK:     3: [B8.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B8.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B8.3]
-// WARNINGS:     5: [B8.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B8.4] (CXXConstructExpr, [B8.6], [B7.3], [B7.4], A)
+// WARNINGS:     5: [B8.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B8.4] (CXXConstructExpr, [B8.6], [B7.3], [B7.4], class A)
 // CHECK:     6: [B8.5] (BindTemporary)
 // CHECK:     Preds (1): B10
 // CHECK:     Succs (1): B7
 // CHECK:   [B9]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B9.2], [B9.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B9.2], [B9.3], class B)
 // CHECK:     2: [B9.1] (BindTemporary)
 // CHECK:     3: [B9.2]
 // CHECK:     4: [B9.3].operator A
 // CHECK:     5: [B9.3]
-// CHECK:     6: [B9.5] (ImplicitCastExpr, UserDefinedConversion, A)
+// CHECK:     6: [B9.5] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     7: [B9.6] (BindTemporary)
-// CHECK:     8: [B9.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     8: [B9.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     9: [B9.8]
-// WARNINGS:     10: [B9.9] (CXXConstructExpr, A)
-// ANALYZER:     10: [B9.9] (CXXConstructExpr, [B9.11], [B9.14], [B9.15], A)
+// WARNINGS:     10: [B9.9] (CXXConstructExpr, class A)
+// ANALYZER:     10: [B9.9] (CXXConstructExpr, [B9.11], [B9.14], [B9.15], class A)
 // CHECK:    11: [B9.10] (BindTemporary)
-// CHECK:    12: A([B9.11]) (CXXFunctionalCastExpr, ConstructorConversion, A)
-// CHECK:    13: [B9.12] (ImplicitCastExpr, NoOp, const A)
+// CHECK:    12: A([B9.11]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
+// CHECK:    13: [B9.12] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    14: [B9.13]
-// WARNINGS:    15: [B9.14] (CXXConstructExpr, A)
-// ANALYZER:    15: [B9.14] (CXXConstructExpr, [B9.16], [B7.3], [B7.4], A)
+// WARNINGS:    15: [B9.14] (CXXConstructExpr, class A)
+// ANALYZER:    15: [B9.14] (CXXConstructExpr, [B9.16], [B7.3], [B7.4], class A)
 // CHECK:    16: [B9.15] (BindTemporary)
 // CHECK:     Preds (1): B10
 // CHECK:     Succs (1): B7
 // CHECK:   [B10]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B10.2], [B10.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B10.2], [B10.3], class B)
 // CHECK:     2: [B10.1] (BindTemporary)
 // CHECK:     3: [B10.2]
 // CHECK:     4: [B10.3].operator bool
@@ -664,8 +664,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B3
 // CHECK:     Succs (1): B0
 // CHECK:   [B3]
-// WARNINGS:     1: C() (CXXConstructExpr, C)
-// ANALYZER:     1: C() (CXXConstructExpr, [B3.2], [B3.3], C)
+// WARNINGS:     1: C() (CXXConstructExpr, struct C)
+// ANALYZER:     1: C() (CXXConstructExpr, [B3.2], [B3.3], struct C)
 // CHECK:     2: [B3.1] (BindTemporary)
 // CHECK:     3: [B3.2]
 // CHECK:     4: [B3.3].operator bool
@@ -695,13 +695,13 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B4
 // CHECK:     Succs (1): B0
 // CHECK:   [B4]
-// WARNINGS:     1: C() (CXXConstructExpr, C)
-// ANALYZER:     1: C() (CXXConstructExpr, [B4.2], [B4.4], [B4.5], C)
+// WARNINGS:     1: C() (CXXConstructExpr, struct C)
+// ANALYZER:     1: C() (CXXConstructExpr, [B4.2], [B4.4], [B4.5], struct C)
 // CHECK:     2: [B4.1] (BindTemporary)
-// CHECK:     3: [B4.2] (ImplicitCastExpr, NoOp, const C)
+// CHECK:     3: [B4.2] (ImplicitCastExpr, NoOp, const struct C)
 // CHECK:     4: [B4.3]
-// WARNINGS:     5: [B4.4] (CXXConstructExpr, C)
-// ANALYZER:     5: [B4.4] (CXXConstructExpr, [B4.6], C)
+// WARNINGS:     5: [B4.4] (CXXConstructExpr, struct C)
+// ANALYZER:     5: [B4.4] (CXXConstructExpr, [B4.6], struct C)
 // CHECK:     6: C c = C();
 // CHECK:     7: ~C() (Temporary object destructor)
 // CHECK:     8: c
@@ -726,8 +726,8 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B3
 // CHECK:     Succs (1): B0
 // CHECK:   [B3]
-// WARNINGS:  1: D() (CXXConstructExpr, D)
-// ANALYZER:  1: D() (CXXConstructExpr, [B3.2], D)
+// WARNINGS:  1: D() (CXXConstructExpr, struct D)
+// ANALYZER:  1: D() (CXXConstructExpr, [B3.2], struct D)
 // CHECK:     2: [B3.1]
 // CHECK:     3: [B3.2].operator bool
 // CHECK:     4: [B3.2]
@@ -750,23 +750,23 @@ const C &bar3(bool coin) {
 // CHECK:     Preds (1): B3
 // CHECK:     Succs (1): B0
 // CHECK:   [B3]
-// CXX98-WARNINGS:     1: D() (CXXConstructExpr, D)
-// CXX98-ANALYZER:     1: D() (CXXConstructExpr, [B3.3], [B3.4], D)
-// CXX98:     2: [B3.1] (ImplicitCastExpr, NoOp, const D)
+// CXX98-WARNINGS:     1: D() (CXXConstructExpr, struct D)
+// CXX98-ANALYZER:     1: D() (CXXConstructExpr, [B3.3], [B3.4], struct D)
+// CXX98:     2: [B3.1] (ImplicitCastExpr, NoOp, const struct D)
 // CXX98:     3: [B3.2]
-// CXX98-WARNINGS:     4: [B3.3] (CXXConstructExpr, D)
-// CXX98-ANALYZER:     4: [B3.3] (CXXConstructExpr, [B3.5], D)
+// CXX98-WARNINGS:     4: [B3.3] (CXXConstructExpr, struct D)
+// CXX98-ANALYZER:     4: [B3.3] (CXXConstructExpr, [B3.5], struct D)
 // CXX98:     5: D d = D();
 // CXX98:     6: d
 // CXX98:     7: [B3.6].operator bool
 // CXX98:     8: [B3.6]
 // CXX98:     9: [B3.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
 // CXX98:     T: if [B3.9]
-// CXX11-WARNINGS:     1: D() (CXXConstructExpr, D)
-// CXX11-ANALYZER:     1: D() (CXXConstructExpr, [B3.2], [B3.3], D)
+// CXX11-WARNINGS:     1: D() (CXXConstructExpr, struct D)
+// CXX11-ANALYZER:     1: D() (CXXConstructExpr, [B3.2], [B3.3], struct D)
 // CXX11:     2: [B3.1]
-// CXX11-WARNINGS:     3: [B3.2] (CXXConstructExpr, D)
-// CXX11-ANALYZER:     3: [B3.2] (CXXConstructExpr, [B3.4], D)
+// CXX11-WARNINGS:     3: [B3.2] (CXXConstructExpr, struct D)
+// CXX11-ANALYZER:     3: [B3.2] (CXXConstructExpr, [B3.4], struct D)
 // CXX11:     4: D d = D();
 // CXX11:     5: d
 // CXX11:     6: [B3.5].operator bool
@@ -799,51 +799,51 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B4]
 // CHECK:     1: [B7.9] ? [B5.6] : [B6.16]
-// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B4.2]
 // CHECK:     4: [B7.3]([B4.3])
 // CHECK:     T: (Temp Dtor) [B6.2]
 // CHECK:     Preds (2): B5 B6
 // CHECK:     Succs (2): B3 B2
 // CHECK:   [B5]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B5.2], [B5.4], [B5.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B5.2], [B5.4], [B5.5], class A)
 // CHECK:     2: [B5.1] (BindTemporary)
-// CHECK:     3: [B5.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B5.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B5.3]
-// WARNINGS:     5: [B5.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B5.4] (CXXConstructExpr, [B5.6], [B4.3], A)
+// WARNINGS:     5: [B5.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B5.4] (CXXConstructExpr, [B5.6], [B4.3], class A)
 // CHECK:     6: [B5.5] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B6]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B6.2], [B6.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B6.2], [B6.3], class B)
 // CHECK:     2: [B6.1] (BindTemporary)
 // CHECK:     3: [B6.2]
 // CHECK:     4: [B6.3].operator A
 // CHECK:     5: [B6.3]
-// CHECK:     6: [B6.5] (ImplicitCastExpr, UserDefinedConversion, A)
+// CHECK:     6: [B6.5] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     7: [B6.6] (BindTemporary)
-// CHECK:     8: [B6.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     8: [B6.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     9: [B6.8]
-// WARNINGS:     10: [B6.9] (CXXConstructExpr, A)
-// ANALYZER:     10: [B6.9] (CXXConstructExpr, [B6.11], [B6.14], [B6.15], A)
+// WARNINGS:     10: [B6.9] (CXXConstructExpr, class A)
+// ANALYZER:     10: [B6.9] (CXXConstructExpr, [B6.11], [B6.14], [B6.15], class A)
 // CHECK:    11: [B6.10] (BindTemporary)
-// CHECK:    12: A([B6.11]) (CXXFunctionalCastExpr, ConstructorConversion, A)
-// CHECK:    13: [B6.12] (ImplicitCastExpr, NoOp, const A)
+// CHECK:    12: A([B6.11]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
+// CHECK:    13: [B6.12] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    14: [B6.13]
-// WARNINGS:    15: [B6.14] (CXXConstructExpr, A)
-// ANALYZER:    15: [B6.14] (CXXConstructExpr, [B6.16], [B4.3], A)
+// WARNINGS:    15: [B6.14] (CXXConstructExpr, class A)
+// ANALYZER:    15: [B6.14] (CXXConstructExpr, [B6.16], [B4.3], class A)
 // CHECK:    16: [B6.15] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B7]
 // CHECK:     1: ~B() (Temporary object destructor)
 // CHECK:     2: foo
-// CHECK:     3: [B7.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const A &))
-// WARNINGS:     4: B() (CXXConstructExpr, B)
-// ANALYZER:     4: B() (CXXConstructExpr, [B7.5], [B7.6], B)
+// CHECK:     3: [B7.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
+// WARNINGS:     4: B() (CXXConstructExpr, class B)
+// ANALYZER:     4: B() (CXXConstructExpr, [B7.5], [B7.6], class B)
 // CHECK:     5: [B7.4] (BindTemporary)
 // CHECK:     6: [B7.5]
 // CHECK:     7: [B7.6].operator bool
@@ -864,48 +864,48 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B7
 // CHECK:   [B10]
 // CHECK:     1: [B13.6] ? [B11.6] : [B12.16]
-// CHECK:     2: [B10.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B10.2]
 // CHECK:     4: const A &a = B() ? A() : A(B());
 // CHECK:     T: (Temp Dtor) [B12.2]
 // CHECK:     Preds (2): B11 B12
 // CHECK:     Succs (2): B9 B8
 // CHECK:   [B11]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B11.2], [B11.4], [B11.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B11.2], [B11.4], [B11.5], class A)
 // CHECK:     2: [B11.1] (BindTemporary)
-// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B11.3]
-// WARNINGS:     5: [B11.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B11.4] (CXXConstructExpr, [B10.3], A)
+// WARNINGS:     5: [B11.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B11.4] (CXXConstructExpr, [B10.3], class A)
 // CHECK:     6: [B11.5] (BindTemporary)
 // CHECK:     Preds (1): B13
 // CHECK:     Succs (1): B10
 // CHECK:   [B12]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B12.2], [B12.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B12.2], [B12.3], class B)
 // CHECK:     2: [B12.1] (BindTemporary)
 // CHECK:     3: [B12.2]
 // CHECK:     4: [B12.3].operator A
 // CHECK:     5: [B12.3]
-// CHECK:     6: [B12.5] (ImplicitCastExpr, UserDefinedConversion, A)
+// CHECK:     6: [B12.5] (ImplicitCastExpr, UserDefinedConversion, class A)
 // CHECK:     7: [B12.6] (BindTemporary)
-// CHECK:     8: [B12.7] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     8: [B12.7] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     9: [B12.8]
-// WARNINGS:     10: [B12.9] (CXXConstructExpr, A)
-// ANALYZER:     10: [B12.9] (CXXConstructExpr, [B12.11], [B12.14], [B12.15], A)
+// WARNINGS:     10: [B12.9] (CXXConstructExpr, class A)
+// ANALYZER:     10: [B12.9] (CXXConstructExpr, [B12.11], [B12.14], [B12.15], class A)
 // CHECK:    11: [B12.10] (BindTemporary)
-// CHECK:    12: A([B12.11]) (CXXFunctionalCastExpr, ConstructorConversion, A)
-// CHECK:    13: [B12.12] (ImplicitCastExpr, NoOp, const A)
+// CHECK:    12: A([B12.11]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
+// CHECK:    13: [B12.12] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    14: [B12.13]
-// WARNINGS:    15: [B12.14] (CXXConstructExpr, A)
-// ANALYZER:    15: [B12.14] (CXXConstructExpr, [B10.3], A)
+// WARNINGS:    15: [B12.14] (CXXConstructExpr, class A)
+// ANALYZER:    15: [B12.14] (CXXConstructExpr, [B10.3], class A)
 // CHECK:    16: [B12.15] (BindTemporary)
 // CHECK:     Preds (1): B13
 // CHECK:     Succs (1): B10
 // CHECK:   [B13]
-// WARNINGS:     1: B() (CXXConstructExpr, B)
-// ANALYZER:     1: B() (CXXConstructExpr, [B13.2], [B13.3], B)
+// WARNINGS:     1: B() (CXXConstructExpr, class B)
+// ANALYZER:     1: B() (CXXConstructExpr, [B13.2], [B13.3], class B)
 // CHECK:     2: [B13.1] (BindTemporary)
 // CHECK:     3: [B13.2]
 // CHECK:     4: [B13.3].operator bool
@@ -935,41 +935,41 @@ const C &bar3(bool coin) {
 // CHECK:   [B4]
 // CXX98:     1: [B7.2] ?: [B6.6]
 // CXX11:     1: [B7.3] ?: [B6.6]
-// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B4.2]
-// WARNINGS:     4: [B4.3] (CXXConstructExpr, A)
-// ANALYZER:     4: [B4.3] (CXXConstructExpr, [B4.5], A)
+// WARNINGS:     4: [B4.3] (CXXConstructExpr, class A)
+// ANALYZER:     4: [B4.3] (CXXConstructExpr, [B4.5], class A)
 // CHECK:     5: A a = A() ?: A();
 // CHECK:     T: (Temp Dtor) [B6.2]
 // CHECK:     Preds (2): B5 B6
 // CHECK:     Succs (2): B3 B2
 // CHECK:   [B5]
-// CXX98:     1: [B7.2] (ImplicitCastExpr, NoOp, const A)
+// CXX98:     1: [B7.2] (ImplicitCastExpr, NoOp, const class A)
 // CXX98:     2: [B5.1]
-// WARNINGS-CXX98:     3: [B5.2] (CXXConstructExpr, A)
-// ANALYZER-CXX98:     3: [B5.2] (CXXConstructExpr, [B5.4], A)
+// WARNINGS-CXX98:     3: [B5.2] (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     3: [B5.2] (CXXConstructExpr, [B5.4], class A)
 // CXX98:     4: [B5.3] (BindTemporary)
-// CXX11:     1: [B7.3] (ImplicitCastExpr, NoOp, const A)
-// WARNINGS-CXX11:     2: [B5.1] (CXXConstructExpr, A)
-// ANALYZER-CXX11:     2: [B5.1] (CXXConstructExpr, [B5.3], A)
+// CXX11:     1: [B7.3] (ImplicitCastExpr, NoOp, const class A)
+// WARNINGS-CXX11:     2: [B5.1] (CXXConstructExpr, class A)
+// ANALYZER-CXX11:     2: [B5.1] (CXXConstructExpr, [B5.3], class A)
 // CXX11:     3: [B5.2] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B6]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B6.2], [B6.4], [B6.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B6.2], [B6.4], [B6.5], class A)
 // CHECK:     2: [B6.1] (BindTemporary)
-// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B6.3]
-// WARNINGS:     5: [B6.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B6.4] (CXXConstructExpr, [B6.6], A)
+// WARNINGS:     5: [B6.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B6.4] (CXXConstructExpr, [B6.6], class A)
 // CHECK:     6: [B6.5] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B7]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER-CXX98:     1: A() (CXXConstructExpr, [B7.2], [B7.3], A)
-// ANALYZER-CXX11:     1: A() (CXXConstructExpr, [B7.2], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     1: A() (CXXConstructExpr, [B7.2], [B7.3], class A)
+// ANALYZER-CXX11:     1: A() (CXXConstructExpr, [B7.2], class A)
 // CHECK:     2: [B7.1] (BindTemporary)
 // CHECK:     3: [B7.2]
 // CHECK:     4: [B7.3].operator bool
@@ -999,41 +999,41 @@ const C &bar3(bool coin) {
 // CHECK:   [B4]
 // CXX98:     1: [B7.4] ?: [B6.6]
 // CXX11:     1: [B7.5] ?: [B6.6]
-// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B4.2]
 // CHECK:     4: [B7.2]([B4.3])
 // CHECK:     T: (Temp Dtor) [B6.2]
 // CHECK:     Preds (2): B5 B6
 // CHECK:     Succs (2): B3 B2
 // CHECK:   [B5]
-// CXX98:     1: [B7.4] (ImplicitCastExpr, NoOp, const A)
+// CXX98:     1: [B7.4] (ImplicitCastExpr, NoOp, const class A)
 // CXX98:     2: [B5.1]
-// WARNINGS-CXX98:     3: [B5.2] (CXXConstructExpr, A)
-// ANALYZER-CXX98:     3: [B5.2] (CXXConstructExpr, [B5.4], A)
+// WARNINGS-CXX98:     3: [B5.2] (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     3: [B5.2] (CXXConstructExpr, [B5.4], class A)
 // CXX98:     4: [B5.3] (BindTemporary)
-// CXX11:     1: [B7.5] (ImplicitCastExpr, NoOp, const A)
-// WARNINGS-CXX11:     2: [B5.1] (CXXConstructExpr, A)
-// ANALYZER-CXX11:     2: [B5.1] (CXXConstructExpr, [B5.3], A)
+// CXX11:     1: [B7.5] (ImplicitCastExpr, NoOp, const class A)
+// WARNINGS-CXX11:     2: [B5.1] (CXXConstructExpr, class A)
+// ANALYZER-CXX11:     2: [B5.1] (CXXConstructExpr, [B5.3], class A)
 // CXX11:     3: [B5.2] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B6]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B6.2], [B6.4], [B6.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B6.2], [B6.4], [B6.5], class A)
 // CHECK:     2: [B6.1] (BindTemporary)
-// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B6.3]
-// WARNINGS:     5: [B6.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B6.4] (CXXConstructExpr, [B6.6], A)
+// WARNINGS:     5: [B6.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B6.4] (CXXConstructExpr, [B6.6], class A)
 // CHECK:     6: [B6.5] (BindTemporary)
 // CHECK:     Preds (1): B7
 // CHECK:     Succs (1): B4
 // CHECK:   [B7]
 // CHECK:     1: foo
-// CHECK:     2: [B7.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const A &))
-// WARNINGS:     3: A() (CXXConstructExpr, A)
-// ANALYZER-CXX98:     3: A() (CXXConstructExpr, [B7.4], A)
-// ANALYZER-CXX11:     3: A() (CXXConstructExpr, A)
+// CHECK:     2: [B7.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
+// WARNINGS:     3: A() (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     3: A() (CXXConstructExpr, [B7.4], class A)
+// ANALYZER-CXX11:     3: A() (CXXConstructExpr, class A)
 // CHECK:     4: [B7.3] (BindTemporary)
 // CHECK:     5: [B7.4]
 // CHECK:     6: [B7.5].operator bool
@@ -1049,39 +1049,39 @@ const C &bar3(bool coin) {
 // CHECK:   [B9]
 // CXX98:     1: [B12.2] ?: [B11.6]
 // CXX11:     1: [B12.3] ?: [B11.6]
-// CHECK:     2: [B9.1] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     2: [B9.1] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     3: [B9.2]
 // CHECK:     4: const A &a = A() ?: A();
 // CHECK:     T: (Temp Dtor) [B11.2]
 // CHECK:     Preds (2): B10 B11
 // CHECK:     Succs (2): B8 B7
 // CHECK:   [B10]
-// CXX98:     1: [B12.2] (ImplicitCastExpr, NoOp, const A)
+// CXX98:     1: [B12.2] (ImplicitCastExpr, NoOp, const class A)
 // CXX98:     2: [B10.1]
-// WARNINGS-CXX98:     3: [B10.2] (CXXConstructExpr, A)
-// ANALYZER-CXX98:     3: [B10.2] (CXXConstructExpr, [B10.4], A)
+// WARNINGS-CXX98:     3: [B10.2] (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     3: [B10.2] (CXXConstructExpr, [B10.4], class A)
 // CXX98:     4: [B10.3] (BindTemporary)
-// CXX11:     1: [B12.3] (ImplicitCastExpr, NoOp, const A)
-// WARNINGS-CXX11:     2: [B10.1] (CXXConstructExpr, A)
-// ANALYZER-CXX11:     2: [B10.1] (CXXConstructExpr, [B10.3], A)
+// CXX11:     1: [B12.3] (ImplicitCastExpr, NoOp, const class A)
+// WARNINGS-CXX11:     2: [B10.1] (CXXConstructExpr, class A)
+// ANALYZER-CXX11:     2: [B10.1] (CXXConstructExpr, [B10.3], class A)
 // CXX11:     3: [B10.2] (BindTemporary)
 // CHECK:     Preds (1): B12
 // CHECK:     Succs (1): B9
 // CHECK:   [B11]
-// WARNINGS-CHECK:     1: A() (CXXConstructExpr, A)
-// ANALYZER-CHECK:     1: A() (CXXConstructExpr, [B11.2], A)
+// WARNINGS-CHECK:     1: A() (CXXConstructExpr, class A)
+// ANALYZER-CHECK:     1: A() (CXXConstructExpr, [B11.2], class A)
 // CHECK:     2: [B11.1] (BindTemporary)
-// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B11.3]
-// WARNINGS:     5: [B11.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B11.4] (CXXConstructExpr, [B11.6], A)
+// WARNINGS:     5: [B11.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B11.4] (CXXConstructExpr, [B11.6], class A)
 // CHECK:     6: [B11.5] (BindTemporary)
 // CHECK:     Preds (1): B12
 // CHECK:     Succs (1): B9
 // CHECK:   [B12]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER-CXX98:     1: A() (CXXConstructExpr, [B12.2], [B12.3], A)
-// ANALYZER-CXX11:     1: A() (CXXConstructExpr, [B12.2], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER-CXX98:     1: A() (CXXConstructExpr, [B12.2], [B12.3], class A)
+// ANALYZER-CXX11:     1: A() (CXXConstructExpr, [B12.2], class A)
 // CHECK:     2: [B12.1] (BindTemporary)
 // CHECK:     3: [B12.2]
 // CHECK:     4: [B12.3].operator bool
@@ -1095,13 +1095,13 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.4], [B1.5], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
-// WARNINGS:     5: [B1.4] (CXXConstructExpr, A)
-// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.6], A)
+// WARNINGS:     5: [B1.4] (CXXConstructExpr, class A)
+// ANALYZER:     5: [B1.4] (CXXConstructExpr, [B1.6], class A)
 // CHECK:     6: A a = A();
 // CHECK:     7: ~A() (Temporary object destructor)
 // CHECK:     8: int b;
@@ -1113,18 +1113,18 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.4], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.4], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
-// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     4: [B1.3]
 // CHECK:     5: const A &a = A();
 // CHECK:     6: foo
-// CHECK:     7: [B1.6] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const A &))
-// WARNINGS:     8: A() (CXXConstructExpr, A)
-// ANALYZER:     8: A() (CXXConstructExpr, [B1.9], [B1.11], A)
+// CHECK:     7: [B1.6] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
+// WARNINGS:     8: A() (CXXConstructExpr, class A)
+// ANALYZER:     8: A() (CXXConstructExpr, [B1.9], [B1.11], class A)
 // CHECK:     9: [B1.8] (BindTemporary)
-// CHECK:    10: [B1.9] (ImplicitCastExpr, NoOp, const A)
+// CHECK:    10: [B1.9] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    11: [B1.10]
 // CHECK:    12: [B1.7]([B1.11])
 // CHECK:    13: ~A() (Temporary object destructor)
@@ -1138,14 +1138,14 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
 // CHECK:     1: A::make
-// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, A (*)(void))
+// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // WARNINGS:     3: [B1.2]()
 // ANALYZER:     3: [B1.2]() (CXXRecordTypedCall, [B1.4], [B1.6], [B1.7])
 // CHECK:     4: [B1.3] (BindTemporary)
-// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     6: [B1.5]
-// WARNINGS:     7: [B1.6] (CXXConstructExpr, A)
-// ANALYZER:     7: [B1.6] (CXXConstructExpr, [B1.8], A)
+// WARNINGS:     7: [B1.6] (CXXConstructExpr, class A)
+// ANALYZER:     7: [B1.6] (CXXConstructExpr, [B1.8], class A)
 // CHECK:     8: A a = A::make();
 // CHECK:     9: ~A() (Temporary object destructor)
 // CHECK:    10: int b;
@@ -1158,21 +1158,21 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
 // CHECK:     1: A::make
-// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, A (*)(void))
+// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // WARNINGS:     3: [B1.2]()
 // ANALYZER:     3: [B1.2]() (CXXRecordTypedCall, [B1.6])
 // CHECK:     4: [B1.3] (BindTemporary)
-// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const A)
+// CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:     6: [B1.5]
 // CHECK:     7: const A &a = A::make();
 // CHECK:     8: foo
-// CHECK:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const A &))
+// CHECK:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
 // CHECK:    10: A::make
-// CHECK:    11: [B1.10] (ImplicitCastExpr, FunctionToPointerDecay, A (*)(void))
+// CHECK:    11: [B1.10] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
 // WARNINGS:    12: [B1.11]()
 // ANALYZER:    12: [B1.11]() (CXXRecordTypedCall, [B1.13], [B1.15])
 // CHECK:    13: [B1.12] (BindTemporary)
-// CHECK:    14: [B1.13] (ImplicitCastExpr, NoOp, const A)
+// CHECK:    14: [B1.13] (ImplicitCastExpr, NoOp, const class A)
 // CHECK:    15: [B1.14]
 // CHECK:    16: [B1.9]([B1.15])
 // CHECK:    17: ~A() (Temporary object destructor)
@@ -1186,8 +1186,8 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
 // CHECK:     1: int a;
-// WARNINGS:     2: A() (CXXConstructExpr, A)
-// ANALYZER:     2: A() (CXXConstructExpr, [B1.3], [B1.4], A)
+// WARNINGS:     2: A() (CXXConstructExpr, class A)
+// ANALYZER:     2: A() (CXXConstructExpr, [B1.3], [B1.4], class A)
 // CHECK:     3: [B1.2] (BindTemporary)
 // CHECK:     4: [B1.3]
 // CHECK:     5: [B1.4].operator int
@@ -1204,16 +1204,16 @@ const C &bar3(bool coin) {
 // CHECK:   [B2 (ENTRY)]
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
-// WARNINGS:     1: A() (CXXConstructExpr, A)
-// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.3], A)
+// WARNINGS:     1: A() (CXXConstructExpr, class A)
+// ANALYZER:     1: A() (CXXConstructExpr, [B1.2], [B1.3], class A)
 // CHECK:     2: [B1.1] (BindTemporary)
 // CHECK:     3: [B1.2]
 // CHECK:     4: [B1.3].operator int
 // CHECK:     5: [B1.3]
 // CHECK:     6: [B1.5] (ImplicitCastExpr, UserDefinedConversion, int)
 // CHECK:     7: int([B1.6]) (CXXFunctionalCastExpr, NoOp, int)
-// WARNINGS:     8: B() (CXXConstructExpr, B)
-// ANALYZER:     8: B() (CXXConstructExpr, [B1.9], [B1.10], B)
+// WARNINGS:     8: B() (CXXConstructExpr, class B)
+// ANALYZER:     8: B() (CXXConstructExpr, [B1.9], [B1.10], class B)
 // CHECK:     9: [B1.8] (BindTemporary)
 // CHECK:    10: [B1.9]
 // CHECK:    11: [B1.10].operator int
@@ -1237,9 +1237,9 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B0
 // CHECK:   [B2 (NORETURN)]
 // CHECK:     1: int a;
-// WARNINGS:     2: NoReturn() (CXXConstructExpr, NoReturn)
-// ANALYZER-CXX98:     2: NoReturn() (CXXConstructExpr, [B2.3], [B2.4], NoReturn)
-// ANALYZER-CXX11:     2: NoReturn() (CXXConstructExpr, [B2.3], NoReturn)
+// WARNINGS:     2: NoReturn() (CXXConstructExpr, class NoReturn)
+// ANALYZER-CXX98:     2: NoReturn() (CXXConstructExpr, [B2.3], [B2.4], class NoReturn)
+// ANALYZER-CXX11:     2: NoReturn() (CXXConstructExpr, [B2.3], class NoReturn)
 // CHECK:     3: [B2.2] (BindTemporary)
 // CHECK:     [[MEMBER:[45]]]: [B2.{{[34]}}].f
 // CHECK:     {{[56]}}: [B2.[[MEMBER]]]()
@@ -1256,8 +1256,8 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B0
 // CHECK:   [B2 (NORETURN)]
 // CHECK:     1: int a;
-// WARNINGS:     2: NoReturn() (CXXConstructExpr, NoReturn)
-// ANALYZER:     2: NoReturn() (CXXConstructExpr, [B2.3], NoReturn)
+// WARNINGS:     2: NoReturn() (CXXConstructExpr, class NoReturn)
+// ANALYZER:     2: NoReturn() (CXXConstructExpr, [B2.3], class NoReturn)
 // CHECK:     3: [B2.2] (BindTemporary)
 // CHECK:     4: 47
 // CHECK:     5: ... , [B2.4]
@@ -1293,11 +1293,11 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (2): B4 B3
 // CHECK:   [B6]
 // CHECK:     1: check
-// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const NoReturn &))
-// WARNINGS:     3: NoReturn() (CXXConstructExpr, NoReturn)
-// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], NoReturn)
+// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
+// WARNINGS:     3: NoReturn() (CXXConstructExpr, class NoReturn)
+// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], class NoReturn)
 // CHECK:     4: [B6.3] (BindTemporary)
-// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const NoReturn)
+// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
 // CHECK:     6: [B6.5]
 // CHECK:     7: [B6.2]([B6.6])
 // CHECK:     Preds (1): B7
@@ -1344,11 +1344,11 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (2): B4 B3
 // CHECK:   [B6]
 // CHECK:     1: check
-// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const NoReturn &))
-// WARNINGS:     3: NoReturn() (CXXConstructExpr, NoReturn)
-// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], NoReturn)
+// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
+// WARNINGS:     3: NoReturn() (CXXConstructExpr, class NoReturn)
+// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], class NoReturn)
 // CHECK:     4: [B6.3] (BindTemporary)
-// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const NoReturn)
+// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
 // CHECK:     6: [B6.5]
 // CHECK:     7: [B6.2]([B6.6])
 // CHECK:     Preds (1): B7
@@ -1402,11 +1402,11 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (2): B4 B3
 // CHECK:   [B6]
 // CHECK:     1: check
-// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const NoReturn &))
-// WARNINGS:     3: NoReturn() (CXXConstructExpr, NoReturn)
-// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], NoReturn)
+// CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
+// WARNINGS:     3: NoReturn() (CXXConstructExpr, class NoReturn)
+// ANALYZER:     3: NoReturn() (CXXConstructExpr, [B6.4], [B6.6], class NoReturn)
 // CHECK:     4: [B6.3] (BindTemporary)
-// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const NoReturn)
+// CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
 // CHECK:     6: [B6.5]
 // CHECK:     7: [B6.2]([B6.6])
 // CHECK:     Preds (1): B7
@@ -1440,7 +1440,7 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
 // CHECK:     1: foo1
-// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, const C &(*)(void))
+// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, const class pass_references_through::C &(*)(void))
 // CHECK:     3: [B1.2]()
 // CHECK:     4: return [B1.3];
 // CHECK:     Preds (1): B2
@@ -1451,7 +1451,7 @@ const C &bar3(bool coin) {
 // CHECK:     Succs (1): B1
 // CHECK:   [B1]
 // CHECK:     1: foo2
-// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, C &&(*)(void))
+// CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class pass_references_through::C &&(*)(void))
 // CHECK:     3: [B1.2]()
 // CHECK:     4: return [B1.3];
 // CHECK:     Preds (1): B2

diff  --git a/clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p4.cpp b/clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p4.cpp
index 95810113cf100..910eb0c1a821b 100644
--- a/clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p4.cpp
+++ b/clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p4.cpp
@@ -44,7 +44,7 @@ namespace Test {
     // avoid accepting and printing out a typo correction that proves to be
     // incorrect once argument-dependent lookup resolution has occurred.
     func(B::B()); // expected-error {{use of undeclared identifier 'func'; did you mean 'C::func'?}} \
-                  // expected-error {{no viable conversion from 'B::B' to 'C'}}
+                  // expected-error {{no viable conversion from 'B::B' to 'C::C'}}
     func(C::C());
     A::A() + A::A();
     B::B() + B::B();

diff  --git a/clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p2.cpp b/clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p2.cpp
index 73c043fec4057..f4e8521093fc3 100644
--- a/clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p2.cpp
+++ b/clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p2.cpp
@@ -63,11 +63,11 @@ void test3() {
 
   int i = Ints::zero;
   Numbers2::f(i);
-  Numbers2::g(i); // expected-error {{no viable conversion from 'int' to 'Number'}}
+  Numbers2::g(i); // expected-error {{no viable conversion from 'int' to 'Numbers::Number'}}
 
   float f = Floats::zero;
   Numbers2::f(f);
-  Numbers2::g(f); // expected-error {{no viable conversion from 'float' to 'Number'}}
+  Numbers2::g(f); // expected-error {{no viable conversion from 'float' to 'Numbers::Number'}}
 }
 
 namespace inline_ns {

diff  --git a/clang/test/CXX/class.access/p4.cpp b/clang/test/CXX/class.access/p4.cpp
index d92ea8ab4e4c1..5664f726f1679 100644
--- a/clang/test/CXX/class.access/p4.cpp
+++ b/clang/test/CXX/class.access/p4.cpp
@@ -102,7 +102,7 @@ namespace test2 {
   A A::foo; // okay
   
 #if __cplusplus < 201103L
-  class B : A { }; // expected-error {{base class 'A' has private default constructor}}
+  class B : A { }; // expected-error {{base class 'test2::A' has private default constructor}}
   B b; // expected-note{{implicit default constructor}}
   
   class C : virtual A { 
@@ -110,14 +110,14 @@ namespace test2 {
     C();
   };
 
-  class D : C { }; // expected-error {{inherited virtual base class 'A' has private default constructor}}
+  class D : C { }; // expected-error {{inherited virtual base class 'test2::A' has private default constructor}}
   D d; // expected-note{{implicit default constructor}}
 #else
-  class B : A { }; // expected-note {{base class 'A' has an inaccessible default constructor}}
+  class B : A { }; // expected-note {{base class 'test2::A' has an inaccessible default constructor}}
   B b; // expected-error {{call to implicitly-deleted default constructor}}
   
   // FIXME: Do a better job of explaining how we get here from class D.
-  class C : virtual A { // expected-note {{default constructor of 'D' is implicitly deleted because base class 'A' has an inaccessible default constructor}}
+  class C : virtual A { // expected-note {{default constructor of 'D' is implicitly deleted because base class 'test2::A' has an inaccessible default constructor}}
   public:
     C();
   };
@@ -135,11 +135,11 @@ namespace test3 {
     static A foo;
   };
 
-  A a; // expected-error {{variable of type 'A' has private destructor}}
+  A a; // expected-error {{variable of type 'test3::A' has private destructor}}
   A A::foo;
 
   void foo(A param) { // okay
-    A local; // expected-error {{variable of type 'A' has private destructor}}
+    A local; // expected-error {{variable of type 'test3::A' has private destructor}}
   }
 
 #if __cplusplus < 201103L && !defined(_MSC_VER)
@@ -156,7 +156,7 @@ namespace test3 {
                    // expected-error {{inherited virtual base class 'Base<3>' has private destructor}}
     Base<0>,  // expected-error {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error {{base class 'Base2' has private destructor}}
+    Base2, // expected-error {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {
     ~Derived2() {}
@@ -167,7 +167,7 @@ namespace test3 {
                    // expected-note 2{{implicit default constructor}}
     Base<0>,  // expected-error 2 {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error 2 {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error 2 {{base class 'Base2' has private destructor}}
+    Base2, // expected-error 2 {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {};
   Derived3 d3; // expected-note{{implicit destructor}}} \
@@ -186,7 +186,7 @@ namespace test3 {
                    // expected-error {{inherited virtual base class 'Base<3>' has private destructor}}
     Base<0>,  // expected-error {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error {{base class 'Base2' has private destructor}}
+    Base2, // expected-error {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {
     ~Derived2() {} // expected-note 2{{in implicit destructor}}
@@ -196,7 +196,7 @@ namespace test3 {
                    // expected-error 2 {{inherited virtual base class 'Base<3>' has private destructor}}
     Base<0>,  // expected-error 2 {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error 2 {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error 2 {{base class 'Base2' has private destructor}}
+    Base2, // expected-error 2 {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {};
   Derived3 d3; // expected-note{{implicit destructor}}} expected-note {{implicit default constructor}}
@@ -213,7 +213,7 @@ namespace test3 {
                    // expected-error {{inherited virtual base class 'Base<3>' has private destructor}}
     Base<0>,  // expected-error {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error {{base class 'Base2' has private destructor}}
+    Base2, // expected-error {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {
     ~Derived2() {}
@@ -241,7 +241,7 @@ namespace test3 {
                    // expected-error {{inherited virtual base class 'Base<3>' has private destructor}}
     Base<0>,  // expected-error {{base class 'Base<0>' has private destructor}}
     virtual Base<1>, // expected-error {{base class 'Base<1>' has private destructor}}
-    Base2, // expected-error {{base class 'Base2' has private destructor}}
+    Base2, // expected-error {{base class 'test3::Base2' has private destructor}}
     virtual Base3
   {
     // expected-note at +2 {{in implicit destructor for 'test3::Base2' first required here}}
@@ -328,7 +328,7 @@ namespace test5 {
     a = Test1(); // expected-error {{copy assignment operator is implicitly deleted}}
   }
 
-  class Test2 : A {}; // expected-note {{because base class 'A' has an inaccessible copy assignment operator}}
+  class Test2 : A {}; // expected-note {{because base class 'test5::A' has an inaccessible copy assignment operator}}
   void test2() {
     Test2 a;
     a = Test2(); // expected-error {{copy assignment operator is implicitly deleted}}
@@ -347,12 +347,12 @@ namespace test6 {
   };
 
 #if __cplusplus < 201103L
-  class Test1 { A a; }; // expected-error {{field of type 'A' has private copy constructor}}
+  class Test1 { A a; }; // expected-error {{field of type 'test6::A' has private copy constructor}}
   void test1(const Test1 &t) {
     Test1 a = t; // expected-note{{implicit copy}}
   }
 
-  class Test2 : A {}; // expected-error {{base class 'A' has private copy constructor}}
+  class Test2 : A {}; // expected-error {{base class 'test6::A' has private copy constructor}}
   void test2(const Test2 &t) {
     Test2 a = t; // expected-note{{implicit copy}}
   }
@@ -362,7 +362,7 @@ namespace test6 {
     Test1 a = t; // expected-error{{implicitly-deleted}}
   }
 
-  class Test2 : A {}; // expected-note {{base class 'A' has an inaccessible copy constructor}}
+  class Test2 : A {}; // expected-note {{base class 'test6::A' has an inaccessible copy constructor}}
   void test2(const Test2 &t) {
     Test2 a = t; // expected-error{{implicitly-deleted}}
   }
@@ -483,7 +483,7 @@ namespace test14 {
   A foo();
 
   void test() {
-    foo(); // expected-error {{temporary of type 'A' has private destructor}}
+    foo(); // expected-error {{temporary of type 'test14::A' has private destructor}}
   }
 
   class X {
@@ -495,7 +495,7 @@ namespace test14 {
   };
   
   void g() {
-    const X &xr = Y1(); // expected-error{{temporary of type 'X' has private destructor}}
+    const X &xr = Y1(); // expected-error{{temporary of type 'test14::X' has private destructor}}
   }
 }
 
@@ -558,8 +558,8 @@ namespace test15 {
 // PR7281
 namespace test16 {
   class A { ~A(); }; // expected-note 2{{declared private here}}
-  void b() { throw A(); } // expected-error{{temporary of type 'A' has private destructor}} \
-  // expected-error{{exception object of type 'A' has private destructor}}
+  void b() { throw A(); } // expected-error{{temporary of type 'test16::A' has private destructor}} \
+  // expected-error{{exception object of type 'test16::A' has private destructor}}
 }
 
 // rdar://problem/8146294

diff  --git a/clang/test/CXX/class/class.compare/class.compare.default/p1.cpp b/clang/test/CXX/class/class.compare/class.compare.default/p1.cpp
index 42196665ba069..4bfd27461ed5e 100644
--- a/clang/test/CXX/class/class.compare/class.compare.default/p1.cpp
+++ b/clang/test/CXX/class/class.compare/class.compare.default/p1.cpp
@@ -29,8 +29,8 @@ struct A {
 
 template<typename T> struct Dependent {
   using U = typename T::type;
-  bool operator==(U) const = default; // expected-error {{found 'U'}}
-  friend bool operator==(U, U) = default; // expected-error {{found 'U'}}
+  bool operator==(U) const = default; // expected-error {{found 'Dependent<Bad>::U'}}
+  friend bool operator==(U, U) = default; // expected-error {{found 'Dependent<Bad>::U'}}
 };
 
 struct Good { using type = const Dependent<Good>&; };

diff  --git a/clang/test/CXX/class/class.compare/class.eq/p2.cpp b/clang/test/CXX/class/class.compare/class.eq/p2.cpp
index b98cef80925ad..44da9191dc0ee 100644
--- a/clang/test/CXX/class/class.compare/class.eq/p2.cpp
+++ b/clang/test/CXX/class/class.compare/class.eq/p2.cpp
@@ -127,7 +127,7 @@ namespace Access {
     // Note: this function is not deleted. The selected operator== is
     // accessible. But the derived-to-base conversion involves an inaccessible
     // base class, which we don't check for until we define the function.
-    bool operator==(const Z&) const = default; // expected-error {{cannot cast 'const Y' to its private base class 'const X'}} expected-warning {{ambiguous}}
+    bool operator==(const Z&) const = default; // expected-error {{cannot cast 'const Access::Y' to its private base class 'const Access::X'}} expected-warning {{ambiguous}}
   };
   bool z = Z() == Z(); // expected-note {{first required here}}
 }

diff  --git a/clang/test/CXX/class/class.compare/class.spaceship/p1.cpp b/clang/test/CXX/class/class.compare/class.spaceship/p1.cpp
index e2ee3880818f4..b951ed2dabd94 100644
--- a/clang/test/CXX/class/class.compare/class.spaceship/p1.cpp
+++ b/clang/test/CXX/class/class.compare/class.spaceship/p1.cpp
@@ -225,7 +225,7 @@ namespace Preference {
   struct B {
     B();
     A a;
-    std::strong_ordering operator<=>(const B&) const = default; // expected-error {{call to deleted constructor of 'A'}}
+    std::strong_ordering operator<=>(const B&) const = default; // expected-error {{call to deleted constructor of 'Preference::A'}}
   };
   bool x = B() < B(); // expected-note {{in defaulted three-way comparison operator for 'Preference::B' first required here}}
 }

diff  --git a/clang/test/CXX/class/class.compare/class.spaceship/p2.cpp b/clang/test/CXX/class/class.compare/class.spaceship/p2.cpp
index b6e135e0f8654..61d03e0723dc9 100644
--- a/clang/test/CXX/class/class.compare/class.spaceship/p2.cpp
+++ b/clang/test/CXX/class/class.compare/class.spaceship/p2.cpp
@@ -41,7 +41,7 @@ namespace DeducedNotCat {
     A operator<=>(const A&) const; // expected-note {{selected 'operator<=>' for member 'a' declared here}}
   };
   struct B {
-    A a; // expected-note {{return type 'A' of three-way comparison for member 'a' is not a standard comparison category type}}
+    A a; // expected-note {{return type 'DeducedNotCat::A' of three-way comparison for member 'a' is not a standard comparison category type}}
     auto operator<=>(const B&) const = default; // expected-warning {{implicitly deleted}}
   };
 }

diff  --git a/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp b/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
index e1a25c71c6ed1..975557c5187bb 100644
--- a/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
+++ b/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
@@ -11,7 +11,7 @@ struct A1 {
 };
 A1 test1() {
   A1 a;
-  return a; // expected-error {{call to deleted constructor of 'A1'}}
+  return a; // expected-error {{call to deleted constructor of 'test_delete_function::A1'}}
 }
 
 struct A2 {
@@ -34,7 +34,7 @@ struct B1 {
 };
 B1 test3() {
   C c;
-  return c; // expected-error {{conversion function from 'C' to 'B1' invokes a deleted function}}
+  return c; // expected-error {{conversion function from 'test_delete_function::C' to 'test_delete_function::B1' invokes a deleted function}}
 }
 
 struct B2 {
@@ -75,7 +75,7 @@ struct B1 {
   B1(B1 &&) = delete; // expected-note {{'B1' has been explicitly marked deleted here}}
 };
 B1 test3(B1 &&b) {
-  return b; // expected-error {{call to deleted constructor of 'B1'}}
+  return b; // expected-error {{call to deleted constructor of 'test_implicitly_movable_rvalue_ref::B1'}}
 }
 
 struct B2 {
@@ -104,7 +104,7 @@ void test1() {
   try {
     func();
   } catch (A1 a) {
-    throw a; // expected-error {{call to deleted constructor of 'A1'}}
+    throw a; // expected-error {{call to deleted constructor of 'test_throw_parameter::A1'}}
   }
 }
 
@@ -125,21 +125,21 @@ void test2() {
 void test3(A1 a) try {
   func();
 } catch (...) {
-  throw a; // expected-error {{call to deleted constructor of 'A1'}}
+  throw a; // expected-error {{call to deleted constructor of 'test_throw_parameter::A1'}}
 }
 
 #if __cplusplus >= 201103L
 namespace PR54341 {
 void test4(A1 a) {
   void f(decltype((throw a, 0)));
-  // expected-error at -1 {{call to deleted constructor of 'A1'}}
+  // expected-error at -1 {{call to deleted constructor of 'test_throw_parameter::A1'}}
 
   void g(int = decltype(throw a, 0){});
-  // expected-error at -1 {{call to deleted constructor of 'A1'}}
+  // expected-error at -1 {{call to deleted constructor of 'test_throw_parameter::A1'}}
 }
 
 void test5(A1 a, int = decltype(throw a, 0){}) {}
-// expected-error at -1 {{call to deleted constructor of 'A1'}}
+// expected-error at -1 {{call to deleted constructor of 'test_throw_parameter::A1'}}
 } // namespace PR54341
 #endif
 
@@ -176,7 +176,7 @@ struct B1 {
 };
 C test3() {
   B1 b;
-  return b; // expected-error {{conversion function from 'B1' to 'C' invokes a deleted function}}
+  return b; // expected-error {{conversion function from 'test_non_ctor_conversion::B1' to 'test_non_ctor_conversion::C' invokes a deleted function}}
 }
 
 struct B2 {
@@ -274,20 +274,20 @@ NeedValue test_3_1() {
   // not rvalue reference
   // same type
   B1 b;
-  return b; // cxx11_2b-error {{call to deleted constructor of 'B1'}}
+  return b; // cxx11_2b-error {{call to deleted constructor of 'test_ctor_param_rvalue_ref::B1'}}
 }
 class DerivedB1 : public B1 {};
 B1 test_3_2() {
   // rvalue reference
   // not same type
   DerivedB1 b;
-  return b; // expected-error {{call to deleted constructor of 'B1'}}
+  return b; // expected-error {{call to deleted constructor of 'test_ctor_param_rvalue_ref::B1'}}
 }
 NeedValue test_3_3() {
   // not rvalue reference
   // not same type
   DerivedB1 b;
-  return b; // cxx11_2b-error {{call to deleted constructor of 'B1'}}
+  return b; // cxx11_2b-error {{call to deleted constructor of 'test_ctor_param_rvalue_ref::B1'}}
 }
 
 struct B2 {

diff  --git a/clang/test/CXX/class/class.mem/p2.cpp b/clang/test/CXX/class/class.mem/p2.cpp
index c63c075574573..1f0dfd05a20de 100644
--- a/clang/test/CXX/class/class.mem/p2.cpp
+++ b/clang/test/CXX/class/class.mem/p2.cpp
@@ -12,7 +12,7 @@
 
 namespace test0 {
   struct A { // expected-note {{definition of 'test0::A' is not complete until the closing '}'}}
-    A x; // expected-error {{field has incomplete type 'A'}}
+    A x; // expected-error {{field has incomplete type 'test0::A'}}
   };
 }
 

diff  --git a/clang/test/CXX/conv/conv.fctptr/p1.cpp b/clang/test/CXX/conv/conv.fctptr/p1.cpp
index 7de2bffc78128..d18bd349b6882 100644
--- a/clang/test/CXX/conv/conv.fctptr/p1.cpp
+++ b/clang/test/CXX/conv/conv.fctptr/p1.cpp
@@ -39,5 +39,5 @@ namespace std_example {
   void (**pp)() noexcept = &p; // expected-error {{cannot initialize a variable of type 'void (**)() noexcept' with an rvalue of type 'void (**)()'}}
 
   struct S { typedef void (*p)(); operator p(); }; // expected-note {{candidate}}
-  void (*q)() noexcept = S(); // expected-error {{no viable conversion from 'S' to 'void (*)() noexcept'}}
+  void (*q)() noexcept = S(); // expected-error {{no viable conversion from 'std_example::S' to 'void (*)() noexcept'}}
 }

diff  --git a/clang/test/CXX/conv/conv.mem/p4.cpp b/clang/test/CXX/conv/conv.mem/p4.cpp
index d052b7927b32d..1618ae125d2f7 100644
--- a/clang/test/CXX/conv/conv.mem/p4.cpp
+++ b/clang/test/CXX/conv/conv.mem/p4.cpp
@@ -47,7 +47,7 @@ namespace test3 {
 // Can't be virtual even if there's a non-virtual path.
 namespace test4 {
   struct A : Base {};
-  struct Derived : Base, virtual A {}; // expected-warning  {{direct base 'Base' is inaccessible due to ambiguity:\n    struct test4::Derived -> Base\n    struct test4::Derived -> A -> Base}}
+  struct Derived : Base, virtual A {}; // expected-warning  {{direct base 'Base' is inaccessible due to ambiguity:\n    struct test4::Derived -> struct Base\n    struct test4::Derived -> struct test4::A -> struct Base}}
   void test() {
     int (Derived::*d) = data_ptr; // expected-error {{ambiguous conversion from pointer to member of base class 'Base' to pointer to member of derived class 'test4::Derived':}}
     int (Derived::*m)() = method_ptr; // expected-error {{ambiguous conversion from pointer to member of base class 'Base' to pointer to member of derived class 'test4::Derived':}}

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
index 88334031ec456..dcb9f60bdd2d2 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
@@ -29,7 +29,7 @@ namespace contents {
   struct C {
     constexpr ~C() {
       return;
-      Nonlit nl; // cxx2a-error {{variable of non-literal type 'Nonlit' cannot be defined in a constexpr function before C++2b}}
+      Nonlit nl; // cxx2a-error {{variable of non-literal type 'contents::Nonlit' cannot be defined in a constexpr function before C++2b}}
     }
   };
   struct D {
@@ -59,7 +59,7 @@ namespace subobject {
     ~A();
   };
   struct B : A { // expected-note {{here}}
-    constexpr ~B() {} // expected-error {{destructor cannot be declared constexpr because base class 'A' does not have a constexpr destructor}}
+    constexpr ~B() {} // expected-error {{destructor cannot be declared constexpr because base class 'subobject::A' does not have a constexpr destructor}}
   };
   struct C {
     A a; // expected-note {{here}}

diff  --git a/clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp b/clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp
index 7141124768e01..f14c0d02c16e3 100644
--- a/clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp
+++ b/clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp
@@ -46,8 +46,8 @@ namespace AnonymousMember {
   };
 
   void test() {
-    auto [a1] = Struct(); // expected-error {{cannot decompose class type 'Struct' because it has an anonymous struct member}}
-    auto [a2] = Union(); // expected-error {{cannot decompose class type 'Union' because it has an anonymous union member}}
+    auto [a1] = Struct(); // expected-error {{cannot decompose class type 'AnonymousMember::Struct' because it has an anonymous struct member}}
+    auto [a2] = Union(); // expected-error {{cannot decompose class type 'AnonymousMember::Union' because it has an anonymous union member}}
   }
 }
 
@@ -67,18 +67,18 @@ namespace MultipleClasses {
 
   struct I { int i; };
   struct J : I {};
-  struct K : I, virtual J {}; // expected-warning {{direct base 'I' is inaccessible due to ambiguity}}
+  struct K : I, virtual J {}; // expected-warning {{direct base 'MultipleClasses::I' is inaccessible due to ambiguity}}
 
   struct L : virtual J {};
   struct M : virtual J, L {};
 
   void test() {
     auto [b] = B(); // expected-error {{cannot decompose class type 'B': both it and its base class 'A' have non-static data members}}
-    auto [d] = D(); // expected-error {{cannot decompose class type 'D': its base classes 'A' and 'C' have non-static data members}}
+    auto [d] = D(); // expected-error {{cannot decompose class type 'D': its base classes 'A' and 'MultipleClasses::C' have non-static data members}}
     auto [e] = E();
-    auto [f] = F(); // expected-error-re {{cannot decompose members of ambiguous base class 'A' of 'F':{{.*}}struct MultipleClasses::F -> A{{.*}}struct MultipleClasses::F -> E -> A}}
+    auto [f] = F(); // expected-error-re {{cannot decompose members of ambiguous base class 'A' of 'F':{{.*}}struct MultipleClasses::F -> struct A{{.*}}struct MultipleClasses::F -> struct MultipleClasses::E -> struct A}}
     auto [h] = H(); // ok, only one (virtual) base subobject even though there are two paths to it
-    auto [k] = K(); // expected-error {{cannot decompose members of ambiguous base class 'I'}}
+    auto [k] = K(); // expected-error {{cannot decompose members of ambiguous base class 'MultipleClasses::I'}}
     auto [m] = M(); // ok, all paths to I are through the same virtual base subobject J
 
     same<decltype(m), int>();
@@ -214,7 +214,7 @@ namespace p0969r0 {
     auto &[x, y] = b;
   }
   void test_external(B b) {
-    auto &[x, y] = b; // expected-error {{cannot decompose members of inaccessible base class 'A' of 'p0969r0::B'}}
+    auto &[x, y] = b; // expected-error {{cannot decompose members of inaccessible base class 'p0969r0::A' of 'p0969r0::B'}}
   }
 
   struct C {

diff  --git a/clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp b/clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp
index 5b525fc91aba1..7274ee9c542fc 100644
--- a/clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp
+++ b/clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp
@@ -131,6 +131,6 @@ namespace PR13492 {
   };
 
   void f() {
-    const B b; // expected-error {{default initialization of an object of const type 'const B' without a user-provided default constructor}}
+    const B b; // expected-error {{default initialization of an object of const type 'const PR13492::B' without a user-provided default constructor}}
   }
 }

diff  --git a/clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp b/clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
index 0100d78ca844d..46f46d249666e 100644
--- a/clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
+++ b/clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
@@ -81,7 +81,7 @@ namespace bullet6 {
 
   const S& r1 = { 1, 2, 3.0 };
   const S& r2 = { "Spinach" };
-  S& r3 = { 1, 2, 3 };  // expected-error {{non-const lvalue reference to type 'S' cannot bind to an initializer list temporary}}
+  S& r3 = { 1, 2, 3 };  // expected-error {{non-const lvalue reference to type 'bullet6::S' cannot bind to an initializer list temporary}}
   const int& i1 = { 1 };
   const int& i2 = { 1.1 };  // expected-error {{type 'double' cannot be narrowed to 'int' in initializer list}} expected-note {{silence}} expected-warning {{implicit conversion}}
   const int (&iar)[2] = { 1, 2 };
@@ -134,11 +134,11 @@ namespace rdar13395022 {
 
   void test(MoveOnly mo) {
     auto &&list1 = {mo}; // expected-error {{call to implicitly-deleted copy constructor}} expected-note {{in initialization of temporary of type 'std::initializer_list}}
-    MoveOnly (&&list2)[1] = {mo}; // expected-error {{call to implicitly-deleted copy constructor}} expected-note {{in initialization of temporary of type 'MoveOnly[1]'}}
+    MoveOnly (&&list2)[1] = {mo}; // expected-error {{call to implicitly-deleted copy constructor}} expected-note {{in initialization of temporary of type 'rdar13395022::MoveOnly[1]'}}
     std::initializer_list<MoveOnly> &&list3 = {};
     MoveOnly (&&list4)[1] = {}; // expected-error {{no matching constructor}}
     // expected-note at -1 {{in implicit initialization of array element 0 with omitted initializer}}
-    // expected-note at -2 {{in initialization of temporary of type 'MoveOnly[1]' created to list-initialize this reference}}
+    // expected-note at -2 {{in initialization of temporary of type 'rdar13395022::MoveOnly[1]' created to list-initialize this reference}}
   }
 }
 

diff  --git a/clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp b/clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp
index e2349774ed73c..8bfb0047bdab2 100644
--- a/clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp
+++ b/clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp
@@ -118,7 +118,7 @@ namespace std_example_2 {
   const A& r = x;
   int&& rri = static_cast<int&&>(i);
   B&& rrb = x;
-  int&& rri2 = X(); // expected-error{{no viable conversion from 'X' to 'int'}}
+  int&& rri2 = X(); // expected-error{{no viable conversion from 'std_example_2::X' to 'int'}}
 
   const double& rcd2 = 2;
   double&& rrd = 2;
@@ -196,9 +196,9 @@ namespace PR11003 {
 namespace rdar13278115 {
   struct X { };
   struct Y : X { };
-  X &&f0(X &x) { return x; } // expected-error{{rvalue reference to type 'X' cannot bind to lvalue of type 'X'}}
-  X &&f1(Y &y) { return y; } // expected-error{{rvalue reference to type 'X' cannot bind to lvalue of type 'Y'}}
-  const X &&f2(Y &y) { return y; } // expected-error{{rvalue reference to type 'const X' cannot bind to lvalue of type 'Y'}}
+  X &&f0(X &x) { return x; } // expected-error{{rvalue reference to type 'rdar13278115::X' cannot bind to lvalue of type 'rdar13278115::X'}}
+  X &&f1(Y &y) { return y; } // expected-error{{rvalue reference to type 'rdar13278115::X' cannot bind to lvalue of type 'rdar13278115::Y'}}
+  const X &&f2(Y &y) { return y; } // expected-error{{rvalue reference to type 'const rdar13278115::X' cannot bind to lvalue of type 'rdar13278115::Y'}}
 }
 
 namespace bitfields {

diff  --git a/clang/test/CXX/drs/dr0xx.cpp b/clang/test/CXX/drs/dr0xx.cpp
index 2959f4ebba910..01c4001848013 100644
--- a/clang/test/CXX/drs/dr0xx.cpp
+++ b/clang/test/CXX/drs/dr0xx.cpp
@@ -79,7 +79,7 @@ namespace dr5 { // dr5: yes
 namespace dr7 { // dr7: yes
   class A { public: ~A(); };
   class B : virtual private A {}; // expected-note 2 {{declared private here}}
-  class C : public B {} c; // expected-error 2 {{inherited virtual base class 'A' has private destructor}} \
+  class C : public B {} c; // expected-error 2 {{inherited virtual base class 'dr7::A' has private destructor}} \
                            // expected-note {{implicit default constructor for 'dr7::C' first required here}} \
                            // expected-note {{implicit destructor for 'dr7::C' first required here}}
   class VeryDerivedC : public B, virtual public A {} vdc;
@@ -482,7 +482,7 @@ namespace dr39 { // dr39: no
       using V::z;
       float &z(float);
     };
-    struct C : A, B, virtual V {} c; // expected-warning {{direct base 'A' is inaccessible due to ambiguity:\n    struct dr39::example2::C -> A\n    struct dr39::example2::C -> B -> A}}
+    struct C : A, B, virtual V {} c; // expected-warning {{direct base 'dr39::example2::A' is inaccessible due to ambiguity:\n    struct dr39::example2::C -> struct dr39::example2::A\n    struct dr39::example2::C -> struct dr39::example2::B -> struct dr39::example2::A}}
     int &x = c.x(0); // expected-error {{found in multiple base classes}}
     // FIXME: This is valid, because we find the same static data member either way.
     int &y = c.y(0); // expected-error {{found in multiple base classes}}
@@ -965,7 +965,7 @@ namespace dr84 { // dr84: yes
   struct C {};
   struct B {
     B(B&); // expected-note 0-1{{candidate}}
-    B(C); // expected-note 0-1{{no known conversion from 'B' to 'C'}}
+    B(C); // expected-note 0-1{{no known conversion from 'dr84::B' to 'dr84::C'}}
     operator C() const;
   };
   A a;

diff  --git a/clang/test/CXX/drs/dr13xx.cpp b/clang/test/CXX/drs/dr13xx.cpp
index dc116f75b1aed..9efbd52ec58f1 100644
--- a/clang/test/CXX/drs/dr13xx.cpp
+++ b/clang/test/CXX/drs/dr13xx.cpp
@@ -18,7 +18,7 @@ namespace dr1305 { // dr1305: yes
 struct Incomplete; // expected-note {{forward declaration of 'dr1305::Incomplete'}}
 struct Complete {};
 
-int incomplete = alignof(Incomplete(&)[]); // expected-error {{invalid application of 'alignof' to an incomplete type 'Incomplete'}}
+int incomplete = alignof(Incomplete(&)[]); // expected-error {{invalid application of 'alignof' to an incomplete type 'dr1305::Incomplete'}}
 int complete = alignof(Complete(&)[]);
 }
 #endif

diff  --git a/clang/test/CXX/drs/dr16xx.cpp b/clang/test/CXX/drs/dr16xx.cpp
index 83b444766d035..3bbb197636480 100644
--- a/clang/test/CXX/drs/dr16xx.cpp
+++ b/clang/test/CXX/drs/dr16xx.cpp
@@ -292,7 +292,7 @@ namespace dr1687 { // dr1687: 7
 #if __cplusplus > 201703L
   enum E1 {};
   enum E2 {};
-  auto c = To<E1>() <=> To<E2>(); // expected-error {{invalid operands to binary expression ('To<E1>' and 'To<E2>')}}
+  auto c = To<E1>() <=> To<E2>(); // expected-error {{invalid operands to binary expression ('To<dr1687::E1>' and 'To<dr1687::E2>')}}
 #endif
 }
 

diff  --git a/clang/test/CXX/drs/dr17xx.cpp b/clang/test/CXX/drs/dr17xx.cpp
index b5ee7122ab3cb..addf1d274e91b 100644
--- a/clang/test/CXX/drs/dr17xx.cpp
+++ b/clang/test/CXX/drs/dr17xx.cpp
@@ -67,7 +67,7 @@ namespace dr1753 { // dr1753: 11
     n.dr1753::~T(); // expected-error {{'dr1753' does not refer to a type name in pseudo-destructor}}
     n.dr1753::T::~T();
 
-    n.A::~T(); // expected-error {{the type of object expression ('T' (aka 'int')) does not match the type being destroyed ('A') in pseudo-destructor expression}}
+    n.A::~T(); // expected-error {{the type of object expression ('dr1753::T' (aka 'int')) does not match the type being destroyed ('dr1753::A') in pseudo-destructor expression}}
     n.A::T::~T();
 
     n.B::~T(); // expected-error {{'B' does not refer to a type name in pseudo-destructor expression}}

diff  --git a/clang/test/CXX/drs/dr1xx.cpp b/clang/test/CXX/drs/dr1xx.cpp
index 0a44b87f80a71..51abb36dc9e3e 100644
--- a/clang/test/CXX/drs/dr1xx.cpp
+++ b/clang/test/CXX/drs/dr1xx.cpp
@@ -866,7 +866,7 @@ namespace dr177 { // dr177: yes
   struct B {};
   struct A {
     A(A &); // expected-note 0-1{{not viable: expects an lvalue}}
-    A(const B &); // expected-note 0-1{{not viable: no known conversion from 'A' to}}
+    A(const B &); // expected-note 0-1{{not viable: no known conversion from 'dr177::A' to}}
   };
   B b;
   A a = b;
@@ -878,7 +878,7 @@ namespace dr177 { // dr177: yes
   struct D : C {};
   struct E { operator D(); };
   E e;
-  C c = e; // expected-error {{no viable constructor copying variable of type 'D'}}
+  C c = e; // expected-error {{no viable constructor copying variable of type 'dr177::D'}}
 }
 
 namespace dr178 { // dr178: yes

diff  --git a/clang/test/CXX/drs/dr2xx.cpp b/clang/test/CXX/drs/dr2xx.cpp
index eebb80a15af82..4a409e56addee 100644
--- a/clang/test/CXX/drs/dr2xx.cpp
+++ b/clang/test/CXX/drs/dr2xx.cpp
@@ -483,7 +483,7 @@ namespace dr244 { // dr244: 11
   B* B_ptr = &D_object;
 
   void f() {
-    D_object.~B(); // expected-error {{does not match the type 'D' of the object being destroyed}}
+    D_object.~B(); // expected-error {{does not match the type 'dr244::D' of the object being destroyed}}
     D_object.B::~B();
     D_object.D::~B(); // FIXME: Missing diagnostic for this.
     B_ptr->~B();
@@ -680,7 +680,7 @@ namespace dr257 { // dr257: yes
     C() {}
   };
   struct D : B {
-    D() {} // expected-error {{must explicitly initialize the base class 'A'}}
+    D() {} // expected-error {{must explicitly initialize the base class 'dr257::A'}}
     void f();
   };
 }
@@ -1057,7 +1057,7 @@ namespace dr294 { // dr294: no
 
 namespace dr295 { // dr295: 3.7
   typedef int f();
-  const f g; // expected-warning {{'const' qualifier on function type 'f' (aka 'int ()') has no effect}}
+  const f g; // expected-warning {{'const' qualifier on function type 'dr295::f' (aka 'int ()') has no effect}}
   f &r = g;
   template<typename T> struct X {
     const T &f;
@@ -1065,10 +1065,10 @@ namespace dr295 { // dr295: 3.7
   X<f> x = {g};
 
   typedef int U();
-  typedef const U U; // expected-warning {{'const' qualifier on function type 'U' (aka 'int ()') has no effect}}
+  typedef const U U; // expected-warning {{'const' qualifier on function type 'dr295::U' (aka 'int ()') has no effect}}
 
   typedef int (*V)();
-  typedef volatile U *V; // expected-warning {{'volatile' qualifier on function type 'U' (aka 'int ()') has no effect}}
+  typedef volatile U *V; // expected-warning {{'volatile' qualifier on function type 'dr295::U' (aka 'int ()') has no effect}}
 }
 
 namespace dr296 { // dr296: yes
@@ -1096,7 +1096,7 @@ namespace dr298 { // dr298: yes
 
   B::B() {} // expected-error {{a type specifier is required}}
   B::A() {} // ok
-  C::~C() {} // expected-error {{destructor cannot be declared using a typedef 'C' (aka 'const dr298::A') of the class name}}
+  C::~C() {} // expected-error {{destructor cannot be declared using a typedef 'dr298::C' (aka 'const dr298::A') of the class name}}
 
   typedef struct D E; // expected-note {{here}}
   struct E {}; // expected-error {{conflicts with typedef}}

diff  --git a/clang/test/CXX/drs/dr3xx.cpp b/clang/test/CXX/drs/dr3xx.cpp
index 0278a7d7f4974..25dc207717f67 100644
--- a/clang/test/CXX/drs/dr3xx.cpp
+++ b/clang/test/CXX/drs/dr3xx.cpp
@@ -163,9 +163,9 @@ namespace dr308 { // dr308: yes
   void f() {
     try {
       throw D();
-    } catch (const A&) { // expected-note {{for type 'const A &'}}
+    } catch (const A&) { // expected-note {{for type 'const dr308::A &'}}
       // unreachable
-    } catch (const B&) { // expected-warning {{exception of type 'const B &' will be caught by earlier handler}}
+    } catch (const B&) { // expected-warning {{exception of type 'const dr308::B &' will be caught by earlier handler}}
       // get here instead
     }
   }

diff  --git a/clang/test/CXX/drs/dr4xx.cpp b/clang/test/CXX/drs/dr4xx.cpp
index 16957dd9d0e39..bf4cd541b1ebb 100644
--- a/clang/test/CXX/drs/dr4xx.cpp
+++ b/clang/test/CXX/drs/dr4xx.cpp
@@ -885,8 +885,8 @@ namespace dr479 { // dr479: yes
   };
   void f() {
     throw S();
-    // expected-error at -1 {{temporary of type 'S' has private destructor}}
-    // expected-error at -2 {{exception object of type 'S' has private destructor}}
+    // expected-error at -1 {{temporary of type 'dr479::S' has private destructor}}
+    // expected-error at -2 {{exception object of type 'dr479::S' has private destructor}}
 #if __cplusplus < 201103L
     // expected-error at -4 {{C++98 requires an accessible copy constructor}}
 #endif
@@ -898,7 +898,7 @@ namespace dr479 { // dr479: yes
     S s; // expected-error {{private destructor}}}
     throw s;
     // expected-error at -1 {{calling a private constructor}}
-    // expected-error at -2 {{exception object of type 'S' has private destructor}}
+    // expected-error at -2 {{exception object of type 'dr479::S' has private destructor}}
   }
   void h() {
     try {
@@ -906,7 +906,7 @@ namespace dr479 { // dr479: yes
       g();
     } catch (S s) {
       // expected-error at -1 {{calling a private constructor}}
-      // expected-error at -2 {{variable of type 'S' has private destructor}}
+      // expected-error at -2 {{variable of type 'dr479::S' has private destructor}}
     }
   }
 }

diff  --git a/clang/test/CXX/drs/dr5xx.cpp b/clang/test/CXX/drs/dr5xx.cpp
index 1eb3058f07359..9e86995f821fd 100644
--- a/clang/test/CXX/drs/dr5xx.cpp
+++ b/clang/test/CXX/drs/dr5xx.cpp
@@ -954,7 +954,7 @@ namespace dr591 { // dr591: no
 
   template<typename T> struct A<T>::B::C : A<T> {
     // FIXME: Should find member of non-dependent base class A<T>.
-    M m; // expected-error {{incomplete type 'M' (aka 'void'}}
+    M m; // expected-error {{incomplete type 'dr591::A::B::M' (aka 'void'}}
   };
 }
 

diff  --git a/clang/test/CXX/drs/dr9xx.cpp b/clang/test/CXX/drs/dr9xx.cpp
index db40c8a01a8d3..e8c22b2972cef 100644
--- a/clang/test/CXX/drs/dr9xx.cpp
+++ b/clang/test/CXX/drs/dr9xx.cpp
@@ -25,7 +25,7 @@ namespace dr990 { // dr990: 3.5
     A a;
   };
   B b1 { };
-  B b2 { 1 }; // expected-error {{no viable conversion from 'int' to 'A'}}
+  B b2 { 1 }; // expected-error {{no viable conversion from 'int' to 'dr990::A'}}
   B b3 { { 1 } };
 
   struct C {

diff  --git a/clang/test/CXX/except/except.spec/p1.cpp b/clang/test/CXX/except/except.spec/p1.cpp
index 3b392632aed30..e5a8a5de9ef8e 100644
--- a/clang/test/CXX/except/except.spec/p1.cpp
+++ b/clang/test/CXX/except/except.spec/p1.cpp
@@ -54,7 +54,7 @@ namespace noex {
 
   struct A {};
 
-  void g1() noexcept(A());     // expected-error {{value of type 'A' is not implicitly convertible to 'bool'}}
+  void g1() noexcept(A());     // expected-error {{value of type 'noex::A' is not implicitly convertible to 'bool'}}
   void g2(bool b) noexcept(b); // expected-error {{noexcept specifier argument is not a constant expression}} expected-note {{function parameter 'b' with unknown value}} expected-note {{here}}
 }
 

diff  --git a/clang/test/CXX/expr/expr.const/p2-0x.cpp b/clang/test/CXX/expr/expr.const/p2-0x.cpp
index 8b10f33e80185..6d2bc3f25179b 100644
--- a/clang/test/CXX/expr/expr.const/p2-0x.cpp
+++ b/clang/test/CXX/expr/expr.const/p2-0x.cpp
@@ -474,7 +474,7 @@ namespace std {
 namespace TypeId {
   struct S { virtual void f(); };
   constexpr S *p = 0;
-  constexpr const std::type_info &ti1 = typeid(*p); // expected-error {{must be initialized by a constant expression}} cxx11-note {{typeid applied to expression of polymorphic type 'S'}} cxx20-note {{dereferenced null pointer}}
+  constexpr const std::type_info &ti1 = typeid(*p); // expected-error {{must be initialized by a constant expression}} cxx11-note {{typeid applied to expression of polymorphic type 'TypeId::S'}} cxx20-note {{dereferenced null pointer}}
 
   struct T {} t;
   constexpr const std::type_info &ti2 = typeid(t);

diff  --git a/clang/test/CXX/expr/expr.const/p5-0x.cpp b/clang/test/CXX/expr/expr.const/p5-0x.cpp
index 71d5979095b15..4a49f01cbb5da 100644
--- a/clang/test/CXX/expr/expr.const/p5-0x.cpp
+++ b/clang/test/CXX/expr/expr.const/p5-0x.cpp
@@ -15,7 +15,7 @@ struct A {
 template<int> struct X { };
 constexpr A a = 42;
 X<a> x;     // ok, unique conversion to int
-int ary[a]; // expected-error {{ambiguous conversion from type 'const A' to an integral or unscoped enumeration type}}
+int ary[a]; // expected-error {{ambiguous conversion from type 'const std_example::A' to an integral or unscoped enumeration type}}
 
 }
 

diff  --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
index b570a96a6a0c5..7fc86e8109270 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
@@ -97,7 +97,7 @@ namespace rdar14468891 {
   class Y : public X { };
 
   void capture(X &x) {
-    [x]() {}(); // expected-error{{by-copy capture of value of abstract type 'X'}}
+    [x]() {}(); // expected-error{{by-copy capture of value of abstract type 'rdar14468891::X'}}
   }
 }
 
@@ -105,7 +105,7 @@ namespace rdar15560464 {
   struct X; // expected-note{{forward declaration of 'rdar15560464::X'}}
   void foo(const X& param) {
     auto x = ([=]() {
-        auto& y = param; // expected-error{{by-copy capture of variable 'param' with incomplete type 'const X'}}
+        auto& y = param; // expected-error{{by-copy capture of variable 'param' with incomplete type 'const rdar15560464::X'}}
       });
   }
 }

diff  --git a/clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp b/clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp
index 4eac0a1ac510f..594654730d071 100644
--- a/clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp
+++ b/clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp
@@ -36,7 +36,7 @@ namespace std {
 
 namespace p0702r1 {
   template<typename T> struct X { // expected-note {{candidate}}
-    X(std::initializer_list<T>); // expected-note {{candidate template ignored: could not match 'std::initializer_list<T>' against 'Z'}}
+    X(std::initializer_list<T>); // expected-note {{candidate template ignored: could not match 'std::initializer_list<T>' against 'p0702r1::Z'}}
   };
 
   X xi = {0};

diff  --git a/clang/test/CXX/over/over.match/over.match.funcs/over.match.copy/p1.cpp b/clang/test/CXX/over/over.match/over.match.funcs/over.match.copy/p1.cpp
index 16194265c9b30..c63f309715398 100644
--- a/clang/test/CXX/over/over.match/over.match.funcs/over.match.copy/p1.cpp
+++ b/clang/test/CXX/over/over.match/over.match.funcs/over.match.copy/p1.cpp
@@ -10,7 +10,7 @@ namespace ExplicitConv {
   void test(const Y& y) {
     X x(static_cast<X>(y));
     X x2((X)y);
-    X x3 = y; // expected-error{{no viable conversion from 'const Y' to 'X'}}
+    X x3 = y; // expected-error{{no viable conversion from 'const ExplicitConv::Y' to 'ExplicitConv::X'}}
   }
 }
 

diff  --git a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
index 0ba3a1e56ca4f..f572a79327723 100644
--- a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
+++ b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp
@@ -48,8 +48,8 @@ namespace bullet4 {
   bool cmp = x1 <=> x2; // expected-error {{selected deleted operator '<=>'}}
 
   // expected-note@#1member 5{{candidate function has been explicitly deleted}}
-  // expected-note@#1 5{{candidate function not viable: no known conversion from 'Y' to 'X<1>' for 1st argument}}
-  // expected-note@#1 5{{candidate function (with reversed parameter order) not viable: no known conversion from 'Y' to 'X<2>' for 1st argument}}
+  // expected-note@#1 5{{candidate function not viable: no known conversion from 'bullet4::Y' to 'X<1>' for 1st argument}}
+  // expected-note@#1 5{{candidate function (with reversed parameter order) not viable: no known conversion from 'bullet4::Y' to 'X<2>' for 1st argument}}
   bool mem_lt = y < x2; // expected-error {{selected deleted operator '<=>'}}
   bool mem_le = y <= x2; // expected-error {{selected deleted operator '<=>'}}
   bool mem_gt = y > x2; // expected-error {{selected deleted operator '<=>'}}
@@ -71,7 +71,7 @@ namespace bullet4 {
 
   // expected-note@#1member 5{{candidate function (with reversed parameter order) has been explicitly deleted}}
   // expected-note@#1 5{{candidate function not viable: no known conversion from 'X<2>' to 'X<1>' for 1st argument}}
-  // expected-note@#1 5{{candidate function (with reversed parameter order) not viable: no known conversion from 'Y' to 'X<1>' for 2nd argument}}
+  // expected-note@#1 5{{candidate function (with reversed parameter order) not viable: no known conversion from 'bullet4::Y' to 'X<1>' for 2nd argument}}
   bool mem_rlt = x2 < y; // expected-error {{selected deleted operator '<=>'}}
   bool mem_rle = x2 <= y; // expected-error {{selected deleted operator '<=>'}}
   bool mem_rgt = x2 > y; // expected-error {{selected deleted operator '<=>'}}
@@ -88,8 +88,8 @@ namespace bullet4 {
   bool ne = x1 != x2; // expected-error {{selected deleted operator '=='}}
 
   // expected-note@#2member 2{{candidate function has been explicitly deleted}}
-  // expected-note@#2 2{{candidate function not viable: no known conversion from 'Y' to 'X<1>' for 1st argument}}
-  // expected-note@#2 2{{candidate function (with reversed parameter order) not viable: no known conversion from 'Y' to 'X<2>' for 1st argument}}
+  // expected-note@#2 2{{candidate function not viable: no known conversion from 'bullet4::Y' to 'X<1>' for 1st argument}}
+  // expected-note@#2 2{{candidate function (with reversed parameter order) not viable: no known conversion from 'bullet4::Y' to 'X<2>' for 1st argument}}
   bool mem_eq = y == x2; // expected-error {{selected deleted operator '=='}}
   bool mem_ne = y != x2; // expected-error {{selected deleted operator '=='}}
 
@@ -104,7 +104,7 @@ namespace bullet4 {
 
   // expected-note@#2member 2{{candidate function (with reversed parameter order) has been explicitly deleted}}
   // expected-note@#2 2{{candidate function not viable: no known conversion from 'X<2>' to 'X<1>' for 1st argument}}
-  // expected-note@#2 2{{candidate function (with reversed parameter order) not viable: no known conversion from 'Y' to 'X<1>' for 2nd argument}}
+  // expected-note@#2 2{{candidate function (with reversed parameter order) not viable: no known conversion from 'bullet4::Y' to 'X<1>' for 2nd argument}}
   bool mem_req = x2 == y; // expected-error {{selected deleted operator '=='}}
   bool mem_rne = x2 != y; // expected-error {{selected deleted operator '=='}}
 
@@ -163,7 +163,7 @@ namespace problem_cases {
   struct ICUDerived : ICUBase {
     UBool operator==(const ICUBase&) const override; // expected-note {{declared here}} expected-note {{ambiguity is between}}
   };
-  bool cmp_icu = ICUDerived() != ICUDerived(); // expected-warning {{ambiguous}} expected-warning {{'bool', not 'UBool'}}
+  bool cmp_icu = ICUDerived() != ICUDerived(); // expected-warning {{ambiguous}} expected-warning {{'bool', not 'problem_cases::UBool'}}
 }
 
 #else // NO_ERRORS

diff  --git a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp
index 95d6a55aee66a..3826a4127910e 100644
--- a/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp
+++ b/clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp
@@ -25,7 +25,7 @@ namespace not_bool {
 
   enum E {};
   E operator==(Y, Z); // expected-note {{here}}
-  bool h = z == y; // expected-warning {{ISO C++20 requires return type of selected 'operator==' function for rewritten '==' comparison to be 'bool', not 'E'}}
+  bool h = z == y; // expected-warning {{ISO C++20 requires return type of selected 'operator==' function for rewritten '==' comparison to be 'bool', not 'not_bool::E'}}
 }
 
 struct X { bool equal; };

diff  --git a/clang/test/CXX/special/class.copy/p23-cxx11.cpp b/clang/test/CXX/special/class.copy/p23-cxx11.cpp
index 7d55c20356819..3e2341c3331fb 100644
--- a/clang/test/CXX/special/class.copy/p23-cxx11.cpp
+++ b/clang/test/CXX/special/class.copy/p23-cxx11.cpp
@@ -171,7 +171,7 @@ namespace PR13381 {
   };
   void g() {
     T t;
-    t = T(); // expected-error{{object of type 'T' cannot be assigned because its copy assignment operator is implicitly deleted}}
+    t = T(); // expected-error{{object of type 'PR13381::T' cannot be assigned because its copy assignment operator is implicitly deleted}}
   }
 }
 

diff  --git a/clang/test/CXX/special/class.copy/p3-cxx11.cpp b/clang/test/CXX/special/class.copy/p3-cxx11.cpp
index bee2d02c96911..d8efbfd67033b 100644
--- a/clang/test/CXX/special/class.copy/p3-cxx11.cpp
+++ b/clang/test/CXX/special/class.copy/p3-cxx11.cpp
@@ -38,7 +38,7 @@ namespace PR10142 {
       X x2;
       if (i)
         throw x2; // okay
-      throw x; // expected-error{{call to deleted constructor of 'X'}}
+      throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}}
     } catch (...) {
     }
   }

diff  --git a/clang/test/CXX/special/class.inhctor/p4.cpp b/clang/test/CXX/special/class.inhctor/p4.cpp
index 703bec0eb306e..a5d2cd74b50f9 100644
--- a/clang/test/CXX/special/class.inhctor/p4.cpp
+++ b/clang/test/CXX/special/class.inhctor/p4.cpp
@@ -70,5 +70,5 @@ namespace DRnnnn {
   };
 
   constexpr B b0(0, 0.0f); // ok, constexpr
-  B b1(0, 1); // expected-error {{call to constructor of 'B' is ambiguous}}
+  B b1(0, 1); // expected-error {{call to constructor of 'DRnnnn::B' is ambiguous}}
 }

diff  --git a/clang/test/CXX/special/class.temporary/p1.cpp b/clang/test/CXX/special/class.temporary/p1.cpp
index 208062a7c3cb6..75a56df1e9c32 100644
--- a/clang/test/CXX/special/class.temporary/p1.cpp
+++ b/clang/test/CXX/special/class.temporary/p1.cpp
@@ -13,7 +13,7 @@ namespace test0 {
 
   void test() {
     A a;
-    foo(a); // expected-error {{call to deleted constructor of 'A'}}
+    foo(a); // expected-error {{call to deleted constructor of 'test0::A'}}
   }
 }
 

diff  --git a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
index 93c2beb5ba1fe..751ad58ad820b 100644
--- a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
@@ -103,7 +103,7 @@ void g() {
   for (auto *a : A()) { // expected-error {{variable 'a' with type 'auto *' has incompatible initializer of type 'int'}}
   }
   // : is not a typo for :: here.
-  for (A NS:A()) { // expected-error {{no viable conversion from 'int' to 'A'}}
+  for (A NS:A()) { // expected-error {{no viable conversion from 'int' to 'X::A'}}
   }
   for (auto not_in_scope : not_in_scope) { // expected-error {{use of undeclared identifier 'not_in_scope'}}
   }
@@ -250,7 +250,7 @@ void DR1442() {
 
 namespace NS {
   class ADL {};
-  int *begin(ADL); // expected-note {{no known conversion from 'NS::NoADL' to 'ADL'}}
+  int *begin(ADL); // expected-note {{no known conversion from 'NS::NoADL' to 'NS::ADL'}}
   int *end(ADL);
 
   class NoADL {};

diff  --git a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
index 6579eb19a7596..72a61874ed038 100644
--- a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
@@ -64,11 +64,11 @@ namespace ccce {
     }
     if constexpr (b) { // expected-error {{constexpr if condition is not a constant expression}} expected-note {{cannot be used in a constant expression}}
     }
-    if constexpr (s) { // expected-error {{value of type 'S' is not contextually convertible to 'bool'}}
+    if constexpr (s) { // expected-error {{value of type 'ccce::S' is not contextually convertible to 'bool'}}
     }
 
     constexpr S constexprS;
-    if constexpr (constexprS) { // expected-error {{value of type 'const S' is not contextually convertible to 'bool'}}
+    if constexpr (constexprS) { // expected-error {{value of type 'const ccce::S' is not contextually convertible to 'bool'}}
     }
   }
 }

diff  --git a/clang/test/CodeGen/builtin-bpf-btf-type-id.c b/clang/test/CodeGen/builtin-bpf-btf-type-id.c
index 4c6efd69eb956..c8f29ee5fe4ab 100644
--- a/clang/test/CodeGen/builtin-bpf-btf-type-id.c
+++ b/clang/test/CodeGen/builtin-bpf-btf-type-id.c
@@ -21,5 +21,5 @@ unsigned test3() {
 //
 // CHECK: ![[INT]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed
 // CHECK: ![[INT_POINTER]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[INT]], size: 64
-// CHECK: ![[STRUCT_T1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1"
 // CHECK: ![[TYPEDEF_T1]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__t1"
+// CHECK: ![[STRUCT_T1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1"

diff  --git a/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c b/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c
index 53b448908a0a6..a8cc073974604 100644
--- a/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c
+++ b/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c
@@ -37,5 +37,5 @@ unsigned unit3() {
 // CHECK: call i32 @llvm.bpf.preserve.type.info(i32 5, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA]]
 
 // CHECK: ![[ENUM_AA]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "AA"
-// CHECK: ![[STRUCT_S]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s"
 // CHECK: ![[TYPEDEF_INT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__int"
+// CHECK: ![[STRUCT_S]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s"

diff  --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-return-adjustment.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-return-adjustment.cpp
index 954f39c068cc1..f7b79a9fa5d6e 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-return-adjustment.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-return-adjustment.cpp
@@ -25,16 +25,16 @@ struct D {
 
 struct X : D {
   // CHECK-LABEL: VFTable for 'test1::D' in 'test1::X' (3 entries).
-  // CHECK-NEXT:   0 | C *test1::X::foo()
+  // CHECK-NEXT:   0 | test1::C *test1::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test1::B *'): 4 non-virtual]
   // CHECK-NEXT:   1 | void test1::D::z()
-  // CHECK-NEXT:   2 | C *test1::X::foo()
+  // CHECK-NEXT:   2 | test1::C *test1::X::foo()
 
-  // CHECK-LABEL: Thunks for 'C *test1::X::foo()' (1 entry).
+  // CHECK-LABEL: Thunks for 'test1::C *test1::X::foo()' (1 entry).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test1::B *'): 4 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test1::X' (1 entry).
-  // CHECK-NEXT:   2 | C *test1::X::foo()
+  // CHECK-NEXT:   2 | test1::C *test1::X::foo()
 
   // MANGLING-DAG: @"??_7X at test1@@6B@"
 
@@ -72,19 +72,19 @@ struct F : C { };
 struct X : E {
   virtual F* foo();
   // CHECK-LABEL: VFTable for 'test2::D' in 'test2::E' in 'test2::X' (4 entries).
-  // CHECK-NEXT:   0 | F *test2::X::foo()
+  // CHECK-NEXT:   0 | test2::F *test2::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test2::B *'): 4 non-virtual]
   // CHECK-NEXT:   1 | void test2::D::z()
-  // CHECK-NEXT:   2 | F *test2::X::foo()
+  // CHECK-NEXT:   2 | test2::F *test2::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test2::C *'): 0 non-virtual]
-  // CHECK-NEXT:   3 | F *test2::X::foo()
+  // CHECK-NEXT:   3 | test2::F *test2::X::foo()
 
-  // CHECK-LABEL: Thunks for 'F *test2::X::foo()' (2 entries).
+  // CHECK-LABEL: Thunks for 'test2::F *test2::X::foo()' (2 entries).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test2::C *'): 0 non-virtual]
   // CHECK-NEXT:   1 | [return adjustment (to type 'struct test2::B *'): 4 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test2::X' (1 entry).
-  // CHECK-NEXT:   3 | F *test2::X::foo()
+  // CHECK-NEXT:   3 | test2::F *test2::X::foo()
 };
 
 void build_vftable(X *obj) { obj->foo(); }
@@ -117,19 +117,19 @@ struct F : A, C { };
 
 struct X : E {
   // CHECK-LABEL: VFTable for 'test3::D' in 'test3::E' in 'test3::X' (4 entries).
-  // CHECK-NEXT:   0 | F *test3::X::foo()
+  // CHECK-NEXT:   0 | test3::F *test3::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test3::B *'): 8 non-virtual]
   // CHECK-NEXT:   1 | void test3::D::z()
-  // CHECK-NEXT:   2 | F *test3::X::foo()
+  // CHECK-NEXT:   2 | test3::F *test3::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test3::C *'): 4 non-virtual]
-  // CHECK-NEXT:   3 | F *test3::X::foo()
+  // CHECK-NEXT:   3 | test3::F *test3::X::foo()
 
-  // CHECK-LABEL: Thunks for 'F *test3::X::foo()' (2 entries).
+  // CHECK-LABEL: Thunks for 'test3::F *test3::X::foo()' (2 entries).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test3::C *'): 4 non-virtual]
   // CHECK-NEXT:   1 | [return adjustment (to type 'struct test3::B *'): 8 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test3::X' (1 entry).
-  // CHECK-NEXT:   3 | F *test3::X::foo()
+  // CHECK-NEXT:   3 | test3::F *test3::X::foo()
 
   virtual F* foo();
 };
@@ -164,27 +164,27 @@ struct F : A, C { };
 
 struct X : D, E {
   // CHECK-LABEL: VFTable for 'test4::D' in 'test4::X' (3 entries).
-  // CHECK-NEXT:   0 | F *test4::X::foo()
+  // CHECK-NEXT:   0 | test4::F *test4::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test4::B *'): 8 non-virtual]
   // CHECK-NEXT:   1 | void test4::D::z()
-  // CHECK-NEXT:   2 | F *test4::X::foo()
+  // CHECK-NEXT:   2 | test4::F *test4::X::foo()
 
-  // CHECK-LABEL: Thunks for 'F *test4::X::foo()' (1 entry).
+  // CHECK-LABEL: Thunks for 'test4::F *test4::X::foo()' (1 entry).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test4::B *'): 8 non-virtual]
 
   // CHECK-LABEL: VFTable for 'test4::D' in 'test4::E' in 'test4::X' (4 entries).
-  // CHECK-NEXT:   0 | F *test4::X::foo()
+  // CHECK-NEXT:   0 | test4::F *test4::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test4::B *'): 8 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
   // CHECK-NEXT:   1 | void test4::D::z()
-  // CHECK-NEXT:   2 | F *test4::X::foo()
+  // CHECK-NEXT:   2 | test4::F *test4::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test4::C *'): 4 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
-  // CHECK-NEXT:   3 | F *test4::X::foo()
+  // CHECK-NEXT:   3 | test4::F *test4::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test4::F *'): 0 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
 
-  // CHECK-LABEL: Thunks for 'F *test4::X::foo()' (3 entries).
+  // CHECK-LABEL: Thunks for 'test4::F *test4::X::foo()' (3 entries).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test4::F *'): 0 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
   // CHECK-NEXT:   1 | [return adjustment (to type 'struct test4::C *'): 4 non-virtual]
@@ -193,7 +193,7 @@ struct X : D, E {
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test4::X' (1 entry).
-  // CHECK-NEXT:   2 | F *test4::X::foo()
+  // CHECK-NEXT:   2 | test4::F *test4::X::foo()
 
   virtual F* foo();
 };
@@ -226,17 +226,17 @@ struct X : A, D {
   // CHECK-NEXT:   1 | void test5::A::h()
 
   // CHECK-LABEL: VFTable for 'test5::D' in 'test5::X' (3 entries).
-  // CHECK-NEXT:   0 | C *test5::X::foo()
+  // CHECK-NEXT:   0 | test5::C *test5::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test5::B *'): 4 non-virtual]
   // CHECK-NEXT:   1 | void test5::D::z()
-  // CHECK-NEXT:   2 | C *test5::X::foo()
+  // CHECK-NEXT:   2 | test5::C *test5::X::foo()
 
-  // CHECK-LABEL: Thunks for 'C *test5::X::foo()' (1 entry).
+  // CHECK-LABEL: Thunks for 'test5::C *test5::X::foo()' (1 entry).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test5::B *'): 4 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test5::X' (1 entry).
   // CHECK-NEXT:   via vfptr at offset 4
-  // CHECK-NEXT:   2 | C *test5::X::foo()
+  // CHECK-NEXT:   2 | test5::C *test5::X::foo()
 
   virtual C* foo();
 };
@@ -275,20 +275,20 @@ struct X : E {
   // CHECK-NEXT:   1 | void test6::A::h()
 
   // CHECK-LABEL: VFTable for 'test6::D' in 'test6::E' in 'test6::X' (4 entries).
-  // CHECK-NEXT:   0 | F *test6::X::foo()
+  // CHECK-NEXT:   0 | test6::F *test6::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test6::B *'): 8 non-virtual]
   // CHECK-NEXT:   1 | void test6::D::z()
-  // CHECK-NEXT:   2 | F *test6::X::foo()
+  // CHECK-NEXT:   2 | test6::F *test6::X::foo()
   // CHECK-NEXT:       [return adjustment (to type 'struct test6::C *'): 4 non-virtual]
-  // CHECK-NEXT:   3 | F *test6::X::foo()
+  // CHECK-NEXT:   3 | test6::F *test6::X::foo()
 
-  // CHECK-LABEL: Thunks for 'F *test6::X::foo()' (2 entries).
+  // CHECK-LABEL: Thunks for 'test6::F *test6::X::foo()' (2 entries).
   // CHECK-NEXT:   0 | [return adjustment (to type 'struct test6::C *'): 4 non-virtual]
   // CHECK-NEXT:   1 | [return adjustment (to type 'struct test6::B *'): 8 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'test6::X' (1 entry).
   // CHECK-NEXT:   -- accessible via vfptr at offset 4 --
-  // CHECK-NEXT:   3 | F *test6::X::foo()
+  // CHECK-NEXT:   3 | test6::F *test6::X::foo()
 
   virtual F* foo();
 };
@@ -310,8 +310,8 @@ struct C : B, A {
   // CHECK-NEXT:   0 | void test7::C::g()
 
   // CHECK-LABEL: VFTable for 'test7::A' in 'test7::C' (2 entries).
-  // CHECK-NEXT:   0 | C *test7::C::f() [pure]
-  // CHECK-NEXT:   1 | C *test7::C::f() [pure]
+  // CHECK-NEXT:   0 | test7::C *test7::C::f() [pure]
+  // CHECK-NEXT:   1 | test7::C *test7::C::f() [pure]
 
   // No return adjusting thunks needed for pure virtual methods.
   // CHECK-NOT: Thunks for 'test7::C *test7::C::f()'
@@ -330,13 +330,13 @@ struct B {
 struct C : A, B {
   virtual C* f();
   // CHECK-LABEL: VFTable for 'pr20444::A' in 'pr20444::C' (1 entry).
-  // CHECK-NEXT:   0 | C *pr20444::C::f()
+  // CHECK-NEXT:   0 | pr20444::C *pr20444::C::f()
 
   // CHECK-LABEL: VFTable for 'pr20444::B' in 'pr20444::C' (2 entries).
-  // CHECK-NEXT:   0 | C *pr20444::C::f()
+  // CHECK-NEXT:   0 | pr20444::C *pr20444::C::f()
   // CHECK-NEXT:       [return adjustment (to type 'struct pr20444::B *'): 4 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
-  // CHECK-NEXT:   1 | C *pr20444::C::f()
+  // CHECK-NEXT:   1 | pr20444::C *pr20444::C::f()
   // CHECK-NEXT:       [return adjustment (to type 'struct pr20444::C *'): 0 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
 };
@@ -346,16 +346,16 @@ void build_vftable(C *obj) { obj->f(); }
 struct D : C {
   virtual D* f();
   // CHECK-LABEL: VFTable for 'pr20444::A' in 'pr20444::C' in 'pr20444::D' (1 entry).
-  // CHECK-NEXT:   0 | D *pr20444::D::f()
+  // CHECK-NEXT:   0 | pr20444::D *pr20444::D::f()
 
   // CHECK-LABEL: VFTable for 'pr20444::B' in 'pr20444::C' in 'pr20444::D' (3 entries).
-  // CHECK-NEXT:   0 | D *pr20444::D::f()
+  // CHECK-NEXT:   0 | pr20444::D *pr20444::D::f()
   // CHECK-NEXT:       [return adjustment (to type 'struct pr20444::B *'): 4 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
-  // CHECK-NEXT:   1 | D *pr20444::D::f()
+  // CHECK-NEXT:   1 | pr20444::D *pr20444::D::f()
   // CHECK-NEXT:       [return adjustment (to type 'struct pr20444::C *'): 0 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
-  // CHECK-NEXT:   2 | D *pr20444::D::f()
+  // CHECK-NEXT:   2 | pr20444::D *pr20444::D::f()
   // CHECK-NEXT:       [return adjustment (to type 'struct pr20444::D *'): 0 non-virtual]
   // CHECK-NEXT:       [this adjustment: -4 non-virtual]
 };

diff  --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
index 71eadf3bd588c..821ee3de4d0d7 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-return-thunks.cpp
@@ -20,11 +20,11 @@ struct K : J { virtual E *foo(); K(); };
 J::J() {}
 
 // VFTABLES-LABEL: VFTable for 'test1::H' in 'test1::I' in 'test1::J' (3 entries).
-// VFTABLES-NEXT:   0 | D *test1::J::foo()
+// VFTABLES-NEXT:   0 | test1::D *test1::J::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test1::B *'): 4 non-virtual]
-// VFTABLES-NEXT:   1 | D *test1::J::foo()
+// VFTABLES-NEXT:   1 | test1::D *test1::J::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test1::C *'): 0 non-virtual]
-// VFTABLES-NEXT:   2 | D *test1::J::foo()
+// VFTABLES-NEXT:   2 | test1::D *test1::J::foo()
 
 // GLOBALS-LABEL: @"??_7J at test1@@6B@" = linkonce_odr unnamed_addr constant { [3 x i8*] }
 // GLOBALS: @"?foo at J@test1@@QAEPAUB at 2@XZ"
@@ -34,13 +34,13 @@ J::J() {}
 K::K() {}
 
 // VFTABLES-LABEL: VFTable for 'test1::H' in 'test1::I' in 'test1::J' in 'test1::K' (4 entries).
-// VFTABLES-NEXT:   0 | E *test1::K::foo()
+// VFTABLES-NEXT:   0 | test1::E *test1::K::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test1::B *'): 4 non-virtual]
-// VFTABLES-NEXT:   1 | E *test1::K::foo()
+// VFTABLES-NEXT:   1 | test1::E *test1::K::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test1::C *'): 0 non-virtual]
-// VFTABLES-NEXT:   2 | E *test1::K::foo()
+// VFTABLES-NEXT:   2 | test1::E *test1::K::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test1::D *'): 0 non-virtual]
-// VFTABLES-NEXT:   3 | E *test1::K::foo()
+// VFTABLES-NEXT:   3 | test1::E *test1::K::foo()
 
 // Only B to C requires adjustment, but we get 3 thunks in K's vftable, two of
 // which are trivial.
@@ -86,20 +86,20 @@ struct K : J { virtual E *foo(); K(); };
 J::J() {}
 
 // VFTABLES-LABEL: VFTable for 'test2::H' in 'test2::I' in 'test2::J' (2 entries).
-// VFTABLES-NEXT:    0 | D *test2::J::foo()
+// VFTABLES-NEXT:    0 | test2::D *test2::J::foo()
 // VFTABLES-NEXT:         [return adjustment (to type 'struct test2::B *'): 4 non-virtual]
-// VFTABLES-NEXT:    1 | D *test2::J::foo()
+// VFTABLES-NEXT:    1 | test2::D *test2::J::foo()
 
 // GLOBALS-LABEL: @"??_7J at test2@@6B@" = linkonce_odr unnamed_addr constant { [2 x i8*] }
 
 K::K() {}
 
 // VFTABLES-LABEL: VFTable for 'test2::H' in 'test2::I' in 'test2::J' in 'test2::K' (3 entries).
-// VFTABLES-NEXT:    0 | E *test2::K::foo()
+// VFTABLES-NEXT:    0 | test2::E *test2::K::foo()
 // VFTABLES-NEXT:         [return adjustment (to type 'struct test2::B *'): 4 non-virtual]
-// VFTABLES-NEXT:    1 | E *test2::K::foo()
+// VFTABLES-NEXT:    1 | test2::E *test2::K::foo()
 // VFTABLES-NEXT:         [return adjustment (to type 'struct test2::D *'): 0 non-virtual]
-// VFTABLES-NEXT:    2 | E *test2::K::foo()
+// VFTABLES-NEXT:    2 | test2::E *test2::K::foo()
 
 // GLOBALS-LABEL: @"??_7K at test2@@6B@" = linkonce_odr unnamed_addr constant { [3 x i8*] }
 
@@ -116,9 +116,9 @@ struct B : virtual A {
 
 struct C : virtual A, B {
 // VFTABLES-LABEL: VFTable for 'pr20479::A' in 'pr20479::B' in 'pr20479::C' (2 entries).
-// VFTABLES-NEXT:   0 | B *pr20479::B::f()
+// VFTABLES-NEXT:   0 | pr20479::B *pr20479::B::f()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct pr20479::A *'): vbase #1, 0 non-virtual]
-// VFTABLES-NEXT:   1 | B *pr20479::B::f()
+// VFTABLES-NEXT:   1 | pr20479::B *pr20479::B::f()
   C();
 };
 
@@ -140,10 +140,10 @@ struct B : virtual A {
 
 struct C : virtual A, virtual B {
 // VFTABLES-LABEL: VFTable for 'pr21073::A' in 'pr21073::B' in 'pr21073::C' (2 entries).
-// VFTABLES-NEXT:   0 | B *pr21073::B::f()
+// VFTABLES-NEXT:   0 | pr21073::B *pr21073::B::f()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct pr21073::A *'): vbase #1, 0 non-virtual]
 // VFTABLES-NEXT:       [this adjustment: 8 non-virtual]
-// VFTABLES-NEXT:   1 | B *pr21073::B::f()
+// VFTABLES-NEXT:   1 | pr21073::B *pr21073::B::f()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct pr21073::B *'): 0 non-virtual]
 // VFTABLES-NEXT:       [this adjustment: 8 non-virtual]
   C();
@@ -164,9 +164,9 @@ struct D : B, C { D(); };
 D::D() {}
 
 // VFTABLES-LABEL: VFTable for 'pr21073_2::A' in 'pr21073_2::C' in 'pr21073_2::D' (2 entries)
-// VFTABLES-NEXT:   0 | C *pr21073_2::C::foo()
+// VFTABLES-NEXT:   0 | pr21073_2::C *pr21073_2::C::foo()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct pr21073_2::A *'): vbase #1, 0 non-virtual]
-// VFTABLES-NEXT:   1 | C *pr21073_2::C::foo()
+// VFTABLES-NEXT:   1 | pr21073_2::C *pr21073_2::C::foo()
 
 // GLOBALS-LABEL: @"??_7D at pr21073_2@@6B@" = {{.*}} constant { [2 x i8*] }
 // GLOBALS: @"?foo at C@pr21073_2@@QAEPAUA at 2@XZ"
@@ -186,13 +186,13 @@ struct D : virtual B, virtual A, C {
 D::D() {}
 
 // VFTABLES-LABEL: VFTable for 'test3::A' in 'test3::B' in 'test3::X' in 'test3::C' in 'test3::D' (3 entries).
-// VFTABLES-NEXT:   0 | D *test3::D::fn()
+// VFTABLES-NEXT:   0 | test3::D *test3::D::fn()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test3::A *'): vbase #1, 0 non-virtual]
 // VFTABLES-NEXT:       [this adjustment: vtordisp at -4, 0 non-virtual]
-// VFTABLES-NEXT:   1 | D *test3::D::fn()
+// VFTABLES-NEXT:   1 | test3::D *test3::D::fn()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test3::B *'): vbase #2, 0 non-virtual]
 // VFTABLES-NEXT:       [this adjustment: vtordisp at -4, 0 non-virtual]
-// VFTABLES-NEXT:   2 | D *test3::D::fn()
+// VFTABLES-NEXT:   2 | test3::D *test3::D::fn()
 // VFTABLES-NEXT:       [return adjustment (to type 'struct test3::D *'): 0 non-virtual]
 // VFTABLES-NEXT:       [this adjustment: vtordisp at -4, 0 non-virtual]
 
@@ -214,5 +214,5 @@ C c;
 // VFTABLES-LABEL: VFTable indices for 'pr34302::C' (2 entries).
 // VFTABLES-NEXT:  -- accessible via vbtable index 1, vfptr at offset 0 --
 // VFTABLES-NEXT:    0 | pr34302::C::~C() [scalar deleting]
-// VFTABLES-NEXT:    2 | C *pr34302::C::f()
+// VFTABLES-NEXT:    2 | pr34302::C *pr34302::C::f()
 }

diff  --git a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
index 76db88d0d4863..b377fdf7e3e7a 100644
--- a/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
+++ b/clang/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
@@ -609,15 +609,15 @@ struct Z {
 
 struct W : Z {
   // CHECK-LABEL: VFTable for 'return_adjustment::Z' in 'return_adjustment::W' (2 entries).
-  // CHECK-NEXT: 0 | X *return_adjustment::W::foo()
+  // CHECK-NEXT: 0 | return_adjustment::X *return_adjustment::W::foo()
   // CHECK-NEXT:     [return adjustment (to type 'struct A *'): vbase #1, 0 non-virtual]
-  // CHECK-NEXT: 1 | X *return_adjustment::W::foo()
+  // CHECK-NEXT: 1 | return_adjustment::X *return_adjustment::W::foo()
 
-  // CHECK-LABEL: Thunks for 'X *return_adjustment::W::foo()' (1 entry).
+  // CHECK-LABEL: Thunks for 'return_adjustment::X *return_adjustment::W::foo()' (1 entry).
   // CHECK-NEXT: 0 | [return adjustment (to type 'struct A *'): vbase #1, 0 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'return_adjustment::W' (1 entry).
-  // CHECK-NEXT: 1 | X *return_adjustment::W::foo()
+  // CHECK-NEXT: 1 | return_adjustment::X *return_adjustment::W::foo()
 
   virtual X* foo();
 };
@@ -627,18 +627,18 @@ void use(W *obj) { obj->foo(); }
 
 struct T : W {
   // CHECK-LABEL: VFTable for 'return_adjustment::Z' in 'return_adjustment::W' in 'return_adjustment::T' (3 entries).
-  // CHECK-NEXT: 0 | Y *return_adjustment::T::foo()
+  // CHECK-NEXT: 0 | return_adjustment::Y *return_adjustment::T::foo()
   // CHECK-NEXT:     [return adjustment (to type 'struct A *'): vbase #1, 0 non-virtual]
-  // CHECK-NEXT: 1 | Y *return_adjustment::T::foo()
+  // CHECK-NEXT: 1 | return_adjustment::Y *return_adjustment::T::foo()
   // CHECK-NEXT:     [return adjustment (to type 'struct return_adjustment::X *'): vbase #2, 0 non-virtual]
-  // CHECK-NEXT: 2 | Y *return_adjustment::T::foo()
+  // CHECK-NEXT: 2 | return_adjustment::Y *return_adjustment::T::foo()
 
-  // CHECK-LABEL: Thunks for 'Y *return_adjustment::T::foo()' (2 entries).
+  // CHECK-LABEL: Thunks for 'return_adjustment::Y *return_adjustment::T::foo()' (2 entries).
   // CHECK-NEXT: 0 | [return adjustment (to type 'struct A *'): vbase #1, 0 non-virtual]
   // CHECK-NEXT: 1 | [return adjustment (to type 'struct return_adjustment::X *'): vbase #2, 0 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'return_adjustment::T' (1 entry).
-  // CHECK-NEXT: 2 | Y *return_adjustment::T::foo()
+  // CHECK-NEXT: 2 | return_adjustment::Y *return_adjustment::T::foo()
 
   virtual Y* foo();
 };
@@ -652,15 +652,15 @@ struct U : virtual A {
 
 struct V : Z {
   // CHECK-LABEL: VFTable for 'return_adjustment::Z' in 'return_adjustment::V' (2 entries).
-  // CHECK-NEXT: 0 | U *return_adjustment::V::foo()
+  // CHECK-NEXT: 0 | return_adjustment::U *return_adjustment::V::foo()
   // CHECK-NEXT:     [return adjustment (to type 'struct A *'): vbptr at offset 4, vbase #1, 0 non-virtual]
-  // CHECK-NEXT: 1 | U *return_adjustment::V::foo()
+  // CHECK-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo()
 
-  // CHECK-LABEL: Thunks for 'U *return_adjustment::V::foo()' (1 entry).
+  // CHECK-LABEL: Thunks for 'return_adjustment::U *return_adjustment::V::foo()' (1 entry).
   // CHECK-NEXT: 0 | [return adjustment (to type 'struct A *'): vbptr at offset 4, vbase #1, 0 non-virtual]
 
   // CHECK-LABEL: VFTable indices for 'return_adjustment::V' (1 entry).
-  // CHECK-NEXT: 1 | U *return_adjustment::V::foo()
+  // CHECK-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo()
 
   virtual U* foo();
 };

diff  --git a/clang/test/CodeGenCXX/predefined-expr.cpp b/clang/test/CodeGenCXX/predefined-expr.cpp
index e6bf4297eb7af..b8516691e0b1e 100644
--- a/clang/test/CodeGenCXX/predefined-expr.cpp
+++ b/clang/test/CodeGenCXX/predefined-expr.cpp
@@ -40,7 +40,7 @@
 // CHECK-DAG: private unnamed_addr constant [30 x i8] c"NS::Destructor::~Destructor()\00"
 
 // CHECK-DAG: private unnamed_addr constant [12 x i8] c"Constructor\00"
-// CHECK-DAG: private unnamed_addr constant [37 x i8] c"NS::Constructor::Constructor(Base *)\00"
+// CHECK-DAG: private unnamed_addr constant [41 x i8] c"NS::Constructor::Constructor(NS::Base *)\00"
 // CHECK-DAG: private unnamed_addr constant [34 x i8] c"NS::Constructor::Constructor(int)\00"
 // CHECK-DAG: private unnamed_addr constant [31 x i8] c"NS::Constructor::Constructor()\00"
 
@@ -61,22 +61,22 @@
 // CHECK-DAG: private unnamed_addr constant [37 x i8] c"void NS::Base::constFunction() const\00"
 
 // CHECK-DAG: private unnamed_addr constant [26 x i8] c"functionReturingTemplate2\00"
-// CHECK-DAG: private unnamed_addr constant [60 x i8] c"ClassTemplate<Base *> NS::Base::functionReturingTemplate2()\00"
+// CHECK-DAG: private unnamed_addr constant [64 x i8] c"ClassTemplate<NS::Base *> NS::Base::functionReturingTemplate2()\00"
 
 // CHECK-DAG: private unnamed_addr constant [26 x i8] c"functionReturingTemplate1\00"
 // CHECK-DAG: private unnamed_addr constant [57 x i8] c"ClassTemplate<int> NS::Base::functionReturingTemplate1()\00"
 
 // CHECK-DAG: private unnamed_addr constant [23 x i8] c"withTemplateParameter2\00"
-// CHECK-DAG: private unnamed_addr constant [61 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate<Base *>)\00"
+// CHECK-DAG: private unnamed_addr constant [65 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate<NS::Base *>)\00"
 
 // CHECK-DAG: private unnamed_addr constant [23 x i8] c"withTemplateParameter1\00"
 // CHECK-DAG: private unnamed_addr constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate<int>)\00"
 
 // CHECK-DAG: private unnamed_addr constant [23 x i8] c"functionReturningClass\00"
-// CHECK-DAG: private unnamed_addr constant [41 x i8] c"Base *NS::Base::functionReturningClass()\00"
+// CHECK-DAG: private unnamed_addr constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00"
 
 // CHECK-DAG: private unnamed_addr constant [23 x i8] c"functionWithParameters\00"
-// CHECK-DAG: private unnamed_addr constant [60 x i8] c"void NS::Base::functionWithParameters(int, float *, Base *)\00"
+// CHECK-DAG: private unnamed_addr constant [64 x i8] c"void NS::Base::functionWithParameters(int, float *, NS::Base *)\00"
 
 // CHECK-DAG: private unnamed_addr constant [17 x i8] c"variadicFunction\00"
 // CHECK-DAG: private unnamed_addr constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00"

diff  --git a/clang/test/CodeGenCXX/vtable-layout.cpp b/clang/test/CodeGenCXX/vtable-layout.cpp
index 20fec803e56b6..115303f62ba8c 100644
--- a/clang/test/CodeGenCXX/vtable-layout.cpp
+++ b/clang/test/CodeGenCXX/vtable-layout.cpp
@@ -81,20 +81,20 @@ namespace Test2 {
 // CHECK-2-NEXT:       -- (Test2::A, 0) vtable address --
 // CHECK-2-NEXT:   2 | void Test2::A::f()
 // CHECK-2-NEXT:   3 | void Test2::A::f() const
-// CHECK-2-NEXT:   4 | A *Test2::A::g(int)
+// CHECK-2-NEXT:   4 | Test2::A *Test2::A::g(int)
 // CHECK-2-NEXT:   5 | Test2::A::~A() [complete]
 // CHECK-2-NEXT:   6 | Test2::A::~A() [deleting]
 // CHECK-2-NEXT:   7 | void Test2::A::h()
-// CHECK-2-NEXT:   8 | A &Test2::A::operator=(const A &)
+// CHECK-2-NEXT:   8 | Test2::A &Test2::A::operator=(const Test2::A &)
 //
 // CHECK-2:      VTable indices for 'Test2::A' (7 entries).
 // CHECK-2-NEXT:   0 | void Test2::A::f()
 // CHECK-2-NEXT:   1 | void Test2::A::f() const
-// CHECK-2-NEXT:   2 | A *Test2::A::g(int)
+// CHECK-2-NEXT:   2 | Test2::A *Test2::A::g(int)
 // CHECK-2-NEXT:   3 | Test2::A::~A() [complete]
 // CHECK-2-NEXT:   4 | Test2::A::~A() [deleting]
 // CHECK-2-NEXT:   5 | void Test2::A::h()
-// CHECK-2-NEXT:   6 | A &Test2::A::operator=(const A &)
+// CHECK-2-NEXT:   6 | Test2::A &Test2::A::operator=(const Test2::A &)
 struct A {
   virtual void f();
   virtual void f() const;
@@ -225,12 +225,12 @@ struct A {
 // CHECK-8-NEXT:  1 | Test4::B RTTI
 // CHECK-8-NEXT:      -- (Test4::A, 0) vtable address --
 // CHECK-8-NEXT:      -- (Test4::B, 0) vtable address --
-// CHECK-8-NEXT:  2 | R3 *Test4::B::f()
+// CHECK-8-NEXT:  2 | Test4::R3 *Test4::B::f()
 // CHECK-8-NEXT:      [return adjustment: 4 non-virtual]
-// CHECK-8-NEXT:  3 | R3 *Test4::B::f()
+// CHECK-8-NEXT:  3 | Test4::R3 *Test4::B::f()
 //
 // CHECK-8:     VTable indices for 'Test4::B' (1 entries).
-// CHECK-8-NEXT:  1 | R3 *Test4::B::f()
+// CHECK-8-NEXT:  1 | Test4::R3 *Test4::B::f()
 struct B : A {
   virtual R3 *f();
 };
@@ -249,12 +249,12 @@ struct C {
 // CHECK-9-NEXT:   1 | Test4::D RTTI
 // CHECK-9-NEXT:       -- (Test4::C, 0) vtable address --
 // CHECK-9-NEXT:       -- (Test4::D, 0) vtable address --
-// CHECK-9-NEXT:   2 | V2 *Test4::D::f()
+// CHECK-9-NEXT:   2 | Test4::V2 *Test4::D::f()
 // CHECK-9-NEXT:       [return adjustment: 0 non-virtual, -24 vbase offset offset]
-// CHECK-9-NEXT:   3 | V2 *Test4::D::f()
+// CHECK-9-NEXT:   3 | Test4::V2 *Test4::D::f()
 //
 // CHECK-9:     VTable indices for 'Test4::D' (1 entries).
-// CHECK-9-NEXT:   1 | V2 *Test4::D::f()
+// CHECK-9-NEXT:   1 | Test4::V2 *Test4::D::f()
 struct D : C {
   virtual V2 *f();
 };
@@ -268,12 +268,12 @@ struct V3 : virtual R3 { int r3; };
 // CHECK-10-NEXT:   1 | Test4::E RTTI
 // CHECK-10-NEXT:       -- (Test4::A, 0) vtable address --
 // CHECK-10-NEXT:       -- (Test4::E, 0) vtable address --
-// CHECK-10-NEXT:   2 | V3 *Test4::E::f()
+// CHECK-10-NEXT:   2 | Test4::V3 *Test4::E::f()
 // CHECK-10-NEXT:       [return adjustment: 4 non-virtual, -24 vbase offset offset]
-// CHECK-10-NEXT:   3 | V3 *Test4::E::f()
+// CHECK-10-NEXT:   3 | Test4::V3 *Test4::E::f()
 //
 // CHECK-10:     VTable indices for 'Test4::E' (1 entries).
-// CHECK-10-NEXT:   1 | V3 *Test4::E::f()
+// CHECK-10-NEXT:   1 | Test4::V3 *Test4::E::f()
 struct E : A {
   virtual V3 *f();
 };
@@ -286,13 +286,13 @@ V3 *E::f() { return 0;}
 // CHECK-11-NEXT:   1 | Test4::F RTTI
 // CHECK-11-NEXT:       -- (Test4::A, 0) vtable address --
 // CHECK-11-NEXT:       -- (Test4::F, 0) vtable address --
-// CHECK-11-NEXT:   2 | R3 *Test4::F::f() [pure]
+// CHECK-11-NEXT:   2 | Test4::R3 *Test4::F::f() [pure]
 // CHECK-11-NEXT:   3 | void Test4::F::g()
-// CHECK-11-NEXT:   4 | R3 *Test4::F::f() [pure]
+// CHECK-11-NEXT:   4 | Test4::R3 *Test4::F::f() [pure]
 //
 // CHECK-11:     VTable indices for 'Test4::F' (2 entries).
 // CHECK-11-NEXT:   1 | void Test4::F::g()
-// CHECK-11-NEXT:   2 | R3 *Test4::F::f()
+// CHECK-11-NEXT:   2 | Test4::R3 *Test4::F::f()
 struct F : A {
   virtual void g();
   virtual R3 *f() = 0;
@@ -1458,13 +1458,13 @@ struct A {
 // CHECK-36-NEXT:    3 | Test29::B RTTI
 // CHECK-36-NEXT:        -- (Test29::A, 0) vtable address --
 // CHECK-36-NEXT:        -- (Test29::B, 0) vtable address --
-// CHECK-36-NEXT:    4 | V2 *Test29::B::f()
+// CHECK-36-NEXT:    4 | Test29::V2 *Test29::B::f()
 // CHECK-36-NEXT:        [return adjustment: 0 non-virtual, -24 vbase offset offset]
 // CHECK-36-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
-// CHECK-36-NEXT:    5 | V2 *Test29::B::f()
+// CHECK-36-NEXT:    5 | Test29::V2 *Test29::B::f()
 //
 // CHECK-36:      VTable indices for 'Test29::B' (1 entries).
-// CHECK-36-NEXT:    1 | V2 *Test29::B::f()
+// CHECK-36-NEXT:    1 | Test29::V2 *Test29::B::f()
 struct B : virtual A {
   virtual V2 *f();
 };
@@ -1830,7 +1830,7 @@ struct B : virtual A {
 };
 
 // CHECK-43:      VTable indices for 'Test37::C' (1 entries).
-// CHECK-43-NEXT:    1 | C *Test37::C::f()
+// CHECK-43-NEXT:    1 | Test37::C *Test37::C::f()
 struct C : B {
   virtual C* f();
 };

diff  --git a/clang/test/FixIt/fixit.cpp b/clang/test/FixIt/fixit.cpp
index 3c8797ae68532..8a3500c9f210e 100644
--- a/clang/test/FixIt/fixit.cpp
+++ b/clang/test/FixIt/fixit.cpp
@@ -384,7 +384,7 @@ namespace PR15045 {
 
   int f() {
     Cl0 c;
-    return c->a;  // expected-error {{member reference type 'Cl0' is not a pointer; did you mean to use '.'?}}
+    return c->a;  // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; did you mean to use '.'?}}
   }
 }
 
@@ -442,7 +442,7 @@ struct Bar {
 };
 
 void bar(Bar *o) {
-  o.~Bar(); // expected-error {{member reference type 'Bar *' is a pointer; did you mean to use '->'}}
+  o.~Bar(); // expected-error {{member reference type 'dotPointerDestructor::Bar *' is a pointer; did you mean to use '->'}}
 }  // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:5}:"->"
 
 }

diff  --git a/clang/test/Index/annotate-context-sensitive.cpp b/clang/test/Index/annotate-context-sensitive.cpp
index d57a4bc7d1765..57e678310ff74 100644
--- a/clang/test/Index/annotate-context-sensitive.cpp
+++ b/clang/test/Index/annotate-context-sensitive.cpp
@@ -24,7 +24,7 @@ struct Derived2 : Base2 {
 // CHECK-OVERRIDE-FINAL: Identifier: "Derived" [6:7 - 6:14] ClassDecl=Derived:6:7 (Definition)
 // CHECK-OVERRIDE-FINAL: Keyword: "final" [6:15 - 6:20] attribute(final)=
 // CHECK-OVERRIDE-FINAL: Punctuation: ":" [6:21 - 6:22] ClassDecl=Derived:6:7 (Definition)
-// CHECK-OVERRIDE-FINAL: Keyword: "public" [6:23 - 6:29] C++ base class specifier=Base:1:7 [access=public isVirtual=false]
+// CHECK-OVERRIDE-FINAL: Keyword: "public" [6:23 - 6:29] C++ base class specifier=class Base:1:7 [access=public isVirtual=false]
 // CHECK-OVERRIDE-FINAL: Identifier: "Base" [6:30 - 6:34] TypeRef=class Base:1:7
 // CHECK-OVERRIDE-FINAL: Punctuation: "{" [6:35 - 6:36] ClassDecl=Derived:6:7 (Definition)
 // CHECK-OVERRIDE-FINAL: Keyword: "virtual" [7:3 - 7:10] CXXMethod=f:7:16 (virtual) [Overrides @3:16]

diff  --git a/clang/test/Index/comment-cplus-decls.cpp b/clang/test/Index/comment-cplus-decls.cpp
index 15432a72aa043..c4b08eb779a10 100644
--- a/clang/test/Index/comment-cplus-decls.cpp
+++ b/clang/test/Index/comment-cplus-decls.cpp
@@ -49,7 +49,7 @@ class Test
 // CHECK: <Declaration>Test()</Declaration>
 // CHECK: <Declaration>unsigned int getID() const</Declaration>
 // CHECK: <Declaration>~Test(){{( noexcept)?}}</Declaration>
-// CHECK: <Declaration>data *reserved</Declaration>
+// CHECK: <Declaration>Test::data *reserved</Declaration>
 
 
 class S {
@@ -149,7 +149,7 @@ namespace test3 {
   };
 }
 // CHECK: <Declaration>void f(const T &t = T())</Declaration>
-// CHECK: <Declaration>friend void vector<A>::f(const A &)</Declaration>
+// CHECK: <Declaration>friend void vector<A>::f(const test3::A &)</Declaration>
 
 class MyClass
 {

diff  --git a/clang/test/Index/keep-going.cpp b/clang/test/Index/keep-going.cpp
index 635415178cf09..0b2df725a5a73 100644
--- a/clang/test/Index/keep-going.cpp
+++ b/clang/test/Index/keep-going.cpp
@@ -26,10 +26,10 @@ class C : public A<float> { };
 // CHECK: FieldDecl=a:4:13 (Definition) [type=T] [typekind=Unexposed] [canonicaltype=type-parameter-0-0] [canonicaltypekind=Unexposed] [isPOD=0]
 // CHECK: TypeRef=T:3:16 [type=T] [typekind=Unexposed] [canonicaltype=type-parameter-0-0] [canonicaltypekind=Unexposed] [isPOD=0]
 // CHECK: ClassDecl=B:6:7 (Definition) [type=B] [typekind=Record] [isPOD=0]
-// CHECK: C++ base class specifier=A<int>:4:7 [access=public isVirtual=false] [type=A<int>] [typekind=Elaborated] [templateargs/1= [type=int] [typekind=Int]] [canonicaltype=A<int>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=int] [typekind=Int]] [isPOD=0] [nbFields=1]
+// CHECK: C++ base class specifier=A<int>:4:7 [access=public isVirtual=false] [type=A<int>] [typekind=Unexposed] [templateargs/1= [type=int] [typekind=Int]] [canonicaltype=A<int>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=int] [typekind=Int]] [isPOD=0] [nbFields=1]
 // CHECK: TemplateRef=A:4:7 [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: ClassDecl=C:10:7 (Definition) [type=C] [typekind=Record] [isPOD=0]
-// CHECK: C++ base class specifier=A<float>:4:7 [access=public isVirtual=false] [type=A<float>] [typekind=Elaborated] [templateargs/1= [type=float] [typekind=Float]] [canonicaltype=A<float>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=float] [typekind=Float]] [isPOD=0] [nbFields=1]
+// CHECK: C++ base class specifier=A<float>:4:7 [access=public isVirtual=false] [type=A<float>] [typekind=Unexposed] [templateargs/1= [type=float] [typekind=Float]] [canonicaltype=A<float>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=float] [typekind=Float]] [isPOD=0] [nbFields=1]
 // CHECK: TemplateRef=A:4:7 [type=] [typekind=Invalid] [isPOD=0]
 
 // CHECK-KEEP-GOING-ONLY: VarDecl=global_var:1:12 [type=int] [typekind=Int] [isPOD=1]

diff  --git a/clang/test/Index/load-stmts.cpp b/clang/test/Index/load-stmts.cpp
index 0bfaf51daa259..4a44c66156b5c 100644
--- a/clang/test/Index/load-stmts.cpp
+++ b/clang/test/Index/load-stmts.cpp
@@ -156,12 +156,12 @@ void casts(int *ip) {
 // CHECK: load-stmts.cpp:18:7: ClassDecl=B:18:7 (Definition) Extent=[18:1 - 20:2]
 // CHECK: load-stmts.cpp:19:8: CXXMethod=doB:19:8 Extent=[19:3 - 19:13]
 // CHECK: load-stmts.cpp:22:7: ClassDecl=C:22:7 (Definition) Extent=[22:1 - 24:2]
-// CHECK: load-stmts.cpp:22:18: C++ base class specifier=A:14:7 [access=public isVirtual=false]
-// CHECK: load-stmts.cpp:22:29: C++ base class specifier=B:18:7 [access=private isVirtual=false]
+// CHECK: load-stmts.cpp:22:18: C++ base class specifier=class A:14:7 [access=public isVirtual=false]
+// CHECK: load-stmts.cpp:22:29: C++ base class specifier=class B:18:7 [access=private isVirtual=false]
 // CHECK: load-stmts.cpp:23:8: CXXMethod=doC:23:8 Extent=[23:3 - 23:13]
 // CHECK: load-stmts.cpp:26:7: ClassDecl=D:26:7 (Definition) Extent=[26:1 - 26:49]
-// CHECK: load-stmts.cpp:26:26: C++ base class specifier=C:22:7 [access=public isVirtual=true]
-// CHECK: load-stmts.cpp:26:45: C++ base class specifier=A:14:7 [access=private isVirtual=true]
+// CHECK: load-stmts.cpp:26:26: C++ base class specifier=class C:22:7 [access=public isVirtual=true]
+// CHECK: load-stmts.cpp:26:45: C++ base class specifier=class A:14:7 [access=private isVirtual=true]
 // CHECK: load-stmts.cpp:33:7: VarDecl=typeid_marker:33:7 (Definition)
 // CHECK: load-stmts.cpp:34:10: TypeRef=class C:22:7 Extent=[34:10 - 34:11]
 // CHECK: load-stmts.cpp:35:10: DeclRefExpr=c:32:20 Extent=[35:10 - 35:11]

diff  --git a/clang/test/Index/opencl-types.cl b/clang/test/Index/opencl-types.cl
index 13d7937b85447..485060167d218 100644
--- a/clang/test/Index/opencl-types.cl
+++ b/clang/test/Index/opencl-types.cl
@@ -17,11 +17,11 @@ void kernel testFloatTypes() {
 }
 
 // CHECK: VarDecl=scalarHalf:11:8 (Definition){{( \(invalid\))?}} [type=__private half] [typekind=Half] [isPOD=1]
-// CHECK: VarDecl=vectorHalf:12:9 (Definition) [type=__private half4] [typekind=Elaborated] [canonicaltype=half __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
+// CHECK: VarDecl=vectorHalf:12:9 (Definition) [type=__private half4] [typekind=Typedef] [canonicaltype=half __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
 // CHECK: VarDecl=scalarFloat:13:9 (Definition) [type=__private float] [typekind=Float] [isPOD=1]
-// CHECK: VarDecl=vectorFloat:14:10 (Definition) [type=__private float4] [typekind=Elaborated] [canonicaltype=float __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
+// CHECK: VarDecl=vectorFloat:14:10 (Definition) [type=__private float4] [typekind=Typedef] [canonicaltype=float __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
 // CHECK: VarDecl=scalarDouble:15:10 (Definition){{( \(invalid\))?}} [type=__private double] [typekind=Double] [isPOD=1]
-// CHECK: VarDecl=vectorDouble:16:11 (Definition){{( \(invalid\))?}} [type=__private double4] [typekind=Elaborated] [canonicaltype=double __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
+// CHECK: VarDecl=vectorDouble:16:11 (Definition){{( \(invalid\))?}} [type=__private double4] [typekind=Typedef] [canonicaltype=double __private __attribute__((ext_vector_type(4)))] [canonicaltypekind=ExtVector] [isPOD=1]
 
 #pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable
 
@@ -120,10 +120,10 @@ void kernel testMiscOpenCLTypes() {
   reserve_id_t scalarOCLReserveID;
 }
 
-// CHECK: VarDecl=scalarOCLSampler:117:19 (Definition) [type=const sampler_t] [typekind=Elaborated] const [canonicaltype=const sampler_t] [canonicaltypekind=OCLSampler] [isPOD=1]
-// CHECK: VarDecl=scalarOCLEvent:118:15 (Definition) [type=__private clk_event_t] [typekind=Elaborated] [canonicaltype=__private clk_event_t] [canonicaltypekind=Unexposed] [isPOD=1]
-// CHECK: VarDecl=scalarOCLQueue:119:11 (Definition) [type=__private queue_t] [typekind=Elaborated] [canonicaltype=__private queue_t] [canonicaltypekind=OCLQueue] [isPOD=1]
-// CHECK: VarDecl=scalarOCLReserveID:120:16 (Definition) [type=__private reserve_id_t] [typekind=Elaborated] [canonicaltype=__private reserve_id_t] [canonicaltypekind=OCLReserveID] [isPOD=1]
+// CHECK: VarDecl=scalarOCLSampler:117:19 (Definition) [type=const sampler_t] [typekind=Typedef] const [canonicaltype=const sampler_t] [canonicaltypekind=OCLSampler] [isPOD=1]
+// CHECK: VarDecl=scalarOCLEvent:118:15 (Definition) [type=__private clk_event_t] [typekind=Typedef] [canonicaltype=__private clk_event_t] [canonicaltypekind=Unexposed] [isPOD=1]
+// CHECK: VarDecl=scalarOCLQueue:119:11 (Definition) [type=__private queue_t] [typekind=Typedef] [canonicaltype=__private queue_t] [canonicaltypekind=OCLQueue] [isPOD=1]
+// CHECK: VarDecl=scalarOCLReserveID:120:16 (Definition) [type=__private reserve_id_t] [typekind=Typedef] [canonicaltype=__private reserve_id_t] [canonicaltypekind=OCLReserveID] [isPOD=1]
 
 #pragma OPENCL EXTENSION cl_intel_device_side_avc_motion_estimation : enable
 
@@ -131,4 +131,4 @@ void kernel testExtOpenCLTypes() {
   intel_sub_group_avc_mce_payload_t mce_payload;
 }
 
-// CHECK: VarDecl=mce_payload:131:37 (Definition){{( \(invalid\))?}} [type=__private intel_sub_group_avc_mce_payload_t] [typekind=Elaborated] [canonicaltype=__private intel_sub_group_avc_mce_payload_t] [canonicaltypekind=OCLIntelSubgroupAVCMcePayload] [isPOD=1]
+// CHECK: VarDecl=mce_payload:131:37 (Definition){{( \(invalid\))?}} [type=__private intel_sub_group_avc_mce_payload_t] [typekind=Typedef] [canonicaltype=__private intel_sub_group_avc_mce_payload_t] [canonicaltypekind=OCLIntelSubgroupAVCMcePayload] [isPOD=1]

diff  --git a/clang/test/Index/paren-type.c b/clang/test/Index/paren-type.c
index 09751917a7f44..14a7785e0580d 100644
--- a/clang/test/Index/paren-type.c
+++ b/clang/test/Index/paren-type.c
@@ -9,7 +9,7 @@ extern int (VariableWithParentheses);
 
 typedef int MyTypedef;
 // CHECK-TYPE: VarDecl=VariableWithParentheses2:
-// CHECK-TYPE-SAME: [type=MyTypedef] [typekind=Elaborated]
+// CHECK-TYPE-SAME: [type=MyTypedef] [typekind=Typedef]
 // CHECK-TYPE-SAME: [canonicaltype=int] [canonicaltypekind=Int]
 // CHECK-TYPEDECL: VarDecl=VariableWithParentheses2
 // CHECK-TYPEDECL-SAME: [typedeclaration=MyTypedef] [typekind=Typedef]

diff  --git a/clang/test/Index/print-type-size.cpp b/clang/test/Index/print-type-size.cpp
index a365528f5bc9f..c61965004000b 100644
--- a/clang/test/Index/print-type-size.cpp
+++ b/clang/test/Index/print-type-size.cpp
@@ -45,8 +45,8 @@ union u {
   struct simple s1;
 };
 
-// CHECK64: VarDecl=s1:[[@LINE+2]]:8 (Definition) [type=simple] [typekind=Elaborated] [sizeof=48] [alignof=8]
-// CHECK32: VarDecl=s1:[[@LINE+1]]:8 (Definition) [type=simple] [typekind=Elaborated] [sizeof=36] [alignof=4]
+// CHECK64: VarDecl=s1:[[@LINE+2]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=48] [alignof=8]
+// CHECK32: VarDecl=s1:[[@LINE+1]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=36] [alignof=4]
 simple s1;
 
 struct Test {
@@ -354,11 +354,11 @@ struct BaseStruct
     BaseStruct(){}
     double v0;
     float v1;
-// CHECK64: FieldDecl=fg:[[@LINE+2]]:7 (Definition) [type=C] [typekind=Elaborated] [sizeof=88] [alignof=8] [offsetof=128]
-// CHECK32: FieldDecl=fg:[[@LINE+1]]:7 (Definition) [type=C] [typekind=Elaborated] [sizeof=60] [alignof=4] [offsetof=96]
+// CHECK64: FieldDecl=fg:[[@LINE+2]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=88] [alignof=8] [offsetof=128]
+// CHECK32: FieldDecl=fg:[[@LINE+1]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=60] [alignof=4] [offsetof=96]
     C fg;
-// CHECK64: FieldDecl=rg:[[@LINE+2]]:8 (Definition) [type=C &] [typekind=LValueReference] [sizeof=88] [alignof=8] [offsetof=832]
-// CHECK32: FieldDecl=rg:[[@LINE+1]]:8 (Definition) [type=C &] [typekind=LValueReference] [sizeof=60] [alignof=4] [offsetof=576]
+// CHECK64: FieldDecl=rg:[[@LINE+2]]:8 (Definition) [type=Test3::C &] [typekind=LValueReference] [sizeof=88] [alignof=8] [offsetof=832]
+// CHECK32: FieldDecl=rg:[[@LINE+1]]:8 (Definition) [type=Test3::C &] [typekind=LValueReference] [sizeof=60] [alignof=4] [offsetof=576]
     C &rg;
     int x;
 };

diff  --git a/clang/test/Index/print-type.c b/clang/test/Index/print-type.c
index 65cb801147677..c976e28e3321f 100644
--- a/clang/test/Index/print-type.c
+++ b/clang/test/Index/print-type.c
@@ -32,10 +32,10 @@ void fun(struct { int x; int y; } *param);
 _Atomic(unsigned long) aul;
 
 // RUN: c-index-test -test-print-type %s | FileCheck %s
-// CHECK: FunctionDecl=f:3:6 (Definition) [type=int *(int *, char *, FooType, int *, void (*)(int))] [typekind=FunctionProto] [canonicaltype=int *(int *, char *, int, int *, void (*)(int))] [canonicaltypekind=FunctionProto] [resulttype=int *] [resulttypekind=Pointer] [args= [int *] [Pointer] [char *] [Pointer] [FooType] [Elaborated] [int[5]] [ConstantArray] [void (*)(int)] [Pointer]] [isPOD=0]
+// CHECK: FunctionDecl=f:3:6 (Definition) [type=int *(int *, char *, FooType, int *, void (*)(int))] [typekind=FunctionProto] [canonicaltype=int *(int *, char *, int, int *, void (*)(int))] [canonicaltypekind=FunctionProto] [resulttype=int *] [resulttypekind=Pointer] [args= [int *] [Pointer] [char *] [Pointer] [FooType] [Typedef] [int[5]] [ConstantArray] [void (*)(int)] [Pointer]] [isPOD=0]
 // CHECK: ParmDecl=p:3:13 (Definition) [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: ParmDecl=x:3:22 (Definition) [type=char *] [typekind=Pointer] [isPOD=1] [pointeetype=char] [pointeekind=Char_{{[US]}}]
-// CHECK: ParmDecl=z:3:33 (Definition) [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: ParmDecl=z:3:33 (Definition) [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ParmDecl=arr:3:40 (Definition) [type=int[5]] [typekind=ConstantArray] [isPOD=1]
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
@@ -47,14 +47,14 @@ _Atomic(unsigned long) aul;
 // CHECK: UnaryOperator= [type=int] [typekind=Int] [isPOD=1]
 // CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclStmt= [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: VarDecl=w:5:17 (Definition) [type=const FooType] [typekind=Elaborated] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: VarDecl=w:5:17 (Definition) [type=const FooType] [typekind=Typedef] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
-// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
-// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ArraySubscriptExpr= [type=int] [typekind=Int] [isPOD=1]
 // CHECK: UnexposedExpr=arr:3:40 [type=int[5]] [typekind=ConstantArray] [isPOD=1]
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]

diff  --git a/clang/test/Index/print-type.cpp b/clang/test/Index/print-type.cpp
index e8a6e551d7575..458acc42ef3e0 100644
--- a/clang/test/Index/print-type.cpp
+++ b/clang/test/Index/print-type.cpp
@@ -112,31 +112,31 @@ inline namespace InlineNS {}
 // CHECK: TypedefDecl=FooType:19:15 (Definition) [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypeAliasDecl=AliasType:20:9 (Definition) [type=outer::inner::Bar::AliasType] [typekind=Typedef] [canonicaltype=double] [canonicaltypekind=Double] [isPOD=1]
 // CHECK: FieldDecl=p:21:8 (Definition) [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
-// CHECK: CXXMethod=f:22:8 (Definition) [type=int *(int *, char *, FooType){{.*}}] [typekind=FunctionProto] [canonicaltype=int *(int *, char *, int){{.*}}] [canonicaltypekind=FunctionProto] [resulttype=int *] [resulttypekind=Pointer] [args= [int *] [Pointer] [char *] [Pointer] [FooType] [Elaborated]] [isPOD=0]
+// CHECK: CXXMethod=f:22:8 (Definition) [type=int *(int *, char *, outer::inner::Bar::FooType){{.*}}] [typekind=FunctionProto] [canonicaltype=int *(int *, char *, int){{.*}}] [canonicaltypekind=FunctionProto] [resulttype=int *] [resulttypekind=Pointer] [args= [int *] [Pointer] [char *] [Pointer] [outer::inner::Bar::FooType] [Typedef]] [isPOD=0]
 // CHECK: ParmDecl=p:22:15 (Definition) [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: ParmDecl=x:22:24 (Definition) [type=char *] [typekind=Pointer] [isPOD=1] [pointeetype=char] [pointeekind=Char_{{[US]}}]
-// CHECK: ParmDecl=z:22:35 (Definition) [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: ParmDecl=z:22:35 (Definition) [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypeRef=outer::inner::Bar::FooType:19:15 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: CompoundStmt= [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: DeclStmt= [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: VarDecl=w:23:19 (Definition) [type=const FooType] [typekind=Elaborated] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: VarDecl=w:23:19 (Definition) [type=const outer::inner::Bar::FooType] [typekind=Typedef] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypeRef=outer::inner::Bar::FooType:19:15 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
-// CHECK: UnexposedExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
-// CHECK: DeclRefExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: UnexposedExpr=z:22:35 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: DeclRefExpr=z:22:35 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: UnexposedExpr=p:22:15 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclRefExpr=p:22:15 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
-// CHECK: UnexposedExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
-// CHECK: DeclRefExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: UnexposedExpr=z:22:35 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
+// CHECK: DeclRefExpr=z:22:35 [type=outer::inner::Bar::FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: TypedefDecl=OtherType:26:18 (Definition) [type=outer::inner::Bar::OtherType] [typekind=Typedef] [canonicaltype=double] [canonicaltypekind=Double] [isPOD=1]
 // CHECK: TypedefDecl=ArrayType:27:15 (Definition) [type=outer::inner::Bar::ArrayType] [typekind=Typedef] [canonicaltype=int[5]] [canonicaltypekind=ConstantArray] [isPOD=1]
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
-// CHECK: FieldDecl=baz:28:20 (Definition) [type=Baz<int, 1, outer::Foo>] [typekind=Elaborated] [templateargs/3= [type=int] [typekind=Int]] [canonicaltype=outer::Baz<int, 1, outer::Foo>] [canonicaltypekind=Record] [canonicaltemplateargs/3= [type=int] [typekind=Int]] [isPOD=1]
+// CHECK: FieldDecl=baz:28:20 (Definition) [type=Baz<int, 1, outer::Foo>] [typekind=Unexposed] [templateargs/3= [type=int] [typekind=Int]] [canonicaltype=outer::Baz<int, 1, outer::Foo>] [canonicaltypekind=Record] [canonicaltemplateargs/3= [type=int] [typekind=Int]] [isPOD=1]
 // CHECK: TemplateRef=Baz:9:8 [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
 // CHECK: TemplateRef=Foo:4:8 [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: FieldDecl=qux:29:38 (Definition) [type=Qux<int, char *, Foo<int>, FooType>] [typekind=Elaborated] [templateargs/4= [type=int] [typekind=Int] [type=char *] [typekind=Pointer] [type=Foo<int>] [typekind=Elaborated] [type=FooType] [typekind=Elaborated]] [canonicaltype=outer::Qux<int, char *, outer::Foo<int>, int>] [canonicaltypekind=Record] [canonicaltemplateargs/4= [type=int] [typekind=Int] [type=char *] [typekind=Pointer] [type=outer::Foo<int>] [typekind=Record] [type=int] [typekind=Int]] [isPOD=1]
+// CHECK: FieldDecl=qux:29:38 (Definition) [type=Qux<int, char *, Foo<int>, outer::inner::Bar::FooType>] [typekind=Unexposed] [templateargs/4= [type=int] [typekind=Int] [type=char *] [typekind=Pointer] [type=Foo<int>] [typekind=Unexposed] [type=outer::inner::Bar::FooType] [typekind=Typedef]] [canonicaltype=outer::Qux<int, char *, outer::Foo<int>, int>] [canonicaltypekind=Record] [canonicaltemplateargs/4= [type=int] [typekind=Int] [type=char *] [typekind=Pointer] [type=outer::Foo<int>] [typekind=Record] [type=int] [typekind=Int]] [isPOD=1]
 // CHECK: TemplateRef=Qux:12:8 [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: TemplateRef=Foo:4:8 [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: FunctionTemplate=tbar:36:3 [type=T (int)] [typekind=FunctionProto] [canonicaltype=type-parameter-0-0 (int)] [canonicaltypekind=FunctionProto] [resulttype=T] [resulttypekind=Unexposed] [isPOD=0]
@@ -176,9 +176,9 @@ inline namespace InlineNS {}
 // CHECK: DeclRefExpr=tbar:36:3 RefName=[55:17 - 55:21] RefName=[55:21 - 55:26] [type=int (int)] [typekind=FunctionProto] [canonicaltype=int (int)] [canonicaltypekind=FunctionProto] [isPOD=0]
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
 // CHECK: VarDecl=autoBlob:56:6 (Definition) [type=Blob *] [typekind=Auto] [canonicaltype=Blob *] [canonicaltypekind=Pointer] [isPOD=1]
-// CHECK: CXXNewExpr= [type=Blob *] [typekind=Pointer] [canonicaltype=Blob *] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=Blob] [pointeekind=Elaborated]
+// CHECK: CXXNewExpr= [type=Blob *] [typekind=Pointer] [isPOD=1] [pointeetype=Blob] [pointeekind=Record]
 // CHECK: TypeRef=struct Blob:46:8 [type=Blob] [typekind=Record] [isPOD=1] [nbFields=2]
-// CHECK: CallExpr=Blob:46:8 [type=Blob] [typekind=Elaborated] [canonicaltype=Blob] [canonicaltypekind=Record] [isPOD=1] [nbFields=2]
+// CHECK: CallExpr=Blob:46:8 [type=Blob] [typekind=Record] [isPOD=1] [nbFields=2]
 // CHECK: FunctionDecl=autoFunction:57:6 (Definition) [type=int ()] [typekind=FunctionProto] [canonicaltype=int ()] [canonicaltypekind=FunctionProto] [resulttype=int] [resulttypekind=Auto] [isPOD=0]
 // CHECK: CompoundStmt= [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
@@ -187,18 +187,18 @@ inline namespace InlineNS {}
 // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
 // CHECK: TypeAliasTemplateDecl=TypeAlias:61:1 (Definition) [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: TemplateTypeParameter=T:60:20 (Definition) [type=T] [typekind=Unexposed] [canonicaltype=type-parameter-0-0] [canonicaltypekind=Unexposed] [isPOD=0]
-// CHECK: FieldDecl=foo:63:39 (Definition) [type=TypeAlias<int>] [typekind=Elaborated] [templateargs/1= [type=int] [typekind=Int]] [canonicaltype=outer::Qux<int>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=int] [typekind=Int]] [isPOD=1]
+// CHECK: FieldDecl=foo:63:39 (Definition) [type=TypeAlias<int>] [typekind=Unexposed] [templateargs/1= [type=int] [typekind=Int]] [canonicaltype=outer::Qux<int>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=int] [typekind=Int]] [isPOD=1]
 // CHECK: TemplateRef=TypeAlias:61:1 [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: ClassTemplate=Specialization:66:8 (Definition) [type=] [typekind=Invalid] [isPOD=0]
 // CHECK: TemplateTypeParameter=T:65:19 (Definition) [type=T] [typekind=Unexposed] [canonicaltype=type-parameter-0-0] [canonicaltypekind=Unexposed] [isPOD=0]
 // CHECK: StructDecl=Specialization:69:8 [Specialization of Specialization:66:8] [type=Specialization<int>] [typekind=Record] [templateargs/1= [type=int] [typekind=Int]] [isPOD=0]
-// CHECK: VarDecl=templRefParam:71:40 (Definition) [type=Specialization<Specialization<bool> &>] [typekind=Elaborated] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
+// CHECK: VarDecl=templRefParam:71:40 (Definition) [type=Specialization<Specialization<bool> &>] [typekind=Unexposed] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
 // CHECK: TemplateRef=Specialization:66:8 [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: CallExpr=Specialization:66:8 [type=Specialization<Specialization<bool> &>] [typekind=Elaborated] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
+// CHECK: CallExpr=Specialization:66:8 [type=Specialization<Specialization<bool> &>] [typekind=Unexposed] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
 // CHECK: VarDecl=autoTemplRefParam:72:6 (Definition) [type=Specialization<Specialization<bool> &>] [typekind=Auto] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
 // CHECK: UnexposedExpr=templRefParam:71:40 [type=const Specialization<Specialization<bool> &>] [typekind=Record] const [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
-// CHECK: DeclRefExpr=templRefParam:71:40 [type=Specialization<Specialization<bool> &>] [typekind=Elaborated] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
-// CHECK: TypeAliasDecl=baz:76:7 (Definition) [type=baz] [typekind=Typedef] [templateargs/1= [type=A<void>] [typekind=Elaborated]] [canonicaltype=A<void>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=void] [typekind=Void]] [isPOD=0]
+// CHECK: DeclRefExpr=templRefParam:71:40 [type=Specialization<Specialization<bool> &>] [typekind=Unexposed] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
+// CHECK: TypeAliasDecl=baz:76:7 (Definition) [type=baz] [typekind=Typedef] [templateargs/1= [type=A<void>] [typekind=Unexposed]] [canonicaltype=A<void>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=void] [typekind=Void]] [isPOD=0]
 // CHECK: VarDecl=autoTemplPointer:78:6 (Definition) [type=Specialization<Specialization<bool> &> *] [typekind=Auto] [canonicaltype=Specialization<Specialization<bool> &> *] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=Specialization<Specialization<bool> &>] [pointeekind=Auto]
 // CHECK: CallExpr=Bar:17:3 [type=outer::inner::Bar] [typekind=Elaborated] [canonicaltype=outer::inner::Bar] [canonicaltypekind=Record] [args= [outer::Foo<bool> *] [Pointer]] [isPOD=0] [nbFields=3]
 // CHECK: StructDecl=:84:3 (Definition) [type=X::(anonymous struct at {{.*}}print-type.cpp:84:3)] [typekind=Record] [isPOD=1] [nbFields=1] [isAnon=1]

diff  --git a/clang/test/Layout/aix-bitfield-alignment.cpp b/clang/test/Layout/aix-bitfield-alignment.cpp
index b9694c80bdc0f..00f00c8ee9862 100644
--- a/clang/test/Layout/aix-bitfield-alignment.cpp
+++ b/clang/test/Layout/aix-bitfield-alignment.cpp
@@ -29,7 +29,7 @@ int b = sizeof(B);
 
 // CHECK:      *** Dumping AST Record Layout
 // CHECK-NEXT:          0 | struct B
-// CHECK-NEXT:      0:0-0 |   Bool b
+// CHECK-NEXT:      0:0-0 |   enum Bool b
 // CHECK-NEXT:            | [sizeof=4, dsize=4, align=4, preferredalign=4,
 // CHECK-NEXT:            |  nvsize=4, nvalign=4, preferrednvalign=4]
 

diff  --git a/clang/test/Layout/aix-power-alignment-typedef.cpp b/clang/test/Layout/aix-power-alignment-typedef.cpp
index 908415e72e38d..4696c195eaac1 100644
--- a/clang/test/Layout/aix-power-alignment-typedef.cpp
+++ b/clang/test/Layout/aix-power-alignment-typedef.cpp
@@ -13,7 +13,7 @@ struct A {
 int b = sizeof(A);
 
 // CHECK:          0 | struct test1::A
-// CHECK-NEXT:     0 |   Dbl x
+// CHECK-NEXT:     0 |   test1::Dbl x
 // CHECK-NEXT:       | [sizeof=8, dsize=8, align=2, preferredalign=2,
 // CHECK-NEXT:       |  nvsize=8, nvalign=2, preferrednvalign=2]
 
@@ -31,7 +31,7 @@ union U {
 int x = sizeof(U);
 
 // CHECK:          0 | union test2::U
-// CHECK-NEXT:     0 |   DblArr da
+// CHECK-NEXT:     0 |   test2::DblArr da
 // CHECK-NEXT:     0 |   char x
 // CHECK-NEXT:       | [sizeof=2, dsize=2, align=2, preferredalign=2,
 // CHECK-NEXT:       |  nvsize=2, nvalign=2, preferrednvalign=2]
@@ -49,7 +49,7 @@ union U {
 int x = sizeof(U);
 
 // CHECK:          0 | union test3::U
-// CHECK-NEXT:     0 |   DblArr da
+// CHECK-NEXT:     0 |   test3::DblArr da
 // CHECK-NEXT:     0 |   char x
 // CHECK-NEXT:       | [sizeof=2, dsize=2, align=2, preferredalign=2,
 // CHECK-NEXT:       |  nvsize=2, nvalign=2, preferrednvalign=2]
@@ -67,7 +67,7 @@ union U {
 int x = sizeof(U);
 
 // CHECK:          0 | union test4::U
-// CHECK-NEXT:     0 |   Dbl[] DblArr
+// CHECK-NEXT:     0 |   test4::Dbl[] DblArr
 // CHECK-NEXT:     0 |   char x
 // CHECK-NEXT:       | [sizeof=2, dsize=2, align=2, preferredalign=2,
 // CHECK-NEXT:       |  nvsize=2, nvalign=2, preferrednvalign=2]

diff  --git a/clang/test/Layout/dump-canonical.cpp b/clang/test/Layout/dump-canonical.cpp
index 7acf4925f9425..c7216169efdd9 100644
--- a/clang/test/Layout/dump-canonical.cpp
+++ b/clang/test/Layout/dump-canonical.cpp
@@ -14,7 +14,7 @@ struct c {
 } d;
 
 // CHECK:          0 | foo_t
-// CHECK:          0 | bar_t
+// CHECK:          0 | c::bar_t
 // CANONICAL-NOT:  0 | foo_t
-// CANONICAL-NOT:  0 | bar_t
+// CANONICAL-NOT:  0 | c::bar_t
 // CANONICAL:      0 | long

diff  --git a/clang/test/Layout/ms-x86-basic-layout.cpp b/clang/test/Layout/ms-x86-basic-layout.cpp
index f2135496b1ef7..1bd85bf6057e1 100644
--- a/clang/test/Layout/ms-x86-basic-layout.cpp
+++ b/clang/test/Layout/ms-x86-basic-layout.cpp
@@ -716,11 +716,11 @@ struct ArrayFieldOfRecords {
 };
 
 // CHECK-LABEL:   0 | struct ArrayFieldOfRecords{{$}}
-// CHECK-NEXT:    0 |   A4[2] InlineElts
+// CHECK-NEXT:    0 |   struct A4[2] InlineElts
 // CHECK-NEXT:      | [sizeof=8, align=4
 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
 // CHECK-X64-LABEL:   0 | struct ArrayFieldOfRecords{{$}}
-// CHECK-X64-NEXT:    0 |   A4[2] InlineElts
+// CHECK-X64-NEXT:    0 |   struct A4[2] InlineElts
 // CHECK-X64-NEXT:      | [sizeof=8, align=4
 // CHECK-X64-NEXT:      |  nvsize=8, nvalign=4]
 
@@ -729,11 +729,11 @@ struct ArrayOfArrayFieldOfRecords {
 };
 
 // CHECK-LABEL:   0 | struct ArrayOfArrayFieldOfRecords{{$}}
-// CHECK-NEXT:    0 |   A4[2][2] InlineElts
+// CHECK-NEXT:    0 |   struct A4[2][2] InlineElts
 // CHECK-NEXT:      | [sizeof=16, align=4
 // CHECK-NEXT:      |  nvsize=16, nvalign=4]
 // CHECK-X64-LABEL:   0 | struct ArrayOfArrayFieldOfRecords{{$}}
-// CHECK-X64-NEXT:    0 |   A4[2][2] InlineElts
+// CHECK-X64-NEXT:    0 |   struct A4[2][2] InlineElts
 // CHECK-X64-NEXT:      | [sizeof=16, align=4
 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=4]
 
@@ -743,11 +743,11 @@ struct RecordArrayTypedef {
 };
 
 // CHECK-LABEL:   0 | struct RecordArrayTypedef{{$}}
-// CHECK-NEXT:    0 |   ArrayTy[2] InlineElts
+// CHECK-NEXT:    0 |   RecordArrayTypedef::ArrayTy[2] InlineElts
 // CHECK-NEXT:      | [sizeof=16, align=4
 // CHECK-NEXT:      |  nvsize=16, nvalign=4]
 // CHECK-X64-LABEL:   0 | struct RecordArrayTypedef{{$}}
-// CHECK-X64-NEXT:    0 |   ArrayTy[2] InlineElts
+// CHECK-X64-NEXT:    0 |   RecordArrayTypedef::ArrayTy[2] InlineElts
 // CHECK-X64-NEXT:      | [sizeof=16, align=4
 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=4]
 

diff  --git a/clang/test/Layout/ms-x86-misalignedarray.cpp b/clang/test/Layout/ms-x86-misalignedarray.cpp
index 81e626d2fc3f3..7ca24ee6b468f 100644
--- a/clang/test/Layout/ms-x86-misalignedarray.cpp
+++ b/clang/test/Layout/ms-x86-misalignedarray.cpp
@@ -11,7 +11,7 @@ struct T3 { T2 a[1]; char c; };
 // CHECK: *** Dumping AST Record Layout
 // CHECK: *** Dumping AST Record Layout
 // CHECK-NEXT:    0 | struct T3
-// CHECK-NEXT:    0 |   T2[1] a
+// CHECK-NEXT:    0 |   struct T2[1] a
 // CHECK-NEXT:    5 |   char c
 // CHECK-NEXT:      | [sizeof=8, align=4
 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
@@ -19,7 +19,7 @@ struct T3 { T2 a[1]; char c; };
 // CHECK-X64: *** Dumping AST Record Layout
 // CHECK-X64: *** Dumping AST Record Layout
 // CHECK-X64-NEXT:    0 | struct T3
-// CHECK-X64-NEXT:    0 |   T2[1] a
+// CHECK-X64-NEXT:    0 |   struct T2[1] a
 // CHECK-X64-NEXT:   16 |   char c
 // CHECK-X64-NEXT:      | [sizeof=24, align=8
 // CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]

diff  --git a/clang/test/Misc/diag-line-wrapping.cpp b/clang/test/Misc/diag-line-wrapping.cpp
index cf98341fd0a7b..9e8cb9b53da55 100644
--- a/clang/test/Misc/diag-line-wrapping.cpp
+++ b/clang/test/Misc/diag-line-wrapping.cpp
@@ -9,8 +9,8 @@ struct DD : D1, D2 {
   // Ensure that after line-wrapping takes place, we preserve artificial
   // newlines introduced to manually format a section of the diagnostic text.
   // CHECK: {{.*}}: error:
-  // CHECK: struct DD -> D1 -> B
-  // CHECK: struct DD -> D2 -> B
+  // CHECK: struct DD -> struct D1 -> struct B
+  // CHECK: struct DD -> struct D2 -> struct B
 };
 
 // A line longer than 4096 characters should cause us to suppress snippets no

diff  --git a/clang/test/Misc/diag-template-
diff ing.cpp b/clang/test/Misc/diag-template-
diff ing.cpp
index 087cdd77a72a9..1834a5fc1ae03 100644
--- a/clang/test/Misc/diag-template-
diff ing.cpp
+++ b/clang/test/Misc/diag-template-
diff ing.cpp
@@ -1041,7 +1041,7 @@ namespace DependentInt {
     using T2 = M<C<N>>;
     T2 p;
     T1 x = p;
-    // CHECK-ELIDE-NOTREE: no viable conversion from 'M<C<N, INT<1>>>' to 'M<C<int, INT<0>>>'
+    // CHECK-ELIDE-NOTREE: no viable conversion from 'M<C<DependentInt::N, INT<1>>>' to 'M<C<int, INT<0>>>'
   }
 }
 
@@ -1058,7 +1058,7 @@ template <typename T, typename A = allocator<const Atom *> > class vector {};
 void foo() {
   vector<Atom *> v;
   AtomVector v2(v);
-  // CHECK-ELIDE-NOTREE: no known conversion from 'vector<Atom *, [...]>' to 'const vector<const PR17510::Atom *, [...]>'
+  // CHECK-ELIDE-NOTREE: no known conversion from 'vector<PR17510::Atom *, [...]>' to 'const vector<const PR17510::Atom *, [...]>'
 }
 }
 

diff  --git a/clang/test/Modules/namespaces.cpp b/clang/test/Modules/namespaces.cpp
index 459b07962f0b0..7e3ce820491e5 100644
--- a/clang/test/Modules/namespaces.cpp
+++ b/clang/test/Modules/namespaces.cpp
@@ -72,8 +72,8 @@ void testMergedMerged() {
 // Test merging when using anonymous namespaces, which does not
 // actually perform any merging.
 void testAnonymousNotMerged() {
-  N11::consumeFoo(N11::getFoo()); // expected-error{{cannot initialize a parameter of type 'Foo *' with an rvalue of type 'Foo *'}}
-  N12::consumeFoo(N12::getFoo()); // expected-error{{cannot initialize a parameter of type 'Foo *' with an rvalue of type 'Foo *'}}
+  N11::consumeFoo(N11::getFoo()); // expected-error{{cannot initialize a parameter of type 'N11::(anonymous namespace)::Foo *' with an rvalue of type 'N11::(anonymous namespace)::Foo *'}}
+  N12::consumeFoo(N12::getFoo()); // expected-error{{cannot initialize a parameter of type 'N12::(anonymous namespace)::Foo *' with an rvalue of type 'N12::(anonymous namespace)::Foo *'}}
 }
 
 // expected-note at Inputs/namespaces-right.h:60 {{passing argument to parameter here}}

diff  --git a/clang/test/Modules/odr_hash-gnu.cpp b/clang/test/Modules/odr_hash-gnu.cpp
index bb5ad9da38388..7091bb559848d 100644
--- a/clang/test/Modules/odr_hash-gnu.cpp
+++ b/clang/test/Modules/odr_hash-gnu.cpp
@@ -111,7 +111,7 @@ Invalid1 i1;
 // expected-note at first.h:* {{declaration of 'x' does not match}}
 Invalid2 i2;
 // expected-error at first.h:* {{'Types::TypeOf::Invalid2' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'FirstModule' found field 'x' with type 'typeof(int)' (aka 'int')}}
-// expected-note at second.h:* {{but in 'SecondModule' found field 'x' with type 'typeof(I)' (aka 'int')}}
+// expected-note at second.h:* {{but in 'SecondModule' found field 'x' with type 'typeof(Types::TypeOf::I)' (aka 'int')}}
 Invalid3 i3;
 // expected-error at second.h:* {{'Types::TypeOf::Invalid3::x' from module 'SecondModule' is not present in definition of 'Types::TypeOf::Invalid3' in module 'FirstModule'}}
 // expected-note at first.h:* {{declaration of 'x' does not match}}

diff  --git a/clang/test/Modules/odr_hash.cpp b/clang/test/Modules/odr_hash.cpp
index fb756013bc9bb..aed08c1a3a044 100644
--- a/clang/test/Modules/odr_hash.cpp
+++ b/clang/test/Modules/odr_hash.cpp
@@ -246,12 +246,12 @@ struct S5 {
 };
 #else
 S4 s4;
-// expected-error at second.h:* {{'Field::S4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type 'B' (aka 'int')}}
-// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type 'A' (aka 'int')}}
+// expected-error at second.h:* {{'Field::S4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type 'Field::B' (aka 'int')}}
+// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type 'Field::A' (aka 'int')}}
 
 S5 s5;
 // expected-error at second.h:* {{'Field::S5' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type 'int'}}
-// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type 'A' (aka 'int')}}
+// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type 'Field::A' (aka 'int')}}
 #endif
 
 #if defined(FIRST)
@@ -1098,7 +1098,7 @@ struct S6 {
 #else
 S6 s6;
 // expected-error at second.h:* {{'TypeDef::S6' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found typedef 'b' with underlying type 'float'}}
-// expected-note at first.h:* {{but in 'FirstModule' found typedef 'b' with 
diff erent underlying type 'F' (aka 'float')}}
+// expected-note at first.h:* {{but in 'FirstModule' found typedef 'b' with 
diff erent underlying type 'TypeDef::F' (aka 'float')}}
 #endif
 
 #define DECLS       \
@@ -1224,7 +1224,7 @@ struct S6 {
 #else
 S6 s6;
 // expected-error at second.h:* {{'Using::S6' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found type alias 'b' with underlying type 'float'}}
-// expected-note at first.h:* {{but in 'FirstModule' found type alias 'b' with 
diff erent underlying type 'F' (aka 'float')}}
+// expected-note at first.h:* {{but in 'FirstModule' found type alias 'b' with 
diff erent underlying type 'Using::F' (aka 'float')}}
 #endif
 
 #if defined(FIRST) || defined(SECOND)
@@ -2093,7 +2093,7 @@ struct S2 {
 };
 #else
 S2 s2;
-// expected-error at second.h:* {{'VarDecl::S2' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found data member 'x' with type 'I' (aka 'int')}}
+// expected-error at second.h:* {{'VarDecl::S2' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found data member 'x' with type 'VarDecl::I' (aka 'int')}}
 // expected-note at first.h:* {{but in 'FirstModule' found data member 'x' with 
diff erent type 'int'}}
 #endif
 
@@ -2241,7 +2241,7 @@ struct S1 {
 };
 #else
 S1 s1;
-// expected-error at second.h:* {{'Friend::S1' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found friend 'T1'}}
+// expected-error at second.h:* {{'Friend::S1' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found friend 'Friend::T1'}}
 // expected-note at first.h:* {{but in 'FirstModule' found friend 'class T1'}}
 #endif
 
@@ -2561,8 +2561,8 @@ struct B4b {};
 struct S4 : B4b {};
 #else
 S4 s4;
-// expected-error at second.h:* {{'BaseClass::S4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class with type 'B4b'}}
-// expected-note at first.h:* {{but in 'FirstModule' found 1st base class with 
diff erent type 'B4a'}}
+// expected-error at second.h:* {{'BaseClass::S4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class with type 'BaseClass::B4b'}}
+// expected-note at first.h:* {{but in 'FirstModule' found 1st base class with 
diff erent type 'BaseClass::B4a'}}
 #endif
 
 #if defined(FIRST)
@@ -2597,8 +2597,8 @@ struct B7a {};
 struct S7 : B7a {};
 #else
 S7 s7;
-// expected-error at second.h:* {{'BaseClass::S7' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'B7a' with no access specifier}}
-// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'B7a' with protected access specifier}}
+// expected-error at second.h:* {{'BaseClass::S7' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'BaseClass::B7a' with no access specifier}}
+// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B7a' with protected access specifier}}
 #endif
 
 #if defined(FIRST)
@@ -2609,8 +2609,8 @@ struct B8a {};
 struct S8 : private B8a {};
 #else
 S8 s8;
-// expected-error at second.h:* {{'BaseClass::S8' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'B8a' with private access specifier}}
-// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'B8a' with public access specifier}}
+// expected-error at second.h:* {{'BaseClass::S8' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'BaseClass::B8a' with private access specifier}}
+// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B8a' with public access specifier}}
 #endif
 
 #if defined(FIRST)
@@ -2621,8 +2621,8 @@ struct B9a {};
 struct S9 : public B9a {};
 #else
 S9 s9;
-// expected-error at second.h:* {{'BaseClass::S9' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'B9a' with public access specifier}}
-// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'B9a' with private access specifier}}
+// expected-error at second.h:* {{'BaseClass::S9' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'BaseClass::B9a' with public access specifier}}
+// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B9a' with private access specifier}}
 #endif
 
 #if defined(FIRST)
@@ -2633,8 +2633,8 @@ struct B10a {};
 struct S10 : protected B10a {};
 #else
 S10 s10;
-// expected-error at second.h:* {{'BaseClass::S10' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'B10a' with protected access specifier}}
-// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'B10a' with no access specifier}}
+// expected-error at second.h:* {{'BaseClass::S10' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found 1st base class 'BaseClass::B10a' with protected access specifier}}
+// expected-note at first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B10a' with no access specifier}}
 #endif
 
 #define DECLS
@@ -3904,14 +3904,14 @@ Invalid1 i1;
 // expected-error at first.h:* {{'Types::UnaryTransform::Invalid1::x' from module 'FirstModule' is not present in definition of 'Types::UnaryTransform::Invalid1' in module 'SecondModule'}}
 // expected-note at second.h:* {{declaration of 'x' does not match}}
 Invalid2 i2;
-// expected-error at second.h:* {{'Types::UnaryTransform::Invalid2' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type '__underlying_type(E2b)' (aka 'unsigned int')}}
-// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type '__underlying_type(E2a)' (aka 'unsigned int')}}
+// expected-error at second.h:* {{'Types::UnaryTransform::Invalid2' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type '__underlying_type(Types::UnaryTransform::E2b)' (aka 'unsigned int')}}
+// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type '__underlying_type(Types::UnaryTransform::E2a)' (aka 'unsigned int')}}
 Invalid3 i3;
 // expected-error at first.h:* {{'Types::UnaryTransform::Invalid3::x' from module 'FirstModule' is not present in definition of 'Types::UnaryTransform::Invalid3' in module 'SecondModule'}}
 // expected-note at second.h:* {{declaration of 'x' does not match}}
 Invalid4 i4;
-// expected-error at second.h:* {{'Types::UnaryTransform::Invalid4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type '__underlying_type(E4b)' (aka 'unsigned int')}}
-// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type '__underlying_type(E4a)' (aka 'unsigned int')}}
+// expected-error at second.h:* {{'Types::UnaryTransform::Invalid4' has 
diff erent definitions in 
diff erent modules; first 
diff erence is definition in module 'SecondModule' found field 'x' with type '__underlying_type(Types::UnaryTransform::E4b)' (aka 'unsigned int')}}
+// expected-note at first.h:* {{but in 'FirstModule' found field 'x' with type '__underlying_type(Types::UnaryTransform::E4a)' (aka 'unsigned int')}}
 Valid1 v1;
 Valid2 v2;
 Valid3 v3;
@@ -4603,7 +4603,7 @@ int F7() { return 0; }
 #else
 int I7 = F7();
 // expected-error at second.h:* {{'FunctionDecl::F7' has 
diff erent definitions in 
diff erent modules; definition in module 'SecondModule' first 
diff erence is return type is 'int'}}
-// expected-note at first.h:* {{but in 'FirstModule' found 
diff erent return type 'I' (aka 'int')}}
+// expected-note at first.h:* {{but in 'FirstModule' found 
diff erent return type 'FunctionDecl::I' (aka 'int')}}
 #endif
 
 #if defined(FIRST)
@@ -4612,7 +4612,7 @@ int F8(int) { return 0; }
 int F8(I) { return 0; }
 #else
 int I8 = F8(1);
-// expected-error at second.h:* {{'FunctionDecl::F8' has 
diff erent definitions in 
diff erent modules; definition in module 'SecondModule' first 
diff erence is 1st parameter with type 'I' (aka 'int')}}
+// expected-error at second.h:* {{'FunctionDecl::F8' has 
diff erent definitions in 
diff erent modules; definition in module 'SecondModule' first 
diff erence is 1st parameter with type 'FunctionDecl::I' (aka 'int')}}
 // expected-note at first.h:* {{but in 'FirstModule' found 1st parameter with type 'int'}}
 #endif
 

diff  --git a/clang/test/OpenMP/declare_mapper_ast_print.cpp b/clang/test/OpenMP/declare_mapper_ast_print.cpp
index 9761fac70cab9..b9445ca35a0ca 100644
--- a/clang/test/OpenMP/declare_mapper_ast_print.cpp
+++ b/clang/test/OpenMP/declare_mapper_ast_print.cpp
@@ -21,7 +21,7 @@ class vec {
 };
 // CHECK: };
 
-// CHECK: class vecchild : public vec {
+// CHECK: class vecchild : public N1::vec {
 class vecchild : public vec {
 public:
   int lenc;
@@ -29,7 +29,7 @@ class vecchild : public vec {
 // CHECK: };
 
 #pragma omp declare mapper(id: vec v) map(v.len)
-// CHECK: #pragma omp declare mapper (id : vec v) map(tofrom: v.len){{$}}
+// CHECK: #pragma omp declare mapper (id : N1::vec v) map(tofrom: v.len){{$}}
 };
 // CHECK: }
 // CHECK: ;
@@ -49,11 +49,11 @@ class dat {
 
 // CHECK: template <class T> class dat {
 // CHECK: #pragma omp declare mapper (id : N1::vec v) map(tofrom: v.len){{$}}
-// CHECK: #pragma omp declare mapper (id : datin v) map(tofrom: v.in){{$}}
+// CHECK: #pragma omp declare mapper (id : dat::datin v) map(tofrom: v.in){{$}}
 // CHECK: };
 // CHECK: template<> class dat<double> {
 // CHECK: #pragma omp declare mapper (id : N1::vec v) map(tofrom: v.len){{$}}
-// CHECK: #pragma omp declare mapper (id : datin v) map(tofrom: v.in){{$}}
+// CHECK: #pragma omp declare mapper (id : dat<double>::datin v) map(tofrom: v.in){{$}}
 // CHECK: };
 
 constexpr int N = 2;

diff  --git a/clang/test/OpenMP/declare_reduction_ast_print.cpp b/clang/test/OpenMP/declare_reduction_ast_print.cpp
index 15bee2800ba08..b46e1c8da084b 100644
--- a/clang/test/OpenMP/declare_reduction_ast_print.cpp
+++ b/clang/test/OpenMP/declare_reduction_ast_print.cpp
@@ -20,7 +20,7 @@ namespace N1
   #pragma omp declare reduction(-: struct A : bar(omp_out, omp_in))
 }
 // CHECK: namespace N1 {
-// CHECK: #pragma omp declare reduction (+ : A : bar(omp_out, omp_in))
+// CHECK: #pragma omp declare reduction (+ : N1::A : bar(omp_out, omp_in))
 // CHECK: #pragma omp declare reduction (- : struct A : bar(omp_out, omp_in))
 
 #pragma omp declare reduction(+ : int, char : omp_out *= omp_in)

diff  --git a/clang/test/OpenMP/deferred-diags.cpp b/clang/test/OpenMP/deferred-diags.cpp
index a12f80309344c..0c38e68ae81ab 100644
--- a/clang/test/OpenMP/deferred-diags.cpp
+++ b/clang/test/OpenMP/deferred-diags.cpp
@@ -41,7 +41,7 @@ namespace TestDeleteIncompleteClassDefinition {
 struct a;
 struct b {
   b() {
-    delete c; // expected-warning {{deleting pointer to incomplete type 'a' may cause undefined behavior}}
+    delete c; // expected-warning {{deleting pointer to incomplete type 'TestDeleteIncompleteClassDefinition::a' may cause undefined behavior}}
   }
   a *c;
 };

diff  --git a/clang/test/PCH/cxx_exprs.cpp b/clang/test/PCH/cxx_exprs.cpp
index c901bd7fc71c6..dd99b04a7d2b7 100644
--- a/clang/test/PCH/cxx_exprs.cpp
+++ b/clang/test/PCH/cxx_exprs.cpp
@@ -27,7 +27,7 @@ dynamic_cast_result derived_ptr = d;
 // CHECK: TypedefDecl {{.*}} <{{.*}}, col:{{.*}}> col:{{.*}} referenced dynamic_cast_result 'typeof (dynamic_cast<Derived *>(base_ptr))':'Derived *'{{$}}
 // CHECK-NEXT: TypeOfExprType {{.*}} 'typeof (dynamic_cast<Derived *>(base_ptr))' sugar{{( imported)?}}{{$}}
 // CHECK-NEXT: ParenExpr {{.*}} <col:{{.*}}, col:{{.*}}> 'Derived *'{{$}}
-// CHECK-NEXT: CXXDynamicCastExpr {{.*}} <col:{{.*}}, col:{{.*}}> 'Derived *' dynamic_cast<Derived *> <Dynamic>{{$}}
+// CHECK-NEXT: CXXDynamicCastExpr {{.*}} <col:{{.*}}, col:{{.*}}> 'Derived *' dynamic_cast<struct Derived *> <Dynamic>{{$}}
 // CHECK-NEXT: ImplicitCastExpr {{.*}} <col:{{.*}}> 'Base *' <LValueToRValue> part_of_explicit_cast{{$}}
 // CHECK-NEXT: DeclRefExpr {{.*}} <col:{{.*}}> 'Base *' lvalue Var {{.*}} 'base_ptr' 'Base *' non_odr_use_unevaluated{{$}}
 

diff  --git a/clang/test/Parser/cxx1z-decomposition.cpp b/clang/test/Parser/cxx1z-decomposition.cpp
index 7abf1f9cdac56..b791870eedaef 100644
--- a/clang/test/Parser/cxx1z-decomposition.cpp
+++ b/clang/test/Parser/cxx1z-decomposition.cpp
@@ -92,7 +92,7 @@ namespace BadSpecifiers {
   const int K = 5;
   void g() {
     // defining-type-specifiers other than cv-qualifiers and 'auto'
-    S [a] = s; // expected-error {{cannot be declared with type 'S'}}
+    S [a] = s; // expected-error {{cannot be declared with type 'BadSpecifiers::S'}}
     decltype(auto) [b] = s; // expected-error {{cannot be declared with type 'decltype(auto)'}}
     auto ([c]) = s; // expected-error {{cannot be declared with parentheses}}
 

diff  --git a/clang/test/SemaCXX/MicrosoftCompatibility.cpp b/clang/test/SemaCXX/MicrosoftCompatibility.cpp
index 83177b1b1f8e6..961a63cada203 100644
--- a/clang/test/SemaCXX/MicrosoftCompatibility.cpp
+++ b/clang/test/SemaCXX/MicrosoftCompatibility.cpp
@@ -120,7 +120,7 @@ namespace PR11826 {
   void f() {
     pair p0(3);
 #if _MSC_VER >= 1900
-    pair p = p0; // expected-error {{call to implicitly-deleted copy constructor of 'pair'}}
+    pair p = p0; // expected-error {{call to implicitly-deleted copy constructor of 'PR11826::pair'}}
 #else
     pair p = p0;
 #endif
@@ -140,7 +140,7 @@ namespace PR11826_for_symmetry {
     pair p0(3);
     pair p(4);
 #if _MSC_VER >= 1900
-    p = p0; // expected-error {{object of type 'pair' cannot be assigned because its copy assignment operator is implicitly deleted}}
+    p = p0; // expected-error {{object of type 'PR11826_for_symmetry::pair' cannot be assigned because its copy assignment operator is implicitly deleted}}
 #else
     p = p0;
 #endif

diff  --git a/clang/test/SemaCXX/abstract.cpp b/clang/test/SemaCXX/abstract.cpp
index cdffa09fb3c9c..e520f2581d1db 100644
--- a/clang/test/SemaCXX/abstract.cpp
+++ b/clang/test/SemaCXX/abstract.cpp
@@ -282,7 +282,7 @@ namespace pr12658 {
   void foo(const C& c ) {}
 
   void bar( void ) {
-    foo(C(99)); // expected-error {{allocating an object of abstract class type 'C'}}
+    foo(C(99)); // expected-error {{allocating an object of abstract class type 'pr12658::C'}}
   }
 }
 
@@ -302,14 +302,14 @@ namespace pr16659 {
   private:
     X &operator=(const X&);
   };
-  struct Y : virtual X { // expected-note {{class 'X' has an inaccessible copy assignment}}
+  struct Y : virtual X { // expected-note {{::X' has an inaccessible copy assignment}}
     virtual ~Y() = 0;
   };
-  struct Z : Y {}; // expected-note {{class 'Y' has a deleted copy assignment}}
+  struct Z : Y {}; // expected-note {{::Y' has a deleted copy assignment}}
   void f(Z &a, const Z &b) { a = b; } // expected-error {{copy assignment operator is implicitly deleted}}
 
   struct RedundantInit : virtual A {
-    RedundantInit() : A(0) {} // expected-warning {{initializer for virtual base class 'A' of abstract class 'RedundantInit' will never be used}}
+    RedundantInit() : A(0) {} // expected-warning {{initializer for virtual base class 'pr16659::A' of abstract class 'RedundantInit' will never be used}}
   };
 }
 

diff  --git a/clang/test/SemaCXX/access-base-class.cpp b/clang/test/SemaCXX/access-base-class.cpp
index ffa84ac4c29a3..2ed40ed536c5f 100644
--- a/clang/test/SemaCXX/access-base-class.cpp
+++ b/clang/test/SemaCXX/access-base-class.cpp
@@ -5,7 +5,7 @@ class A { };
 class B : private A { }; // expected-note {{declared private here}}
 
 void f(B* b) {
-  A *a = b; // expected-error{{cannot cast 'B' to its private base class 'A'}}
+  A *a = b; // expected-error{{cannot cast 'T1::B' to its private base class 'T1::A'}}
 }
 
 }
@@ -16,7 +16,7 @@ class A { };
 class B : A { }; // expected-note {{implicitly declared private here}}
 
 void f(B* b) {
-  A *a = b; // expected-error {{cannot cast 'B' to its private base class 'A'}}
+  A *a = b; // expected-error {{cannot cast 'T2::B' to its private base class 'T2::A'}}
 }
 
 }
@@ -69,7 +69,7 @@ namespace T6 {
   
   class C : public B { 
     void f(C *c) {
-      A* a = c; // expected-error {{cannot cast 'C' to its private base class 'A'}} \
+      A* a = c; // expected-error {{cannot cast 'T6::C' to its private base class 'T6::A'}} \
                 // expected-error {{'A' is a private member of 'T6::A'}}
     }
   };

diff  --git a/clang/test/SemaCXX/accessible-base.cpp b/clang/test/SemaCXX/accessible-base.cpp
index 6b55f1474a9c1..27969858506d6 100644
--- a/clang/test/SemaCXX/accessible-base.cpp
+++ b/clang/test/SemaCXX/accessible-base.cpp
@@ -11,16 +11,16 @@ struct X1 : virtual A
 struct Y1 : X1, virtual A
 {};
 
-struct Y2 : X1, A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Y2 -> X1 -> A\n    struct Y2 -> A}}
+struct Y2 : X1, A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Y2 -> struct X1 -> struct A\n    struct Y2 -> struct A}}
 {};
 
 struct X2 : A
 {};
 
-struct Z1 : X2, virtual A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Z1 -> X2 -> A\n    struct Z1 -> A}}
+struct Z1 : X2, virtual A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Z1 -> struct X2 -> struct A\n    struct Z1 -> struct A}}
 {};
 
-struct Z2 : X2, A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Z2 -> X2 -> A\n    struct Z2 -> A}}
+struct Z2 : X2, A // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Z2 -> struct X2 -> struct A\n    struct Z2 -> struct A}}
 {};
 
 A *y2_to_a(Y2 *p) {

diff  --git a/clang/test/SemaCXX/aggregate-initialization.cpp b/clang/test/SemaCXX/aggregate-initialization.cpp
index a4bf0bece2da8..3c12aca12d212 100644
--- a/clang/test/SemaCXX/aggregate-initialization.cpp
+++ b/clang/test/SemaCXX/aggregate-initialization.cpp
@@ -206,7 +206,7 @@ namespace ElementDestructor {
   struct Y { X x; };
 
   void test0() {
-    auto *y = new Y {}; // expected-error {{temporary of type 'X' has private destructor}}
+    auto *y = new Y {}; // expected-error {{temporary of type 'ElementDestructor::X' has private destructor}}
   }
 
   struct S0 { int f; ~S0() = delete; }; // expected-note 3 {{'~S0' has been explicitly marked deleted here}}

diff  --git a/clang/test/SemaCXX/ambig-user-defined-conversions.cpp b/clang/test/SemaCXX/ambig-user-defined-conversions.cpp
index 0fa09b0b72286..8d8fa4fef6d92 100644
--- a/clang/test/SemaCXX/ambig-user-defined-conversions.cpp
+++ b/clang/test/SemaCXX/ambig-user-defined-conversions.cpp
@@ -20,7 +20,7 @@ namespace test0 {
   const int Test1() {
 
     func(b1, f()); // expected-error {{call to 'func' is ambiguous}}
-    return f(); // expected-error {{conversion from 'B' to 'const int' is ambiguous}}
+    return f(); // expected-error {{conversion from 'test0::B' to 'const int' is ambiguous}}
   }
 
   // This used to crash when comparing the two operands.
@@ -63,7 +63,7 @@ namespace rdar8876150 {
   struct C : A { };
   struct D : B, C { };
 
-  bool f(D d) { return !d; } // expected-error{{ambiguous conversion from derived class 'D' to base class 'rdar8876150::A':}}
+  bool f(D d) { return !d; } // expected-error{{ambiguous conversion from derived class 'rdar8876150::D' to base class 'rdar8876150::A':}}
 }
 
 namespace assignment {

diff  --git a/clang/test/SemaCXX/atomic-type.cpp b/clang/test/SemaCXX/atomic-type.cpp
index 3200a59bc86a2..d7d8bbba50ca3 100644
--- a/clang/test/SemaCXX/atomic-type.cpp
+++ b/clang/test/SemaCXX/atomic-type.cpp
@@ -108,6 +108,6 @@ namespace non_trivially_copyable {
   struct S {
     ~S() {}
   };
-  _Atomic S s;  // expected-error {{_Atomic cannot be applied to type 'S' which is not trivially copyable}} \
+  _Atomic S s;  // expected-error {{_Atomic cannot be applied to type 'non_trivially_copyable::S' which is not trivially copyable}} \
                 // expected-warning {{'_Atomic' is a C11 extension}}
 }

diff  --git a/clang/test/SemaCXX/attr-noreturn.cpp b/clang/test/SemaCXX/attr-noreturn.cpp
index e6de5ad45d340..72487bbed55a8 100644
--- a/clang/test/SemaCXX/attr-noreturn.cpp
+++ b/clang/test/SemaCXX/attr-noreturn.cpp
@@ -265,13 +265,13 @@ namespace PR15291 {
   typedef void (*fptr_t)(int);
   typedef void __attribute__((noreturn)) (*fptr_noreturn_t)(int);
 
-  // expected-note at +1 {{candidate function not viable: no overload of 'bar' matching 'fptr_t' (aka 'void (*)(int)') for 1st argument}}
+  // expected-note at +1 {{candidate function not viable: no overload of 'bar' matching 'PR15291::fptr_t' (aka 'void (*)(int)') for 1st argument}}
   void accept_fptr_t(fptr_t f) {
     f(42);
   }
 
-  // expected-note at +2 {{candidate function not viable: no overload of 'baz' matching 'fptr_noreturn_t' (aka 'void (*)(int) __attribute__((noreturn))') for 1st argument}}
-  // expected-note at +1 {{candidate function not viable: no overload of 'qux' matching 'fptr_noreturn_t' (aka 'void (*)(int) __attribute__((noreturn))') for 1st argument}}
+  // expected-note at +2 {{candidate function not viable: no overload of 'baz' matching 'PR15291::fptr_noreturn_t' (aka 'void (*)(int) __attribute__((noreturn))') for 1st argument}}
+  // expected-note at +1 {{candidate function not viable: no overload of 'qux' matching 'PR15291::fptr_noreturn_t' (aka 'void (*)(int) __attribute__((noreturn))') for 1st argument}}
   void accept_fptr_noreturn_t(fptr_noreturn_t f) {
     f(42);
   }

diff  --git a/clang/test/SemaCXX/builtins.cpp b/clang/test/SemaCXX/builtins.cpp
index d60b928d85894..50e0fb42b403d 100644
--- a/clang/test/SemaCXX/builtins.cpp
+++ b/clang/test/SemaCXX/builtins.cpp
@@ -144,7 +144,7 @@ struct IncompleteMember {
   Incomplete &i;
 };
 void test_incomplete(Incomplete *i, IncompleteMember *im) {
-  // expected-error at +1 {{incomplete type 'Incomplete' where a complete type is required}}
+  // expected-error at +1 {{incomplete type 'test_launder::Incomplete' where a complete type is required}}
   __builtin_launder(i);
   __builtin_launder(&i); // OK
   __builtin_launder(im); // OK

diff  --git a/clang/test/SemaCXX/calling-conv-compat.cpp b/clang/test/SemaCXX/calling-conv-compat.cpp
index 2af944defd4bc..a268d9da07ee5 100644
--- a/clang/test/SemaCXX/calling-conv-compat.cpp
+++ b/clang/test/SemaCXX/calling-conv-compat.cpp
@@ -183,31 +183,31 @@ typedef void (           C::*memb_c_default)();
 typedef void (__cdecl    C::*memb_c_cdecl)();
 typedef void (__thiscall C::*memb_c_thiscall)();
 
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_a_default' (aka 'void (NonVariadic::A::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_a_default' (aka 'void (NonVariadic::A::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_a_default(memb_a_default ptr);
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_a_cdecl' (aka 'void (NonVariadic::A::*)() __attribute__((cdecl))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_a_cdecl' (aka 'void (NonVariadic::A::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_a_cdecl' (aka 'void (NonVariadic::A::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_a_cdecl' (aka 'void (NonVariadic::A::*)() __attribute__((cdecl))') for 1st argument}}
 void cb_memb_a_cdecl(memb_a_cdecl ptr);
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_a_thiscall' (aka 'void (NonVariadic::A::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_a_thiscall' (aka 'void (NonVariadic::A::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_a_thiscall(memb_a_thiscall ptr);
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_b_default' (aka 'void (NonVariadic::B::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_b_default' (aka 'void (NonVariadic::B::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_b_default(memb_b_default ptr);
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_b_cdecl' (aka 'void (NonVariadic::B::*)() __attribute__((cdecl))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_b_cdecl' (aka 'void (NonVariadic::B::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_b_cdecl' (aka 'void (NonVariadic::B::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_b_cdecl' (aka 'void (NonVariadic::B::*)() __attribute__((cdecl))') for 1st argument}}
 void cb_memb_b_cdecl(memb_b_cdecl ptr);
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_b_thiscall' (aka 'void (NonVariadic::B::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_b_thiscall' (aka 'void (NonVariadic::B::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_b_thiscall(memb_b_thiscall ptr);
-// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_default' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_c_default(memb_c_default ptr);
-// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_cdecl' (aka 'void (NonVariadic::C::*)() __attribute__((cdecl))') for 1st argument}}
 void cb_memb_c_cdecl(memb_c_cdecl ptr);
-// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +3 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((cdecl))' to 'NonVariadic::memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (NonVariadic::A::*)() __attribute__((thiscall))' to 'NonVariadic::memb_c_thiscall' (aka 'void (NonVariadic::C::*)() __attribute__((thiscall))') for 1st argument}}
 void cb_memb_c_thiscall(memb_c_thiscall ptr);
 
 void call_member() {
@@ -279,11 +279,11 @@ void cb_memb_a_default(memb_a_default ptr);
 void cb_memb_a_cdecl(memb_a_cdecl ptr);
 void cb_memb_b_default(memb_b_default ptr);
 void cb_memb_b_cdecl(memb_b_cdecl ptr);
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...)' to 'memb_c_default' (aka 'void (Variadic::C::*)(int, ...)') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...) __attribute__((cdecl))' to 'memb_c_default' (aka 'void (Variadic::C::*)(int, ...)') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...)' to 'Variadic::memb_c_default' (aka 'void (Variadic::C::*)(int, ...)') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...) __attribute__((cdecl))' to 'Variadic::memb_c_default' (aka 'void (Variadic::C::*)(int, ...)') for 1st argument}}
 void cb_memb_c_default(memb_c_default ptr);
-// expected-note at +2 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...)' to 'memb_c_cdecl' (aka 'void (Variadic::C::*)(int, ...) __attribute__((cdecl))') for 1st argument}}
-// expected-note at +1 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...) __attribute__((cdecl))' to 'memb_c_cdecl' (aka 'void (Variadic::C::*)(int, ...) __attribute__((cdecl))') for 1st argument}}
+// expected-note at +2 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...)' to 'Variadic::memb_c_cdecl' (aka 'void (Variadic::C::*)(int, ...) __attribute__((cdecl))') for 1st argument}}
+// expected-note at +1 {{candidate function not viable: no known conversion from 'void (Variadic::A::*)(int, ...) __attribute__((cdecl))' to 'Variadic::memb_c_cdecl' (aka 'void (Variadic::C::*)(int, ...) __attribute__((cdecl))') for 1st argument}}
 void cb_memb_c_cdecl(memb_c_cdecl ptr);
 
 void call_member() {
@@ -330,7 +330,7 @@ mptr_t __stdcall return_mptr_std(short) {
 void (A::*(*return_fptr_std_mptr(char))(short))(int) {
   return return_mptr_std;
 #if !_M_X64
-  // expected-error at -2 {{cannot initialize return object of type 'void (MultiChunkDecls::A::*(*)(short))(int) __attribute__((thiscall))' with an lvalue of type 'mptr_t (short) __attribute__((stdcall))'}}
+  // expected-error at -2 {{cannot initialize return object of type 'void (MultiChunkDecls::A::*(*)(short))(int) __attribute__((thiscall))' with an lvalue of type 'MultiChunkDecls::mptr_t (short) __attribute__((stdcall))'}}
 #endif
 }
 

diff  --git a/clang/test/SemaCXX/class-base-member-init.cpp b/clang/test/SemaCXX/class-base-member-init.cpp
index a6bb4410a81c8..8344e6f49a676 100644
--- a/clang/test/SemaCXX/class-base-member-init.cpp
+++ b/clang/test/SemaCXX/class-base-member-init.cpp
@@ -83,7 +83,7 @@ namespace test5 {
     A() : decltype(Base(1))(3) {
     }
     A(int) : Base(3), // expected-note {{previous initialization is here}}
-             decltype(Base(1))(2), // expected-error {{multiple initializations given for base 'decltype(Base(1))' (aka 'test5::Base')}}
+             decltype(Base(1))(2), // expected-error {{multiple initializations given for base 'decltype(test5::Base(1))' (aka 'test5::Base')}}
              decltype(int())() { // expected-error {{constructor initializer 'decltype(int())' (aka 'int') does not name a class}}
     }
     A(float) : decltype(A())(3) {

diff  --git a/clang/test/SemaCXX/class.cpp b/clang/test/SemaCXX/class.cpp
index f874b7be2b70e..84334f094381d 100644
--- a/clang/test/SemaCXX/class.cpp
+++ b/clang/test/SemaCXX/class.cpp
@@ -47,7 +47,7 @@ class C {
   // expected-warning at -2 {{default member initializer for non-static data member is a C++11 extension}}
 #endif
   static int si = 0; // expected-error {{non-const static data member must be initialized out of line}}
-  static const NestedC ci = 0; // expected-error {{static data member of type 'const NestedC' must be initialized out of line}}
+  static const NestedC ci = 0; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}}
   static const int nci = vs; // expected-error {{in-class initializer for static data member is not a constant expression}}
   static const int vi = 0;
   static const volatile int cvi = 0; // ok, illegal in C++11

diff  --git a/clang/test/SemaCXX/co_await-ast.cpp b/clang/test/SemaCXX/co_await-ast.cpp
index b9eae493be952..1145be364f51c 100644
--- a/clang/test/SemaCXX/co_await-ast.cpp
+++ b/clang/test/SemaCXX/co_await-ast.cpp
@@ -47,52 +47,52 @@ awaitable foo() {
 // CHECK:   |-CompoundStmt {{.*}}
 // CHECK:   | `-ExprWithCleanups {{.*}} 'void'
 // CHECK:   |   `-CoawaitExpr {{.*}} 'void'
-// CHECK:   |     |-CXXTemporaryObjectExpr {{.*}} 'executor':'executor' 'void (){{.*}} noexcept' zeroing
-// CHECK:   |     |-MaterializeTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |     | `-CXXBindTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' (CXXTemporary {{.*}})
-// CHECK:   |     |   `-CXXMemberCallExpr {{.*}} 'result_t':'awaitable_frame::result_t'
+// CHECK:   |     |-CXXTemporaryObjectExpr {{.*}} 'executor' 'void (){{.*}} noexcept' zeroing
+// CHECK:   |     |-MaterializeTemporaryExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |     | `-CXXBindTemporaryExpr {{.*}} 'awaitable_frame::result_t' (CXXTemporary {{.*}})
+// CHECK:   |     |   `-CXXMemberCallExpr {{.*}} 'awaitable_frame::result_t'
 // CHECK:   |     |     |-MemberExpr {{.*}} '<bound member function type>' .await_transform {{.*}}
 // CHECK:   |     |     | `-DeclRefExpr {{.*}} 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame' lvalue Var {{.*}} '__promise' 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame'
-// CHECK:   |     |     `-CXXTemporaryObjectExpr {{.*}} 'executor':'executor' 'void (){{.*}} noexcept' zeroing
+// CHECK:   |     |     `-CXXTemporaryObjectExpr {{.*}} 'executor' 'void (){{.*}} noexcept' zeroing
 // CHECK:   |     |-ExprWithCleanups {{.*}} 'bool'
 // CHECK:   |     | `-CXXMemberCallExpr {{.*}} 'bool'
 // CHECK:   |     |   `-MemberExpr {{.*}} '<bound member function type>' .await_ready {{.*}}
 // CHECK:   |     |     `-ImplicitCastExpr {{.*}} 'const awaitable_frame::result_t' lvalue <NoOp>
-// CHECK:   |     |       `-OpaqueValueExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |     |         `-MaterializeTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |     |           `-CXXBindTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' (CXXTemporary {{.*}})
-// CHECK:   |     |             `-CXXMemberCallExpr {{.*}} 'result_t':'awaitable_frame::result_t'
+// CHECK:   |     |       `-OpaqueValueExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |     |         `-MaterializeTemporaryExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |     |           `-CXXBindTemporaryExpr {{.*}} 'awaitable_frame::result_t' (CXXTemporary {{.*}})
+// CHECK:   |     |             `-CXXMemberCallExpr {{.*}} 'awaitable_frame::result_t'
 // CHECK:   |     |               |-MemberExpr {{.*}} '<bound member function type>' .await_transform {{.*}}
 // CHECK:   |     |               | `-DeclRefExpr {{.*}} 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame' lvalue Var {{.*}} '__promise' 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame'
-// CHECK:   |     |               `-CXXTemporaryObjectExpr {{.*}} 'executor':'executor' 'void (){{.*}} noexcept' zeroing
+// CHECK:   |     |               `-CXXTemporaryObjectExpr {{.*}} 'executor' 'void (){{.*}} noexcept' zeroing
 // CHECK:   |     |-ExprWithCleanups {{.*}} 'void'
 // CHECK:   |     | `-CXXMemberCallExpr {{.*}} 'void'
 // CHECK:   |     |   |-MemberExpr {{.*}} '<bound member function type>' .await_suspend {{.*}}
-// CHECK:   |     |   | `-OpaqueValueExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |     |   |   `-MaterializeTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |     |   |     `-CXXBindTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' (CXXTemporary {{.*}})
-// CHECK:   |     |   |       `-CXXMemberCallExpr {{.*}} 'result_t':'awaitable_frame::result_t'
+// CHECK:   |     |   | `-OpaqueValueExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |     |   |   `-MaterializeTemporaryExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |     |   |     `-CXXBindTemporaryExpr {{.*}} 'awaitable_frame::result_t' (CXXTemporary {{.*}})
+// CHECK:   |     |   |       `-CXXMemberCallExpr {{.*}} 'awaitable_frame::result_t'
 // CHECK:   |     |   |         |-MemberExpr {{.*}} '<bound member function type>' .await_transform {{.*}}
 // CHECK:   |     |   |         | `-DeclRefExpr {{.*}} 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame' lvalue Var {{.*}} '__promise' 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame'
-// CHECK:   |     |   |         `-CXXTemporaryObjectExpr {{.*}} 'executor':'executor' 'void (){{.*}} noexcept' zeroing
+// CHECK:   |     |   |         `-CXXTemporaryObjectExpr {{.*}} 'executor' 'void (){{.*}} noexcept' zeroing
 // CHECK:   |     |   `-ImplicitCastExpr {{.*}} 'std::coroutine_handle<void>':'std::coroutine_handle<void>' <ConstructorConversion>
 // CHECK:   |     |     `-CXXConstructExpr {{.*}} 'std::coroutine_handle<void>':'std::coroutine_handle<void>' 'void (coroutine_handle<awaitable_frame> &&){{.*}} noexcept'
-// CHECK:   |     |       `-MaterializeTemporaryExpr {{.*}} 'coroutine_handle<awaitable_frame>':'std::coroutine_handle<awaitable_frame>' xvalue
-// CHECK:   |     |         `-CallExpr {{.*}} 'coroutine_handle<awaitable_frame>':'std::coroutine_handle<awaitable_frame>'
-// CHECK:   |     |           |-ImplicitCastExpr {{.*}} 'coroutine_handle<awaitable_frame> (*)(void *) noexcept' <FunctionToPointerDecay>
-// CHECK:   |     |           | `-DeclRefExpr {{.*}} 'coroutine_handle<awaitable_frame> (void *) noexcept' lvalue CXXMethod {{.*}} 'from_address' 'coroutine_handle<awaitable_frame> (void *) noexcept'
+// CHECK:   |     |       `-MaterializeTemporaryExpr {{.*}} 'std::coroutine_handle<awaitable_frame>' xvalue
+// CHECK:   |     |         `-CallExpr {{.*}} 'std::coroutine_handle<awaitable_frame>'
+// CHECK:   |     |           |-ImplicitCastExpr {{.*}} 'std::coroutine_handle<awaitable_frame> (*)(void *) noexcept' <FunctionToPointerDecay>
+// CHECK:   |     |           | `-DeclRefExpr {{.*}} 'std::coroutine_handle<awaitable_frame> (void *) noexcept' lvalue CXXMethod {{.*}} 'from_address' 'std::coroutine_handle<awaitable_frame> (void *) noexcept'
 // CHECK:   |     |           `-CallExpr {{.*}} 'void *'
 // CHECK:   |     |             `-ImplicitCastExpr {{.*}} 'void *(*)() noexcept' <FunctionToPointerDecay>
 // CHECK:   |     |               `-DeclRefExpr {{.*}} 'void *() noexcept' lvalue Function {{.*}} '__builtin_coro_frame' 'void *() noexcept'
 // CHECK:   |     `-CXXMemberCallExpr {{.*}} 'void'
 // CHECK:   |       `-MemberExpr {{.*}} '<bound member function type>' .await_resume {{.*}}
 // CHECK:   |         `-ImplicitCastExpr {{.*}} 'const awaitable_frame::result_t' lvalue <NoOp>
-// CHECK:   |           `-OpaqueValueExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |             `-MaterializeTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' lvalue
-// CHECK:   |               `-CXXBindTemporaryExpr {{.*}} 'result_t':'awaitable_frame::result_t' (CXXTemporary {{.*}})
-// CHECK:   |                 `-CXXMemberCallExpr {{.*}} 'result_t':'awaitable_frame::result_t'
+// CHECK:   |           `-OpaqueValueExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |             `-MaterializeTemporaryExpr {{.*}} 'awaitable_frame::result_t' lvalue
+// CHECK:   |               `-CXXBindTemporaryExpr {{.*}} 'awaitable_frame::result_t' (CXXTemporary {{.*}})
+// CHECK:   |                 `-CXXMemberCallExpr {{.*}} 'awaitable_frame::result_t'
 // CHECK:   |                   |-MemberExpr {{.*}} '<bound member function type>' .await_transform {{.*}}
 // CHECK:   |                   | `-DeclRefExpr {{.*}} 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame' lvalue Var {{.*}} '__promise' 'std::coroutine_traits<awaitable>::promise_type':'awaitable_frame'
-// CHECK:   |                   `-CXXTemporaryObjectExpr {{.*}} <col:12, col:21> 'executor':'executor' 'void (){{.*}} noexcept' zeroing
+// CHECK:   |                   `-CXXTemporaryObjectExpr {{.*}} <col:12, col:21> 'executor' 'void (){{.*}} noexcept' zeroing
 
 // Rest of the generated coroutine statements omitted.

diff  --git a/clang/test/SemaCXX/compound-literal.cpp b/clang/test/SemaCXX/compound-literal.cpp
index 5957099de53af..353be2cf48e4f 100644
--- a/clang/test/SemaCXX/compound-literal.cpp
+++ b/clang/test/SemaCXX/compound-literal.cpp
@@ -36,8 +36,8 @@ namespace brace_initializers {
 
   POD p = (POD){1, 2};
   // CHECK-NOT: CXXBindTemporaryExpr {{.*}} 'brace_initializers::POD'
-  // CHECK: CompoundLiteralExpr {{.*}} 'POD':'brace_initializers::POD'
-  // CHECK-NEXT: InitListExpr {{.*}} 'POD':'brace_initializers::POD'
+  // CHECK: CompoundLiteralExpr {{.*}} 'brace_initializers::POD'
+  // CHECK-NEXT: InitListExpr {{.*}} 'brace_initializers::POD'
   // CHECK-NEXT: ConstantExpr {{.*}}
   // CHECK-NEXT: IntegerLiteral {{.*}} 1{{$}}
   // CHECK-NEXT: ConstantExpr {{.*}}
@@ -45,34 +45,34 @@ namespace brace_initializers {
 
   void test() {
     (void)(POD){1, 2};
-    // CHECK-NOT: CXXBindTemporaryExpr {{.*}} 'POD':'brace_initializers::POD'
-    // CHECK-NOT: ConstantExpr {{.*}} 'POD':'brace_initializers::POD'
-    // CHECK: CompoundLiteralExpr {{.*}} 'POD':'brace_initializers::POD'
-    // CHECK-NEXT: InitListExpr {{.*}} 'POD':'brace_initializers::POD'
+    // CHECK-NOT: CXXBindTemporaryExpr {{.*}} 'brace_initializers::POD'
+    // CHECK-NOT: ConstantExpr {{.*}} 'brace_initializers::POD'
+    // CHECK: CompoundLiteralExpr {{.*}} 'brace_initializers::POD'
+    // CHECK-NEXT: InitListExpr {{.*}} 'brace_initializers::POD'
     // CHECK-NEXT: IntegerLiteral {{.*}} 1{{$}}
     // CHECK-NEXT: IntegerLiteral {{.*}} 2{{$}}
 
     (void)(HasDtor){1, 2};
-    // CHECK: CXXBindTemporaryExpr {{.*}} 'HasDtor':'brace_initializers::HasDtor'
-    // CHECK-NEXT: CompoundLiteralExpr {{.*}} 'HasDtor':'brace_initializers::HasDtor'
-    // CHECK-NEXT: InitListExpr {{.*}} 'HasDtor':'brace_initializers::HasDtor'
+    // CHECK: CXXBindTemporaryExpr {{.*}} 'brace_initializers::HasDtor'
+    // CHECK-NEXT: CompoundLiteralExpr {{.*}} 'brace_initializers::HasDtor'
+    // CHECK-NEXT: InitListExpr {{.*}} 'brace_initializers::HasDtor'
     // CHECK-NEXT: IntegerLiteral {{.*}} 1{{$}}
     // CHECK-NEXT: IntegerLiteral {{.*}} 2{{$}}
 
 #if __cplusplus >= 201103L
     (void)(HasCtor){1, 2};
-    // CHECK-CXX11-NOT: CXXBindTemporaryExpr {{.*}} 'HasCtor':'brace_initializers::HasCtor'
-    // CHECK-CXX11-NOT: ConstantExpr {{.*}} 'HasCtor':'brace_initializers::HasCtor'
-    // CHECK-CXX11: CompoundLiteralExpr {{.*}} 'HasCtor':'brace_initializers::HasCtor'
-    // CHECK-CXX11-NEXT: CXXTemporaryObjectExpr {{.*}} 'HasCtor':'brace_initializers::HasCtor'
+    // CHECK-CXX11-NOT: CXXBindTemporaryExpr {{.*}} 'brace_initializers::HasCtor'
+    // CHECK-CXX11-NOT: ConstantExpr {{.*}} 'brace_initializers::HasCtor'
+    // CHECK-CXX11: CompoundLiteralExpr {{.*}} 'brace_initializers::HasCtor'
+    // CHECK-CXX11-NEXT: CXXTemporaryObjectExpr {{.*}} 'brace_initializers::HasCtor'
     // CHECK-CXX11-NEXT: IntegerLiteral {{.*}} 1{{$}}
     // CHECK-CXX11-NEXT: IntegerLiteral {{.*}} 2{{$}}
 
     (void)(HasCtorDtor){1, 2};
-    // CHECK-CXX11: CXXBindTemporaryExpr {{.*}} 'HasCtorDtor':'brace_initializers::HasCtorDtor'
-    // CHECK-CXX11-NOT: ConstantExpr {{.*}} 'HasCtorDtor':'brace_initializers::HasCtorDtor'
-    // CHECK-CXX11: CompoundLiteralExpr {{.*}} 'HasCtorDtor':'brace_initializers::HasCtorDtor'
-    // CHECK-CXX11-NEXT: CXXTemporaryObjectExpr {{.*}} 'HasCtorDtor':'brace_initializers::HasCtorDtor'
+    // CHECK-CXX11: CXXBindTemporaryExpr {{.*}} 'brace_initializers::HasCtorDtor'
+    // CHECK-CXX11-NOT: ConstantExpr {{.*}} 'brace_initializers::HasCtorDtor'
+    // CHECK-CXX11: CompoundLiteralExpr {{.*}} 'brace_initializers::HasCtorDtor'
+    // CHECK-CXX11-NEXT: CXXTemporaryObjectExpr {{.*}} 'brace_initializers::HasCtorDtor'
     // CHECK-CXX11-NEXT: IntegerLiteral {{.*}} 1{{$}}
     // CHECK-CXX11-NEXT: IntegerLiteral {{.*}} 2{{$}}
 #endif
@@ -85,7 +85,7 @@ namespace brace_initializers {
   };
 
   void testPrivateDtor() {
-    (void)(PrivateDtor){1, 2}; // expected-error {{temporary of type 'PrivateDtor' has private destructor}}
+    (void)(PrivateDtor){1, 2}; // expected-error {{temporary of type 'brace_initializers::PrivateDtor' has private destructor}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/constant-expression-cxx11.cpp b/clang/test/SemaCXX/constant-expression-cxx11.cpp
index 25d1a59311efc..b03cb7696aae5 100644
--- a/clang/test/SemaCXX/constant-expression-cxx11.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx11.cpp
@@ -877,13 +877,13 @@ static_assert(&pb1 != &pb2, "");
 static_assert(pb1 == &bot1, "");
 static_assert(pb2 == &bot2, "");
 
-constexpr Base2 &fail = (Base2&)bot1; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Derived' to type 'Base2'}}
-constexpr Base &fail2 = (Base&)*pb2; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Derived' to type 'Base'}}
+constexpr Base2 &fail = (Base2&)bot1; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Class::Derived' to type 'Class::Base2'}}
+constexpr Base &fail2 = (Base&)*pb2; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Class::Derived' to type 'Class::Base'}}
 constexpr Base2 &ok2 = (Base2&)bot2;
 static_assert(&ok2 == &derived, "");
 
-constexpr Base2 *pfail = (Base2*)pb1; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Derived' to type 'Base2'}}
-constexpr Base *pfail2 = (Base*)&bot2; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Derived' to type 'Base'}}
+constexpr Base2 *pfail = (Base2*)pb1; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Class::Derived' to type 'Class::Base2'}}
+constexpr Base *pfail2 = (Base*)&bot2; // expected-error {{constant expression}} expected-note {{cannot cast object of dynamic type 'const Class::Derived' to type 'Class::Base'}}
 constexpr Base2 *pok2 = (Base2*)pb2;
 static_assert(pok2 == &derived, "");
 static_assert(&ok2 == pok2, "");
@@ -892,18 +892,18 @@ static_assert((Derived*)(Base*)pb1 == (Derived*)pok2, "");
 
 // Core issue 903: we do not perform constant evaluation when checking for a
 // null pointer in C++11. Just check for an integer literal with value 0.
-constexpr Base *nullB = 42 - 6 * 7; // expected-error {{cannot initialize a variable of type 'Base *const' with an rvalue of type 'int'}}
+constexpr Base *nullB = 42 - 6 * 7; // expected-error {{cannot initialize a variable of type 'Class::Base *const' with an rvalue of type 'int'}}
 constexpr Base *nullB1 = 0;
 static_assert((Bottom*)nullB == 0, "");
 static_assert((Derived*)nullB1 == 0, "");
 static_assert((void*)(Bottom*)nullB1 == (void*)(Derived*)nullB1, "");
-Base *nullB2 = '\0'; // expected-error {{cannot initialize a variable of type 'Base *' with an rvalue of type 'char'}}
+Base *nullB2 = '\0'; // expected-error {{cannot initialize a variable of type 'Class::Base *' with an rvalue of type 'char'}}
 Base *nullB3 = (0);
-Base *nullB4 = false; // expected-error {{cannot initialize a variable of type 'Base *' with an rvalue of type 'bool'}}
+Base *nullB4 = false; // expected-error {{cannot initialize a variable of type 'Class::Base *' with an rvalue of type 'bool'}}
 Base *nullB5 = ((0ULL));
-Base *nullB6 = 0.; // expected-error {{cannot initialize a variable of type 'Base *' with an rvalue of type 'double'}}
+Base *nullB6 = 0.; // expected-error {{cannot initialize a variable of type 'Class::Base *' with an rvalue of type 'double'}}
 enum Null { kNull };
-Base *nullB7 = kNull; // expected-error {{cannot initialize a variable of type 'Base *' with an rvalue of type 'Class::Null'}}
+Base *nullB7 = kNull; // expected-error {{cannot initialize a variable of type 'Class::Base *' with an rvalue of type 'Class::Null'}}
 static_assert(nullB1 == (1 - 1), ""); // expected-error {{comparison between pointer and integer}}
 
 
@@ -975,8 +975,8 @@ constexpr int S::g() const {
 // The T temporary is implicitly cast to an S subobject, but we can recover the
 // T full-object via a base-to-derived cast, or a derived-to-base-casted member
 // pointer.
-static_assert(S().f(), ""); // expected-error {{constant expression}} expected-note {{in call to '&S()->f()'}}
-static_assert(S().g(), ""); // expected-error {{constant expression}} expected-note {{in call to '&S()->g()'}}
+static_assert(S().f(), ""); // expected-error {{constant expression}} expected-note {{in call to '&Temporaries::S()->f()'}}
+static_assert(S().g(), ""); // expected-error {{constant expression}} expected-note {{in call to '&Temporaries::S()->g()'}}
 static_assert(T(3).f() == 3, "");
 static_assert(T(4).g() == 4, "");
 
@@ -993,7 +993,7 @@ struct NonLiteral {
   NonLiteral();
   int f();
 };
-constexpr int k = NonLiteral().f(); // expected-error {{constant expression}} expected-note {{non-literal type 'NonLiteral'}}
+constexpr int k = NonLiteral().f(); // expected-error {{constant expression}} expected-note {{non-literal type 'Temporaries::NonLiteral'}}
 
 }
 
@@ -1250,10 +1250,10 @@ static_assert(makeComplexWrap(1,0) != complex(0, 1), "");
 namespace PR11595 {
   struct A { constexpr bool operator==(int x) const { return true; } };
   struct B { B(); A& x; };
-  static_assert(B().x == 3, "");  // expected-error {{constant expression}} expected-note {{non-literal type 'B' cannot be used in a constant expression}}
+  static_assert(B().x == 3, "");  // expected-error {{constant expression}} expected-note {{non-literal type 'PR11595::B' cannot be used in a constant expression}}
 
   constexpr bool f(int k) { // expected-error {{constexpr function never produces a constant expression}}
-    return B().x == k; // expected-note {{non-literal type 'B' cannot be used in a constant expression}}
+    return B().x == k; // expected-note {{non-literal type 'PR11595::B' cannot be used in a constant expression}}
   }
 }
 
@@ -1771,7 +1771,7 @@ namespace TypeId {
   A &g(); // cxx20_2b-note {{declared here}}
   constexpr auto &x = typeid(f());
   constexpr auto &y = typeid(g()); // expected-error{{constant expression}}
-  // cxx11-note at -1 {{typeid applied to expression of polymorphic type 'A' is not allowed in a constant expression}}
+  // cxx11-note at -1 {{typeid applied to expression of polymorphic type 'TypeId::A' is not allowed in a constant expression}}
   // expected-warning at -2 {{expression with side effects will be evaluated despite being used as an operand to 'typeid'}}
   // cxx20_2b-note at -3 {{non-constexpr function 'g' cannot be used in a constant expression}}
 }
@@ -1930,7 +1930,7 @@ namespace ConstexprConstructorRecovery {
       };
       constexpr X() noexcept {};
   protected:
-      E val{0}; // cxx11-error {{cannot initialize a member subobject of type 'E' with an rvalue of type 'int'}} cxx11-note {{here}}
+      E val{0}; // cxx11-error {{cannot initialize a member subobject of type 'ConstexprConstructorRecovery::X::E' with an rvalue of type 'int'}} cxx11-note {{here}}
   };
   // FIXME: We should avoid issuing this follow-on diagnostic.
   constexpr X x{}; // cxx11-error {{constant expression}} cxx11-note {{not initialized}}

diff  --git a/clang/test/SemaCXX/constant-expression-cxx2a.cpp b/clang/test/SemaCXX/constant-expression-cxx2a.cpp
index 6ebec5dc7e306..760821eb88373 100644
--- a/clang/test/SemaCXX/constant-expression-cxx2a.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx2a.cpp
@@ -255,7 +255,7 @@ namespace DynamicCast {
   static_assert(g.f == (void*)(F*)&g);
   static_assert(dynamic_cast<const void*>(static_cast<const D*>(&g)) == &g);
 
-  // expected-note at +1 {{reference dynamic_cast failed: 'A' is an ambiguous base class of dynamic type 'DynamicCast::G' of operand}}
+  // expected-note at +1 {{reference dynamic_cast failed: 'DynamicCast::A' is an ambiguous base class of dynamic type 'DynamicCast::G' of operand}}
   constexpr int d_a = (dynamic_cast<const A&>(static_cast<const D&>(g)), 0); // expected-error {{}}
 
   // Can navigate from A2 to its A...
@@ -263,7 +263,7 @@ namespace DynamicCast {
   // ... and from B to its A ...
   static_assert(&dynamic_cast<A&>((B&)g) == &(A&)(B&)g);
   // ... but not from D.
-  // expected-note at +1 {{reference dynamic_cast failed: 'A' is an ambiguous base class of dynamic type 'DynamicCast::G' of operand}}
+  // expected-note at +1 {{reference dynamic_cast failed: 'DynamicCast::A' is an ambiguous base class of dynamic type 'DynamicCast::G' of operand}}
   static_assert(&dynamic_cast<A&>((D&)g) == &(A&)(B&)g); // expected-error {{}}
 
   // Can cast from A2 to sibling class D.
@@ -274,13 +274,13 @@ namespace DynamicCast {
   constexpr int e_f = (dynamic_cast<F&>((E&)g), 0); // expected-error {{}}
 
   // Cannot cast from B to private sibling E.
-  // expected-note at +1 {{reference dynamic_cast failed: 'E' is a non-public base class of dynamic type 'DynamicCast::G' of operand}}
+  // expected-note at +1 {{reference dynamic_cast failed: 'DynamicCast::E' is a non-public base class of dynamic type 'DynamicCast::G' of operand}}
   constexpr int b_e = (dynamic_cast<E&>((B&)g), 0); // expected-error {{}}
 
   struct Unrelated { virtual void unrelated(); };
-  // expected-note at +1 {{reference dynamic_cast failed: dynamic type 'DynamicCast::G' of operand does not have a base class of type 'Unrelated'}}
+  // expected-note at +1 {{reference dynamic_cast failed: dynamic type 'DynamicCast::G' of operand does not have a base class of type 'DynamicCast::Unrelated'}}
   constexpr int b_unrelated = (dynamic_cast<Unrelated&>((B&)g), 0); // expected-error {{}}
-  // expected-note at +1 {{reference dynamic_cast failed: dynamic type 'DynamicCast::G' of operand does not have a base class of type 'Unrelated'}}
+  // expected-note at +1 {{reference dynamic_cast failed: dynamic type 'DynamicCast::G' of operand does not have a base class of type 'DynamicCast::Unrelated'}}
   constexpr int e_unrelated = (dynamic_cast<Unrelated&>((E&)g), 0); // expected-error {{}}
 }
 
@@ -1031,7 +1031,7 @@ namespace delete_random_things {
   int n; // expected-note {{declared here}}
   static_assert((delete &n, true)); // expected-error {{}} expected-note {{delete of pointer '&n' that does not point to a heap-allocated object}}
   struct A { int n; };
-  static_assert((delete &(new A)->n, true)); // expected-error {{}} expected-note {{delete of pointer to subobject '&{*new A#0}.n'}}
+  static_assert((delete &(new A)->n, true)); // expected-error {{}} expected-note {{delete of pointer to subobject '&{*new delete_random_things::A#0}.n'}}
   static_assert((delete (new int + 1), true)); // expected-error {{}} expected-note {{delete of pointer '&{*new int#0} + 1' that does not point to complete object}}
   static_assert((delete[] (new int[3] + 1), true)); // expected-error {{}} expected-note {{delete of pointer to subobject '&{*new int[3]#0}[1]'}}
   static_assert((delete &(int&)(int&&)0, true)); // expected-error {{}} expected-note {{delete of pointer '&0' that does not point to a heap-allocated object}} expected-note {{temporary created here}}

diff  --git a/clang/test/SemaCXX/constant-expression.cpp b/clang/test/SemaCXX/constant-expression.cpp
index 02a9e14cd4fe7..56417b6a2e524 100644
--- a/clang/test/SemaCXX/constant-expression.cpp
+++ b/clang/test/SemaCXX/constant-expression.cpp
@@ -121,7 +121,7 @@ namespace FloatConvert {
 // PR12626
 namespace test3 {
   struct X; // expected-note {{forward declaration of 'test3::X'}}
-  struct Y { bool b; X x; }; // expected-error {{field has incomplete type 'X'}}
+  struct Y { bool b; X x; }; // expected-error {{field has incomplete type 'test3::X'}}
   int f() { return Y().b; }
 }
 

diff  --git a/clang/test/SemaCXX/constexpr-default-init-value-crash.cpp b/clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
index 03957cee510f2..d20d28d199d41 100644
--- a/clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
+++ b/clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
@@ -8,7 +8,7 @@ struct Foo {        // expected-note 2{{candidate constructor}}
 };
 
 constexpr Foo getFoo() {
-  Foo e = 123; // expected-error {{no viable conversion from 'int' to 'Foo'}}
+  Foo e = 123; // expected-error {{no viable conversion from 'int' to 'NoCrash::Foo'}}
   return e;
 }
 }

diff  --git a/clang/test/SemaCXX/constructor-initializer.cpp b/clang/test/SemaCXX/constructor-initializer.cpp
index bf95e7c64beb5..010f90b59cb07 100644
--- a/clang/test/SemaCXX/constructor-initializer.cpp
+++ b/clang/test/SemaCXX/constructor-initializer.cpp
@@ -29,7 +29,7 @@ class D : public C {
   D() : B(), C() { }
 };
 
-class E : public D, public B {  // expected-warning{{direct base 'B' is inaccessible due to ambiguity:\n    class E -> D -> C -> B\n    class E -> B}}
+class E : public D, public B {  // expected-warning{{direct base 'B' is inaccessible due to ambiguity:\n    class E -> class D -> class C -> class B\n    class E -> class B}}
 public:
   E() : B(), D() { } // expected-error{{base class initializer 'B' names both a direct base class and an inherited virtual base class}}
 };
@@ -211,7 +211,7 @@ struct A {
 
 struct B : virtual A { };
 
-  struct C : A, B { }; // expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    struct Test2::C -> A\n    struct Test2::C -> B -> A}}
+  struct C : A, B { }; // expected-warning{{direct base 'Test2::A' is inaccessible due to ambiguity:\n    struct Test2::C -> struct Test2::A\n    struct Test2::C -> struct Test2::B -> struct Test2::A}}
 
 C f(C c) {
   return c;
@@ -309,18 +309,18 @@ namespace PR14073 {
 namespace PR10758 {
 struct A;
 struct B {
-  B (A const &); // expected-note 2 {{candidate constructor not viable: no known conversion from 'const B' to 'const A &' for 1st argument}}
-  B (B &); // expected-note 2 {{candidate constructor not viable: 1st argument ('const B') would lose const qualifier}}
+  B (A const &); // expected-note 2 {{candidate constructor not viable: no known conversion from 'const PR10758::B' to 'const PR10758::A &' for 1st argument}}
+  B (B &); // expected-note 2 {{candidate constructor not viable: 1st argument ('const PR10758::B') would lose const qualifier}}
 };
 struct A {
   A (B); // expected-note 2 {{passing argument to parameter here}}
 };
 
 B f(B const &b) {
-  return b; // expected-error {{no matching constructor for initialization of 'B'}}
+  return b; // expected-error {{no matching constructor for initialization of 'PR10758::B'}}
 }
 
 A f2(const B &b) {
-  return b; // expected-error {{no matching constructor for initialization of 'B'}}
+  return b; // expected-error {{no matching constructor for initialization of 'PR10758::B'}}
 }
 }

diff  --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp
index 0d6c1f3064dd8..4d89400813c32 100644
--- a/clang/test/SemaCXX/conversion-function.cpp
+++ b/clang/test/SemaCXX/conversion-function.cpp
@@ -235,7 +235,7 @@ namespace smart_ptr {
   Y make_Y();
 
   X f() {
-    X x = make_Y(); // expected-error{{no viable conversion from 'Y' to 'X'}}
+    X x = make_Y(); // expected-error{{no viable conversion from 'smart_ptr::Y' to 'smart_ptr::X'}}
     X x2(make_Y());
     return X(Y());
   }
@@ -348,7 +348,7 @@ namespace rdar8018274 {
   };
 
   void test2(UeberDerived ud) {
-    int i = ud; // expected-error{{ambiguous conversion from derived class 'UeberDerived' to base class 'rdar8018274::Base'}}
+    int i = ud; // expected-error{{ambiguous conversion from derived class 'rdar8018274::UeberDerived' to base class 'rdar8018274::Base'}}
   }
 
   struct Base2 {

diff  --git a/clang/test/SemaCXX/copy-initialization.cpp b/clang/test/SemaCXX/copy-initialization.cpp
index 6fbf980541b3d..29c91ba856359 100644
--- a/clang/test/SemaCXX/copy-initialization.cpp
+++ b/clang/test/SemaCXX/copy-initialization.cpp
@@ -41,7 +41,7 @@ namespace PR6757 {
   void f(Foo);
 
   void g(Foo foo) {
-    f(Bar()); // expected-error{{no viable constructor copying parameter of type 'const Foo'}}
+    f(Bar()); // expected-error{{no viable constructor copying parameter of type 'const PR6757::Foo'}}
     f(foo);
   }
 }

diff  --git a/clang/test/SemaCXX/cstyle-cast.cpp b/clang/test/SemaCXX/cstyle-cast.cpp
index 89f187768d0e4..32a6e205f769d 100644
--- a/clang/test/SemaCXX/cstyle-cast.cpp
+++ b/clang/test/SemaCXX/cstyle-cast.cpp
@@ -127,8 +127,8 @@ void t_529_5_8()
   (void)(C1&)(*((A*)0)); // expected-error {{cannot cast 'A' to 'C1 &' via virtual base 'B'}}
   (void)(D*)((A*)0); // expected-error {{cannot cast 'A *' to 'D *' via virtual base 'B'}}
   (void)(D&)(*((A*)0)); // expected-error {{cannot cast 'A' to 'D &' via virtual base 'B'}}
-  (void)(H*)((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    A -> B -> G2 -> struct H}}
-  (void)(H&)(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    A -> B -> G2 -> struct H}}
+  (void)(H*)((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
+  (void)(H&)(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
 
   // TODO: Test DR427. This requires user-defined conversions, though.
 }

diff  --git a/clang/test/SemaCXX/cxx0x-class.cpp b/clang/test/SemaCXX/cxx0x-class.cpp
index a612a5c07e6ed..c0e80daaba5d9 100644
--- a/clang/test/SemaCXX/cxx0x-class.cpp
+++ b/clang/test/SemaCXX/cxx0x-class.cpp
@@ -10,7 +10,7 @@ class C {
 
   int i = 0;
   static int si = 0; // expected-error {{non-const static data member must be initialized out of line}}
-  static const NestedC ci = 0; // expected-error {{static data member of type 'const NestedC' must be initialized out of line}}
+  static const NestedC ci = 0; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}}
   static const int nci = vs; // expected-error {{in-class initializer for static data member is not a constant expression}}
   static const int vi = 0;
   static const volatile int cvi = 0; // expected-error {{static const volatile data member must be initialized out of line}}

diff  --git a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp
index 0350aa567f147..e25b2cb25ee6b 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp
@@ -127,7 +127,7 @@ namespace multidimensional_array {
 
 namespace array_addressof {
   using T = int[5];
-  T *p = &T{1,2,3,4,5}; // expected-error {{taking the address of a temporary object of type 'T' (aka 'int[5]')}}
+  T *p = &T{1,2,3,4,5}; // expected-error {{taking the address of a temporary object of type 'array_addressof::T' (aka 'int[5]')}}
 }
 
 namespace PR24816 {

diff  --git a/clang/test/SemaCXX/cxx0x-initializer-constructor.cpp b/clang/test/SemaCXX/cxx0x-initializer-constructor.cpp
index 1b3f1761e4f3c..92e3676954a21 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-constructor.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-constructor.cpp
@@ -122,12 +122,12 @@ namespace objects {
   }
 
   struct B { // expected-note 2 {{candidate constructor}}
-    B(C, int, C); // expected-note {{candidate constructor not viable: cannot convert initializer list argument to 'C'}}
+    B(C, int, C); // expected-note {{candidate constructor not viable: cannot convert initializer list argument to 'objects::C'}}
   };
 
   void nested_init() {
     B b1{{1, 1.0}, 2, {3, 4}};
-    B b2{{1, 1.0, 4}, 2, {3, 4}}; // expected-error {{no matching constructor for initialization of 'B'}}
+    B b2{{1, 1.0, 4}, 2, {3, 4}}; // expected-error {{no matching constructor for initialization of 'objects::B'}}
   }
 
   void overloaded_call() {
@@ -282,7 +282,7 @@ namespace PR12498 {
 
   static void bar(C* c)
   {
-    c->foo({ nullptr, 1 }); // expected-error{{initialization of incomplete type 'const ArrayRef'}}
+    c->foo({ nullptr, 1 }); // expected-error{{initialization of incomplete type 'const PR12498::ArrayRef'}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/cxx0x-initializer-references.cpp b/clang/test/SemaCXX/cxx0x-initializer-references.cpp
index e2510bc039e5d..ce029d7f07321 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-references.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-references.cpp
@@ -76,7 +76,7 @@ namespace reference {
   void edge_cases() {
     int const &b({0}); // expected-error {{cannot initialize reference type 'const int &' with a parenthesized initializer list}}
     const int (&arr)[3] ({1, 2, 3}); // expected-error {{cannot initialize reference type 'const int (&)[3]' with a parenthesized initializer list}}
-    const X &x({}); // expected-error {{cannot initialize reference type 'const X &' with a parenthesized initializer list}}
+    const X &x({}); // expected-error {{cannot initialize reference type 'const reference::X &' with a parenthesized initializer list}}
   }
 
   template<typename T> void dependent_edge_cases() {
@@ -112,7 +112,7 @@ namespace b7891773 {
 namespace inner_init {
   struct A { int n; };
   struct B { A &&r; };
-  B b1 { 0 }; // expected-error {{reference to type 'A' could not bind to an rvalue of type 'int'}}
+  B b1 { 0 }; // expected-error {{reference to type 'inner_init::A' could not bind to an rvalue of type 'int'}}
   B b2 { { 0 } };
   B b3 { { { 0 } } }; // expected-warning {{braces around scalar init}}
 
@@ -122,7 +122,7 @@ namespace inner_init {
   D d1 { 0 }; // ok, 0 implicitly converts to C
   D d2 { { 0 } }; // ok, { 0 } calls C(0)
   D d3 { { { 0 } } }; // ok, { { 0 } } calls C({ 0 }), expected-warning {{braces around scalar init}}
-  D d4 { { { { 0 } } } }; // expected-error {{no matching constructor for initialization of 'C &&'}}
+  D d4 { { { { 0 } } } }; // expected-error {{no matching constructor for initialization of 'inner_init::C &&'}}
 
   struct E { explicit E(int); }; // expected-note 2{{here}}
   struct F { E &&r; };
@@ -134,7 +134,7 @@ namespace inner_init {
 namespace PR20844 {
   struct A {};
   struct B { operator A&(); } b;
-  A &a{b}; // expected-error {{excess elements}} expected-note {{in initialization of temporary of type 'A'}}
+  A &a{b}; // expected-error {{excess elements}} expected-note {{in initialization of temporary of type 'PR20844::A'}}
 }
 
 namespace PR21834 {

diff  --git a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
index 80baefa7c8b8e..24500b684d586 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
@@ -327,7 +327,7 @@ namespace update_rbrace_loc_crash {
   struct A {};
   template <typename T, typename F, int... I>
   std::initializer_list<T> ExplodeImpl(F p1, A<int, I...>) {
-    // expected-error at +1 {{reference to incomplete type 'const Incomplete' could not bind to an rvalue of type 'void'}}
+    // expected-error at +1 {{reference to incomplete type 'const update_rbrace_loc_crash::Incomplete' could not bind to an rvalue of type 'void'}}
     return {p1(I)...};
   }
   template <typename T, int N, typename F>

diff  --git a/clang/test/SemaCXX/cxx0x-nontrivial-union.cpp b/clang/test/SemaCXX/cxx0x-nontrivial-union.cpp
index ad1f09fee33f0..f0927768f3fc0 100644
--- a/clang/test/SemaCXX/cxx0x-nontrivial-union.cpp
+++ b/clang/test/SemaCXX/cxx0x-nontrivial-union.cpp
@@ -142,5 +142,5 @@ namespace pr16061 {
     };
   };
 
-  Test2<X> t2x;  // expected-error {{call to implicitly-deleted default constructor of 'Test2<X>'}}
+  Test2<X> t2x;  // expected-error {{call to implicitly-deleted default constructor of 'Test2<pr16061::X>'}}
 }

diff  --git a/clang/test/SemaCXX/cxx11-inheriting-ctors.cpp b/clang/test/SemaCXX/cxx11-inheriting-ctors.cpp
index b855fb47c7d63..39582660984b8 100644
--- a/clang/test/SemaCXX/cxx11-inheriting-ctors.cpp
+++ b/clang/test/SemaCXX/cxx11-inheriting-ctors.cpp
@@ -94,7 +94,7 @@ namespace PR31606 {
 
   struct A : Base {
     using Base::Base;
-    bool operator==(A const &) const; // expected-note {{no known conversion from 'B' to 'const A' for 1st argument}}
+    bool operator==(A const &) const; // expected-note {{no known conversion from 'PR31606::B' to 'const PR31606::A' for 1st argument}}
   };
 
   struct B : Base {

diff  --git a/clang/test/SemaCXX/cxx17-compat.cpp b/clang/test/SemaCXX/cxx17-compat.cpp
index d53d80f0d42ca..41a465ac613ef 100644
--- a/clang/test/SemaCXX/cxx17-compat.cpp
+++ b/clang/test/SemaCXX/cxx17-compat.cpp
@@ -126,8 +126,8 @@ namespace NTTP {
   struct A {};
   template<A> struct Class {};
 #if __cplusplus <= 201703L
-  // expected-error at -2 {{non-type template parameter cannot have type 'A' before C++20}}
+  // expected-error at -2 {{non-type template parameter cannot have type 'NTTP::A' before C++20}}
 #else
-  // expected-warning at -4 {{non-type template parameter of type 'A' is incompatible with C++ standards before C++20}}
+  // expected-warning at -4 {{non-type template parameter of type 'NTTP::A' is incompatible with C++ standards before C++20}}
 #endif
 }

diff  --git a/clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp b/clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp
index b066f9ab63410..19ad70de44fdb 100644
--- a/clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp
+++ b/clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp
@@ -88,13 +88,13 @@ namespace extended_examples {
 
 //expected-error at 71 {{cannot overload a member function without a ref-qualifier with a member function with ref-qualifier '&&'}}
 //expected-note at 70 {{previous declaration is here}}
-//expected-error at 82 {{statement requires expression of integer type ('A2' invalid)}}
-//expected-error at 83 {{statement requires expression of integer type ('A3' invalid)}}
-//expected-error at 84 {{statement requires expression of integer type ('A4' invalid)}}
+//expected-error at 82 {{statement requires expression of integer type ('extended_examples::A2' invalid)}}
+//expected-error at 83 {{statement requires expression of integer type ('extended_examples::A3' invalid)}}
+//expected-error at 84 {{statement requires expression of integer type ('extended_examples::A4' invalid)}}
 
 #ifdef CXX1Y
-//expected-error at 81 {{statement requires expression of integer type ('A1' invalid)}}
-//expected-error at 85 {{statement requires expression of integer type ('B2' invalid)}}
+//expected-error at 81 {{statement requires expression of integer type ('extended_examples::A1' invalid)}}
+//expected-error at 85 {{statement requires expression of integer type ('extended_examples::B2' invalid)}}
 #else
 //expected-error at 81 {{'this' argument to member function 'operator int' is an lvalue, but function has rvalue ref-qualifier}} expected-note at 54 {{'operator int' declared here}}
 //expected-error at 85 {{'this' argument to member function 'operator int' is an lvalue, but function has rvalue ref-qualifier}} expected-note at 75 {{'operator int' declared here}}
@@ -144,10 +144,10 @@ namespace extended_examples_cxx1y {
   }
 }
 
-//expected-error at 142 {{statement requires expression of integer type ('C' invalid)}}
+//expected-error at 142 {{statement requires expression of integer type ('extended_examples_cxx1y::C' invalid)}}
 
 #ifdef CXX1Y
-//expected-error at 139 {{statement requires expression of integer type ('A2' invalid)}}
+//expected-error at 139 {{statement requires expression of integer type ('extended_examples_cxx1y::A2' invalid)}}
 #else
 //expected-error at 138 {{'this' argument to member function 'operator int' is an lvalue, but function has rvalue ref-qualifier}} expected-note at 106 {{'operator int' declared here}}
 //expected-error at 139 {{'this' argument to member function 'operator int' is an lvalue, but function has rvalue ref-qualifier}} expected-note at 111 {{'operator int' declared here}}

diff  --git a/clang/test/SemaCXX/cxx2a-destroying-delete.cpp b/clang/test/SemaCXX/cxx2a-destroying-delete.cpp
index 349e6e9538a4c..1416fa24ff52f 100644
--- a/clang/test/SemaCXX/cxx2a-destroying-delete.cpp
+++ b/clang/test/SemaCXX/cxx2a-destroying-delete.cpp
@@ -42,9 +42,9 @@ namespace convert_param {
   };
   struct B : private A { using A::operator delete; }; // expected-note 2{{declared private here}}
   struct C : B {};
-  void delete_C(C *c) { delete c; } // expected-error {{cannot cast 'C' to its private base class 'A'}}
+  void delete_C(C *c) { delete c; } // expected-error {{cannot cast 'convert_param::C' to its private base class 'convert_param::A'}}
 
-  // expected-error at -7 {{cannot cast 'convert_param::D' to its private base class 'A'}}
+  // expected-error at -7 {{cannot cast 'convert_param::D' to its private base class 'convert_param::A'}}
   struct D : B { virtual ~D() {} }; // expected-note {{while checking implicit 'delete this' for virtual destructor}}
 }
 
@@ -120,7 +120,7 @@ namespace first_param_conversion {
   struct D : B {};
   struct E : C, D {};
   void g(E *e) {
-    delete e; // expected-error {{ambiguous conversion from derived class 'E' to base class 'B':}}
+    delete e; // expected-error {{ambiguous conversion from derived class 'first_param_conversion::E' to base class 'first_param_conversion::B':}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/cxx98-compat-flags.cpp b/clang/test/SemaCXX/cxx98-compat-flags.cpp
index 1fdb50c7fb287..5e07964335349 100644
--- a/clang/test/SemaCXX/cxx98-compat-flags.cpp
+++ b/clang/test/SemaCXX/cxx98-compat-flags.cpp
@@ -28,10 +28,10 @@ namespace CopyCtorIssues {
     Private p; // expected-note {{copy constructor of 'Deleted' is implicitly deleted because field 'p' has an inaccessible copy constructor}}
   };
 
-  const Private &a = Private(); // expected-warning {{copying variable of type 'Private' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
-  const NoViable &b = NoViable(); // expected-warning {{copying variable of type 'NoViable' when binding a reference to a temporary would find no viable constructor in C++98}}
-  const Ambiguous &c = Ambiguous(); // expected-warning {{copying variable of type 'Ambiguous' when binding a reference to a temporary would find ambiguous constructors in C++98}}
-  const Deleted &d = Deleted(); // expected-warning {{copying variable of type 'Deleted' when binding a reference to a temporary would invoke a deleted constructor in C++98}}
+  const Private &a = Private(); // expected-warning {{copying variable of type 'CopyCtorIssues::Private' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
+  const NoViable &b = NoViable(); // expected-warning {{copying variable of type 'CopyCtorIssues::NoViable' when binding a reference to a temporary would find no viable constructor in C++98}}
+  const Ambiguous &c = Ambiguous(); // expected-warning {{copying variable of type 'CopyCtorIssues::Ambiguous' when binding a reference to a temporary would find ambiguous constructors in C++98}}
+  const Deleted &d = Deleted(); // expected-warning {{copying variable of type 'CopyCtorIssues::Deleted' when binding a reference to a temporary would invoke a deleted constructor in C++98}}
 
   int n = 0b00100101001; // expected-warning {{binary integer literals are incompatible with C++ standards before C++14}}
 }

diff  --git a/clang/test/SemaCXX/cxx98-compat-pedantic.cpp b/clang/test/SemaCXX/cxx98-compat-pedantic.cpp
index 3a4776591814d..74aa890b8c62d 100644
--- a/clang/test/SemaCXX/cxx98-compat-pedantic.cpp
+++ b/clang/test/SemaCXX/cxx98-compat-pedantic.cpp
@@ -67,10 +67,10 @@ namespace CopyCtorIssues {
     Private p; // expected-note {{implicitly deleted}}
   };
 
-  const Private &a = Private(); // expected-warning {{copying variable of type 'Private' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
-  const NoViable &b = NoViable(); // expected-warning {{copying variable of type 'NoViable' when binding a reference to a temporary would find no viable constructor in C++98}}
+  const Private &a = Private(); // expected-warning {{copying variable of type 'CopyCtorIssues::Private' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
+  const NoViable &b = NoViable(); // expected-warning {{copying variable of type 'CopyCtorIssues::NoViable' when binding a reference to a temporary would find no viable constructor in C++98}}
 #if !CXX98
-  const Ambiguous &c = Ambiguous(); // expected-warning {{copying variable of type 'Ambiguous' when binding a reference to a temporary would find ambiguous constructors in C++98}}
+  const Ambiguous &c = Ambiguous(); // expected-warning {{copying variable of type 'CopyCtorIssues::Ambiguous' when binding a reference to a temporary would find ambiguous constructors in C++98}}
 #endif
-  const Deleted &d = Deleted(); // expected-warning {{copying variable of type 'Deleted' when binding a reference to a temporary would invoke a deleted constructor in C++98}}
+  const Deleted &d = Deleted(); // expected-warning {{copying variable of type 'CopyCtorIssues::Deleted' when binding a reference to a temporary would invoke a deleted constructor in C++98}}
 }

diff  --git a/clang/test/SemaCXX/decl-init-ref.cpp b/clang/test/SemaCXX/decl-init-ref.cpp
index 7262b0e46446c..e0ff2daf07928 100644
--- a/clang/test/SemaCXX/decl-init-ref.cpp
+++ b/clang/test/SemaCXX/decl-init-ref.cpp
@@ -39,7 +39,7 @@ namespace PR16502 {
 
 namespace IncompleteTest {
   struct String;
-  // expected-error at +1 {{reference to incomplete type 'const String' could not bind to an lvalue of type 'const char[1]'}}
+  // expected-error at +1 {{reference to incomplete type 'const IncompleteTest::String' could not bind to an lvalue of type 'const char[1]'}}
   void takeString(const String& = "") {} // expected-note {{passing argument to parameter here}}
   void test() {
         takeString();

diff  --git a/clang/test/SemaCXX/default-assignment-operator.cpp b/clang/test/SemaCXX/default-assignment-operator.cpp
index 023af68ae5350..57cb77d6cb461 100644
--- a/clang/test/SemaCXX/default-assignment-operator.cpp
+++ b/clang/test/SemaCXX/default-assignment-operator.cpp
@@ -154,7 +154,7 @@ namespace ProtectedCheck {
 #if __cplusplus <= 199711L
   // expected-note at -2 {{implicit copy assignment operator}}
 #else
-  // expected-error at -4 {{object of type 'Z' cannot be assigned because its copy assignment operator is implicitly deleted}}
+  // expected-error at -4 {{object of type 'ProtectedCheck::Z' cannot be assigned because its copy assignment operator is implicitly deleted}}
 #endif
 }
 
@@ -165,7 +165,7 @@ namespace MultiplePaths {
 
   struct X1 : public virtual X0 { };
 
-  struct X2 : X0, X1 { }; // expected-warning{{direct base 'X0' is inaccessible due to ambiguity:\n    struct MultiplePaths::X2 -> X0\n    struct MultiplePaths::X2 -> X1 -> X0}}
+  struct X2 : X0, X1 { }; // expected-warning{{direct base 'MultiplePaths::X0' is inaccessible due to ambiguity:\n    struct MultiplePaths::X2 -> struct MultiplePaths::X0\n    struct MultiplePaths::X2 -> struct MultiplePaths::X1 -> struct MultiplePaths::X0}}
 
   void f(X2 x2) { x2 = x2; }
 }

diff  --git a/clang/test/SemaCXX/derived-to-base-ambig.cpp b/clang/test/SemaCXX/derived-to-base-ambig.cpp
index 2bd7da210a83f..5d1d56b766144 100644
--- a/clang/test/SemaCXX/derived-to-base-ambig.cpp
+++ b/clang/test/SemaCXX/derived-to-base-ambig.cpp
@@ -14,8 +14,8 @@ class A2 : public Object2 { };
 class B2 : public virtual A2 { };
 class C2 : virtual public A2 { };
 class D2 : public B2, public C2 { };
-class E2 : public D2, public C2, public virtual A2 { }; // expected-warning{{direct base 'C2' is inaccessible due to ambiguity:\n    class E2 -> D2 -> C2\n    class E2 -> C2}}
-class F2 : public E2, public A2 { }; // expected-warning{{direct base 'A2' is inaccessible due to ambiguity:\n    class F2 -> E2 -> D2 -> B2 -> A2\n    class F2 -> A2}}
+class E2 : public D2, public C2, public virtual A2 { }; // expected-warning{{direct base 'C2' is inaccessible due to ambiguity:\n    class E2 -> class D2 -> class C2\n    class E2 -> class C2}}
+class F2 : public E2, public A2 { }; // expected-warning{{direct base 'A2' is inaccessible due to ambiguity:\n    class F2 -> class E2 -> class D2 -> class B2 -> class A2\n    class F2 -> class A2}}
 
 void g(E2* e2, F2* f2) {
   Object2* o2;

diff  --git a/clang/test/SemaCXX/destructor.cpp b/clang/test/SemaCXX/destructor.cpp
index 040d13ed99143..bc0048621f766 100644
--- a/clang/test/SemaCXX/destructor.cpp
+++ b/clang/test/SemaCXX/destructor.cpp
@@ -439,8 +439,8 @@ namespace PR7900 {
   void foo() {
     B b;
     b.~B();
-    b.~A(); // expected-error{{destructor type 'PR7900::A' in object destruction expression does not match the type 'B' of the object being destroyed}}
-    (&b)->~A(); // expected-error{{destructor type 'PR7900::A' in object destruction expression does not match the type 'B' of the object being destroyed}}
+    b.~A(); // expected-error{{destructor type 'PR7900::A' in object destruction expression does not match the type 'PR7900::B' of the object being destroyed}}
+    (&b)->~A(); // expected-error{{destructor type 'PR7900::A' in object destruction expression does not match the type 'PR7900::B' of the object being destroyed}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/dynamic-cast.cpp b/clang/test/SemaCXX/dynamic-cast.cpp
index 36b4ccaba3827..6ab7823a0938b 100644
--- a/clang/test/SemaCXX/dynamic-cast.cpp
+++ b/clang/test/SemaCXX/dynamic-cast.cpp
@@ -59,8 +59,8 @@ void up()
   //(void)dynamic_cast<A&>(*((D*)0));
 
   // Ambiguous
-  (void)dynamic_cast<A*>((F*)0); // expected-error {{ambiguous conversion from derived class 'F' to base class 'A':\n    struct F -> B -> A\n    struct F -> E -> A}}
-  (void)dynamic_cast<A&>(*((F*)0)); // expected-error {{ambiguous conversion from derived class 'F' to base class 'A':\n    struct F -> B -> A\n    struct F -> E -> A}}
+  (void)dynamic_cast<A*>((F*)0); // expected-error {{ambiguous conversion from derived class 'F' to base class 'A':\n    struct F -> struct B -> struct A\n    struct F -> struct E -> struct A}}
+  (void)dynamic_cast<A&>(*((F*)0)); // expected-error {{ambiguous conversion from derived class 'F' to base class 'A':\n    struct F -> struct B -> struct A\n    struct F -> struct E -> struct A}}
 }
 
 void poly()

diff  --git a/clang/test/SemaCXX/elaborated-type-specifier.cpp b/clang/test/SemaCXX/elaborated-type-specifier.cpp
index a96e696edcc6c..66693ec3d118f 100644
--- a/clang/test/SemaCXX/elaborated-type-specifier.cpp
+++ b/clang/test/SemaCXX/elaborated-type-specifier.cpp
@@ -27,7 +27,7 @@ namespace NS {
 
 void test_X_elab(NS::X x) {
   struct S4 *s4 = 0; // expected-note{{'S4' is not defined, but forward declared here; conversion would be valid if it was derived from 'NS::S4'}}
-  x.test_elab2(s4); // expected-error{{cannot initialize a parameter of type 'S4 *' (aka 'NS::S4 *') with an lvalue of type 'struct S4 *'}}
+  x.test_elab2(s4); // expected-error{{cannot initialize a parameter of type 'NS::S4 *' with an lvalue of type 'struct S4 *'}}
 }
 
 namespace NS {

diff  --git a/clang/test/SemaCXX/enum-scoped.cpp b/clang/test/SemaCXX/enum-scoped.cpp
index 2be234e80eea3..4a9eb9cef892d 100644
--- a/clang/test/SemaCXX/enum-scoped.cpp
+++ b/clang/test/SemaCXX/enum-scoped.cpp
@@ -128,8 +128,8 @@ namespace rdar9366066 {
   enum class X : unsigned { value };
 
   void f(X x) {
-    x % X::value; // expected-error{{invalid operands to binary expression ('X' and 'rdar9366066::X')}}
-    x % 8; // expected-error{{invalid operands to binary expression ('X' and 'int')}}
+    x % X::value; // expected-error{{invalid operands to binary expression ('rdar9366066::X' and 'rdar9366066::X')}}
+    x % 8; // expected-error{{invalid operands to binary expression ('rdar9366066::X' and 'int')}}
   }
 }
 
@@ -285,7 +285,7 @@ namespace PR15633 {
 
 namespace PR16900 {
   enum class A;
-  A f(A a) { return -a; } // expected-error {{invalid argument type 'A' to unary expression}}
+  A f(A a) { return -a; } // expected-error {{invalid argument type 'PR16900::A' to unary expression}}
 }
 
 namespace PR18551 {
@@ -323,7 +323,7 @@ namespace test11 {
   typedef E E2;
   E2 f1() { return E::a; }
 
-  bool f() { return !f1(); } // expected-error {{invalid argument type 'E2' (aka 'test11::E') to unary expression}}
+  bool f() { return !f1(); } // expected-error {{invalid argument type 'test11::E2' (aka 'test11::E') to unary expression}}
 }
 
 namespace PR35586 {

diff  --git a/clang/test/SemaCXX/enum.cpp b/clang/test/SemaCXX/enum.cpp
index 1013d5dff1167..d35ae99f52e09 100644
--- a/clang/test/SemaCXX/enum.cpp
+++ b/clang/test/SemaCXX/enum.cpp
@@ -78,8 +78,8 @@ namespace PR7051 {
   enum E { e0 };
   void f() {
     E e;
-    e = 1; // expected-error{{assigning to 'E' from incompatible type 'int'}}
-    e |= 1; // expected-error{{assigning to 'E' from incompatible type 'int'}}
+    e = 1; // expected-error{{assigning to 'PR7051::E' from incompatible type 'int'}}
+    e |= 1; // expected-error{{assigning to 'PR7051::E' from incompatible type 'int'}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/exceptions.cpp b/clang/test/SemaCXX/exceptions.cpp
index bd56fbf02ee02..61c3e4bccb2be 100644
--- a/clang/test/SemaCXX/exceptions.cpp
+++ b/clang/test/SemaCXX/exceptions.cpp
@@ -173,15 +173,15 @@ struct D2 : D {};
 
 void f1() {
   try {
-  } catch (B &b) { // expected-note {{for type 'B &'}}
-  } catch (D &d) { // expected-warning {{exception of type 'D &' will be caught by earlier handler}}
+  } catch (B &b) { // expected-note {{for type 'HandlerInversion::B &'}}
+  } catch (D &d) { // expected-warning {{exception of type 'HandlerInversion::D &' will be caught by earlier handler}}
   }
 }
 
 void f2() {
   try {
-  } catch (B *b) { // expected-note {{for type 'B *'}}
-  } catch (D *d) { // expected-warning {{exception of type 'D *' will be caught by earlier handler}}
+  } catch (B *b) { // expected-note {{for type 'HandlerInversion::B *'}}
+  } catch (D *d) { // expected-warning {{exception of type 'HandlerInversion::D *' will be caught by earlier handler}}
   }
 }
 
@@ -207,8 +207,8 @@ void f5() {
 
 void f6() {
   try {
-  } catch (B &b) {  // expected-note {{for type 'B &'}}
-  } catch (D2 &d) {  // expected-warning {{exception of type 'D2 &' will be caught by earlier handler}}
+  } catch (B &b) {  // expected-note {{for type 'HandlerInversion::B &'}}
+  } catch (D2 &d) {  // expected-warning {{exception of type 'HandlerInversion::D2 &' will be caught by earlier handler}}
   }
 }
 
@@ -226,18 +226,18 @@ void f7() {
 
 void f8() {
   try {
-  } catch (const B &b) {  // expected-note {{for type 'const B &'}}
-  } catch (D2 &d) {  // expected-warning {{exception of type 'D2 &' will be caught by earlier handler}}
+  } catch (const B &b) {  // expected-note {{for type 'const HandlerInversion::B &'}}
+  } catch (D2 &d) {  // expected-warning {{exception of type 'HandlerInversion::D2 &' will be caught by earlier handler}}
   }
 
   try {
-  } catch (B &b) {  // expected-note {{for type 'B &'}}
-  } catch (const D2 &d) {  // expected-warning {{exception of type 'const D2 &' will be caught by earlier handler}}
+  } catch (B &b) {  // expected-note {{for type 'HandlerInversion::B &'}}
+  } catch (const D2 &d) {  // expected-warning {{exception of type 'const HandlerInversion::D2 &' will be caught by earlier handler}}
   }
 
   try {
-  } catch (B b) { // expected-note {{for type 'B'}}
-  } catch (D &d) { // expected-warning {{exception of type 'D &' will be caught by earlier handler}}
+  } catch (B b) { // expected-note {{for type 'HandlerInversion::B'}}
+  } catch (D &d) { // expected-warning {{exception of type 'HandlerInversion::D &' will be caught by earlier handler}}
   }
 }
 }

diff  --git a/clang/test/SemaCXX/for-range-examples.cpp b/clang/test/SemaCXX/for-range-examples.cpp
index 1bbf042f0aa6c..5376f48ff8e7f 100644
--- a/clang/test/SemaCXX/for-range-examples.cpp
+++ b/clang/test/SemaCXX/for-range-examples.cpp
@@ -207,7 +207,7 @@ namespace test6 {
   void foo(vector arr[]) {  // expected-note {{declared here}}
     // Don't suggest to dereference arr.
     for (auto i : arr) { }
-      // expected-error at -1 {{cannot build range expression with array function parameter 'arr' since parameter with array type 'vector[]' is treated as pointer type 'vector *'}}
+      // expected-error at -1 {{cannot build range expression with array function parameter 'arr' since parameter with array type 'test6::vector[]' is treated as pointer type 'test6::vector *'}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/function-extern-c.cpp b/clang/test/SemaCXX/function-extern-c.cpp
index 993e3391fe21b..6ab965735065b 100644
--- a/clang/test/SemaCXX/function-extern-c.cpp
+++ b/clang/test/SemaCXX/function-extern-c.cpp
@@ -45,7 +45,7 @@ namespace test2 {
   // For now this tests that a second 'extern "C"' is not necessary to trigger
   // the warning.
   struct A;
-  extern "C" A f(void); // expected-warning {{'f' has C-linkage specified, but returns incomplete type 'A' which could be incompatible with C}}
+  extern "C" A f(void); // expected-warning {{'f' has C-linkage specified, but returns incomplete type 'test2::A' which could be incompatible with C}}
   struct A {
     A(const A&);
   };
@@ -74,8 +74,8 @@ extern "C" {
 #pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
 A xyzzy();
 #pragma clang diagnostic pop
-A bbb(); // expected-warning {{'bbb' has C-linkage specified, but returns user-defined type 'A' which is incompatible with C}}
-A ccc() { // expected-warning {{'ccc' has C-linkage specified, but returns user-defined type 'A' which is incompatible with C}}
+A bbb(); // expected-warning {{'bbb' has C-linkage specified, but returns user-defined type 'rdar13364028::A' which is incompatible with C}}
+A ccc() { // expected-warning {{'ccc' has C-linkage specified, but returns user-defined type 'rdar13364028::A' which is incompatible with C}}
   return A();
 };
 }

diff  --git a/clang/test/SemaCXX/functional-cast.cpp b/clang/test/SemaCXX/functional-cast.cpp
index fcfaff5bf854a..216ee240c8388 100644
--- a/clang/test/SemaCXX/functional-cast.cpp
+++ b/clang/test/SemaCXX/functional-cast.cpp
@@ -185,9 +185,9 @@ void t_529_5_8()
   typedef D &Dr;
   (void)Dr(*((A*)0)); // expected-error {{cannot cast 'A' to 'Dr' (aka 'D &') via virtual base 'B'}}
   typedef H *Hp;
-  (void)Hp((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    A -> B -> G2 -> struct H}}
+  (void)Hp((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
   typedef H &Hr;
-  (void)Hr(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    A -> B -> G2 -> struct H}}
+  (void)Hr(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
 
   // TODO: Test DR427. This requires user-defined conversions, though.
 }

diff  --git a/clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp b/clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
index fde65fb382a88..8b761320b8e9d 100644
--- a/clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
+++ b/clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
@@ -17,5 +17,5 @@ class container {
 	using value_type = T;
 	using reference  = value_type&;
 	reference get();
-	const reference get() const; // qual-warning{{'const' qualifier on reference type 'reference' (aka 'T &') has no effect}}
+	const reference get() const; // qual-warning{{'const' qualifier on reference type 'container::reference' (aka 'T &') has no effect}}
 };

diff  --git a/clang/test/SemaCXX/matrix-type-operators.cpp b/clang/test/SemaCXX/matrix-type-operators.cpp
index c81b9b9262872..4e2b0f9315e6b 100644
--- a/clang/test/SemaCXX/matrix-type-operators.cpp
+++ b/clang/test/SemaCXX/matrix-type-operators.cpp
@@ -12,13 +12,13 @@ struct MyMatrix {
 template <typename EltTy0, unsigned R0, unsigned C0, typename EltTy1, unsigned R1, unsigned C1, typename EltTy2, unsigned R2, unsigned C2>
 typename MyMatrix<EltTy2, R2, C2>::matrix_t add(MyMatrix<EltTy0, R0, C0> &A, MyMatrix<EltTy1, R1, C1> &B) {
   char *v1 = A.value + B.value;
-  // expected-error at -1 {{cannot initialize a variable of type 'char *' with an rvalue of type 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))')}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
-  // expected-error at -3 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
+  // expected-error at -1 {{cannot initialize a variable of type 'char *' with an rvalue of type 'MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -3 {{invalid operands to binary expression ('MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
 
   return A.value + B.value;
-  // expected-error at -1 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
+  // expected-error at -1 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
 }
 
 void test_add_template(unsigned *Ptr1, float *Ptr2) {
@@ -40,13 +40,13 @@ void test_add_template(unsigned *Ptr1, float *Ptr2) {
 template <typename EltTy0, unsigned R0, unsigned C0, typename EltTy1, unsigned R1, unsigned C1, typename EltTy2, unsigned R2, unsigned C2>
 typename MyMatrix<EltTy2, R2, C2>::matrix_t subtract(MyMatrix<EltTy0, R0, C0> &A, MyMatrix<EltTy1, R1, C1> &B) {
   char *v1 = A.value - B.value;
-  // expected-error at -1 {{cannot initialize a variable of type 'char *' with an rvalue of type 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))')}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))')}}
-  // expected-error at -3 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))')}}
+  // expected-error at -1 {{cannot initialize a variable of type 'char *' with an rvalue of type 'MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))')}}
+  // expected-error at -3 {{invalid operands to binary expression ('MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))')}}
 
   return A.value - B.value;
-  // expected-error at -1 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))')}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))')}}
+  // expected-error at -1 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))') and 'MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))')}}
 }
 
 void test_subtract_template(unsigned *Ptr1, float *Ptr2) {
@@ -69,18 +69,18 @@ template <typename EltTy0, unsigned R0, unsigned C0, typename EltTy1, unsigned R
 typename MyMatrix<EltTy2, R2, C2>::matrix_t multiply(MyMatrix<EltTy0, R0, C0> &A, MyMatrix<EltTy1, R1, C1> &B) {
   char *v1 = A.value * B.value;
   // expected-error at -1 {{cannot initialize a variable of type 'char *' with an rvalue of type 'unsigned int __attribute__((matrix_type(2, 2)))'}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
-  // expected-error at -3 {{invalid operands to binary expression ('matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
+  // expected-error at -3 {{invalid operands to binary expression ('MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
 
   MyMatrix<int, 5, 6> m;
   B.value = m.value * A.value;
-  // expected-error at -1 {{invalid operands to binary expression ('matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))'))}}
-  // expected-error at -3 {{invalid operands to binary expression ('matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -1 {{invalid operands to binary expression ('MyMatrix<int, 5, 6>::matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<int, 5, 6>::matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'MyMatrix<unsigned int, 3, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))'))}}
+  // expected-error at -3 {{invalid operands to binary expression ('MyMatrix<int, 5, 6>::matrix_t' (aka 'int __attribute__((matrix_type(5, 6)))') and 'MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))'))}}
 
   return A.value * B.value;
-  // expected-error at -1 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))') and 'matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
+  // expected-error at -1 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'MyMatrix<unsigned int, 3, 3>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 3)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<float, 2, 2>::matrix_t' (aka 'float __attribute__((matrix_type(2, 2)))') and 'MyMatrix<unsigned int, 2, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(2, 2)))'))}}
 }
 
 void test_multiply_template(unsigned *Ptr1, float *Ptr2) {
@@ -101,7 +101,7 @@ void test_multiply_template(unsigned *Ptr1, float *Ptr2) {
 
   Mat4.value = Mat4.value * Mat1;
   // expected-error at -1 {{no viable conversion from 'MyMatrix<unsigned int, 2, 2>' to 'unsigned int'}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'MyMatrix<unsigned int, 2, 2>')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<unsigned int, 3, 2>::matrix_t' (aka 'unsigned int __attribute__((matrix_type(3, 2)))') and 'MyMatrix<unsigned int, 2, 2>')}}
 }
 
 struct UserT {};
@@ -116,19 +116,19 @@ struct StructWithC {
 void test_DoubleWrapper(MyMatrix<double, 10, 9> &m, StructWithC &c) {
   m.value = m.value + c;
   // expected-error at -1 {{no viable conversion from 'StructWithC' to 'double'}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))') and 'StructWithC')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<double, 10, 9>::matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))') and 'StructWithC')}}
 
   m.value = c + m.value;
   // expected-error at -1 {{no viable conversion from 'StructWithC' to 'double'}}
-  // expected-error at -2 {{invalid operands to binary expression ('StructWithC' and 'matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('StructWithC' and 'MyMatrix<double, 10, 9>::matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))'))}}
 
   m.value = m.value - c;
   // expected-error at -1 {{no viable conversion from 'StructWithC' to 'double'}}
-  // expected-error at -2 {{invalid operands to binary expression ('matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))') and 'StructWithC')}}
+  // expected-error at -2 {{invalid operands to binary expression ('MyMatrix<double, 10, 9>::matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))') and 'StructWithC')}}
 
   m.value = c - m.value;
   // expected-error at -1 {{no viable conversion from 'StructWithC' to 'double'}}
-  // expected-error at -2 {{invalid operands to binary expression ('StructWithC' and 'matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))'))}}
+  // expected-error at -2 {{invalid operands to binary expression ('StructWithC' and 'MyMatrix<double, 10, 9>::matrix_t' (aka 'double __attribute__((matrix_type(10, 9)))'))}}
 }
 
 sx5x10_t get_matrix();

diff  --git a/clang/test/SemaCXX/member-expr.cpp b/clang/test/SemaCXX/member-expr.cpp
index 3497ef596480e..3571fa748b818 100644
--- a/clang/test/SemaCXX/member-expr.cpp
+++ b/clang/test/SemaCXX/member-expr.cpp
@@ -85,11 +85,11 @@ namespace test5 {
   }
 
   void test1(A *x) {
-    x.A::foo<int>(); // expected-error {{'A *' is a pointer}}
+    x.A::foo<int>(); // expected-error {{'test5::A *' is a pointer}}
   }
 
   void test2(A &x) {
-    x->A::foo<int>(); // expected-error {{'A' is not a pointer; did you mean to use '.'?}}
+    x->A::foo<int>(); // expected-error {{'test5::A' is not a pointer; did you mean to use '.'?}}
   }
 }
 
@@ -116,9 +116,9 @@ namespace rdar8231724 {
   template<typename T> struct Z { int n; };
 
   void f(Y *y) {
-    y->N::X1<int>; // expected-error{{'rdar8231724::N::X1' is not a member of class 'Y'}}
-    y->Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'Y'}}
-    y->template Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'Y'}}
+    y->N::X1<int>; // expected-error{{'rdar8231724::N::X1' is not a member of class 'rdar8231724::Y'}}
+    y->Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}}
+    y->template Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}}
 #if __cplusplus <= 199711L // C++03 or earlier modes
     // expected-warning at -2{{'template' keyword outside of a template}}
 #endif
@@ -185,7 +185,7 @@ namespace PR15045 {
 
   int f() {
     Cl0 c;
-    return c->a;  // expected-error {{member reference type 'Cl0' is not a pointer; did you mean to use '.'?}}
+    return c->a;  // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; did you mean to use '.'?}}
   }
 
   struct bar {
@@ -197,7 +197,7 @@ namespace PR15045 {
   };
 
   template <class T> void call_func(T t) {
-    t->func();  // expected-error-re 2 {{member reference type '{{(PR15045::)?}}bar' is not a pointer{{$}}}} \
+    t->func();  // expected-error-re 2 {{member reference type 'PR15045::bar' is not a pointer{{$}}}} \
                 // expected-note {{did you mean to use '.' instead?}}
   }
 
@@ -206,12 +206,12 @@ namespace PR15045 {
     foo f;
 
     // Show that recovery has happened by also triggering typo correction
-    e->Func();  // expected-error {{member reference type 'bar' is not a pointer; did you mean to use '.'?}} \
+    e->Func();  // expected-error {{member reference type 'PR15045::bar' is not a pointer; did you mean to use '.'?}} \
                 // expected-error {{no member named 'Func' in 'PR15045::bar'; did you mean 'func'?}}
 
     // Make sure a fixit isn't given in the case that the '->' isn't actually
     // the problem (the problem is with the return value of an operator->).
-    f->func();  // expected-error-re {{member reference type 'bar' is not a pointer{{$}}}}
+    f->func();  // expected-error-re {{member reference type 'PR15045::bar' is not a pointer{{$}}}}
 
     call_func(e);  // expected-note {{in instantiation of function template specialization 'PR15045::call_func<PR15045::bar>' requested here}}
 
@@ -225,6 +225,6 @@ namespace pr16676 {
   int f(S* s) {
     T t;
     return t.get_s  // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}}
-        .i;  // expected-error {{member reference type 'S *' is a pointer; did you mean to use '->'}}
+        .i;  // expected-error {{member reference type 'pr16676::S *' is a pointer; did you mean to use '->'}}
   }
 }

diff  --git a/clang/test/SemaCXX/member-init.cpp b/clang/test/SemaCXX/member-init.cpp
index 4dd3bd2ca94f7..24291064296f9 100644
--- a/clang/test/SemaCXX/member-init.cpp
+++ b/clang/test/SemaCXX/member-init.cpp
@@ -87,7 +87,7 @@ namespace PR14838 {
   struct thing {};
   struct another {
     another() : r(thing()) {} // expected-error {{binds to a temporary object}}
-    // expected-error at -1 {{temporary of type 'function' has private destructor}}
+    // expected-error at -1 {{temporary of type 'PR14838::function' has private destructor}}
     const function &r; // expected-note {{reference member declared here}}
   } af;
 }
@@ -98,7 +98,7 @@ namespace rdar14084171 {
     double y;
   };
   struct Sprite {
-    Point location = Point(0,0); // expected-error {{no matching constructor for initialization of 'Point'}}
+    Point location = Point(0,0); // expected-error {{no matching constructor for initialization of 'rdar14084171::Point'}}
   };
   void f(Sprite& x) { x = x; } // expected-warning {{explicitly assigning value of variable}}
 }

diff  --git a/clang/test/SemaCXX/microsoft-cxx0x.cpp b/clang/test/SemaCXX/microsoft-cxx0x.cpp
index cfb88c0317c3a..58ab940f583ea 100644
--- a/clang/test/SemaCXX/microsoft-cxx0x.cpp
+++ b/clang/test/SemaCXX/microsoft-cxx0x.cpp
@@ -15,7 +15,7 @@ namespace PR13433 {
 
   template<typename F> auto x(F f) -> decltype(f(make()));
 #ifndef MS_COMPAT
-// expected-error at -2{{calling 'make' with incomplete return type 'S'}}
+// expected-error at -2{{calling 'make' with incomplete return type 'PR13433::S'}}
 // expected-note at -5{{'make' declared here}}
 // expected-note at -7{{forward declaration of 'PR13433::S'}}
 #endif

diff  --git a/clang/test/SemaCXX/microsoft-dtor-lookup.cpp b/clang/test/SemaCXX/microsoft-dtor-lookup.cpp
index 913b8ac0e9189..312598e286398 100644
--- a/clang/test/SemaCXX/microsoft-dtor-lookup.cpp
+++ b/clang/test/SemaCXX/microsoft-dtor-lookup.cpp
@@ -42,7 +42,7 @@ class A {
   int a;
 };
 
-struct B : public A { // expected-note {{destructor of 'B' is implicitly deleted because base class 'A' has an inaccessible destructor}}
+struct B : public A { // expected-note {{destructor of 'B' is implicitly deleted because base class 'Test2::A' has an inaccessible destructor}}
   int b;
 };
 

diff  --git a/clang/test/SemaCXX/new-array-size-conv.cpp b/clang/test/SemaCXX/new-array-size-conv.cpp
index 48aa015cd2978..36b2f23a0e977 100644
--- a/clang/test/SemaCXX/new-array-size-conv.cpp
+++ b/clang/test/SemaCXX/new-array-size-conv.cpp
@@ -18,7 +18,7 @@ struct ValueEnum {
 struct ValueBoth : ValueInt, ValueEnum { };
 
 struct IndirectValueInt : ValueInt { };
-struct TwoValueInts : ValueInt, IndirectValueInt { }; // expected-warning{{direct base 'ValueInt' is inaccessible due to ambiguity:\n    struct TwoValueInts -> ValueInt\n    struct TwoValueInts -> IndirectValueInt -> ValueInt}}
+struct TwoValueInts : ValueInt, IndirectValueInt { }; // expected-warning{{direct base 'ValueInt' is inaccessible due to ambiguity:\n    struct TwoValueInts -> struct ValueInt\n    struct TwoValueInts -> struct IndirectValueInt -> struct ValueInt}}
 
 
 void test() {

diff  --git a/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp
index 39f03dcc6f03d..52dbe00f7e000 100644
--- a/clang/test/SemaCXX/new-delete.cpp
+++ b/clang/test/SemaCXX/new-delete.cpp
@@ -479,7 +479,7 @@ namespace ArrayNewNeedsDtor {
 #endif
   struct B { B(); A a; };
 #if __cplusplus <= 199711L
-  // expected-error at -2 {{field of type 'A' has private destructor}}
+  // expected-error at -2 {{field of type 'ArrayNewNeedsDtor::A' has private destructor}}
 #else
   // expected-note at -4 {{destructor of 'B' is implicitly deleted because field 'a' has an inaccessible destructor}}
 #endif

diff  --git a/clang/test/SemaCXX/out-of-line-def-mismatch.cpp b/clang/test/SemaCXX/out-of-line-def-mismatch.cpp
index a4e130d234353..6ade5b802b65b 100644
--- a/clang/test/SemaCXX/out-of-line-def-mismatch.cpp
+++ b/clang/test/SemaCXX/out-of-line-def-mismatch.cpp
@@ -7,9 +7,9 @@ namespace N2 {
     class C1 {};
 
     struct S2 {
-      void func(S1*); // expected-note {{type of 1st parameter of member declaration does not match definition ('S1 *' (aka 'N2::S1 *') vs 'S1 *' (aka 'N2::N1::S1 *'))}}
-      void func(C1&, unsigned, const S1*); // expected-note {{type of 3rd parameter of member declaration does not match definition ('const S1 *' (aka 'const N2::S1 *') vs 'const S1 *' (aka 'const N2::N1::S1 *'))}}
-      void func(const S1*, unsigned); //expected-note {{type of 1st parameter of member declaration does not match definition ('const S1 *' vs 'S1')}}
+      void func(S1*); // expected-note {{type of 1st parameter of member declaration does not match definition ('N2::S1 *' vs 'N2::N1::S1 *')}}
+      void func(C1&, unsigned, const S1*); // expected-note {{type of 3rd parameter of member declaration does not match definition ('const N2::S1 *' vs 'const N2::N1::S1 *')}}
+      void func(const S1*, unsigned); //expected-note {{type of 1st parameter of member declaration does not match definition ('const N2::S1 *' vs 'N2::N1::S1')}}
       void func(unsigned, const S1*); // expected-note {{type of 1st parameter of member declaration does not match definition ('unsigned int' vs 'unsigned int *')}}
     };
 

diff  --git a/clang/test/SemaCXX/overload-0x.cpp b/clang/test/SemaCXX/overload-0x.cpp
index 94864b79234af..1c185a5725bd6 100644
--- a/clang/test/SemaCXX/overload-0x.cpp
+++ b/clang/test/SemaCXX/overload-0x.cpp
@@ -2,11 +2,11 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s
 
 namespace test0 {
-  struct A { // expected-note {{candidate function (the implicit copy assignment operator) not viable: 'this' argument has type 'const A', but method is not marked const}}
+  struct A { // expected-note {{candidate function (the implicit copy assignment operator) not viable: 'this' argument has type 'const test0::A', but method is not marked const}}
 #if __cplusplus >= 201103L
-  // expected-note at -2 {{candidate function (the implicit move assignment operator) not viable: 'this' argument has type 'const A', but method is not marked const}}
+  // expected-note at -2 {{candidate function (the implicit move assignment operator) not viable: 'this' argument has type 'const test0::A', but method is not marked const}}
 #endif
-    A &operator=(void*); // expected-note {{candidate function not viable: 'this' argument has type 'const A', but method is not marked const}}
+    A &operator=(void*); // expected-note {{candidate function not viable: 'this' argument has type 'const test0::A', but method is not marked const}}
   };
 
   void test(const A &a) {

diff  --git a/clang/test/SemaCXX/overload-call.cpp b/clang/test/SemaCXX/overload-call.cpp
index a70b905bb80a9..0e5978e56f889 100644
--- a/clang/test/SemaCXX/overload-call.cpp
+++ b/clang/test/SemaCXX/overload-call.cpp
@@ -388,8 +388,8 @@ namespace IncompleteConversion {
     completeFunction(*P); // expected-error {{no matching function for call to 'completeFunction'}}
   }
   
-  void incompletePointerFunction(Incomplete *); // expected-note {{candidate function not viable: cannot convert argument of incomplete type 'Incomplete' to 'Incomplete *' for 1st argument; take the address of the argument with &}}
-  void incompleteReferenceFunction(Incomplete &); // expected-note {{candidate function not viable: cannot convert argument of incomplete type 'Incomplete *' to 'Incomplete &' for 1st argument; dereference the argument with *}}
+  void incompletePointerFunction(Incomplete *); // expected-note {{candidate function not viable: cannot convert argument of incomplete type 'IncompleteConversion::Incomplete' to 'IncompleteConversion::Incomplete *' for 1st argument; take the address of the argument with &}}
+  void incompleteReferenceFunction(Incomplete &); // expected-note {{candidate function not viable: cannot convert argument of incomplete type 'IncompleteConversion::Incomplete *' to 'IncompleteConversion::Incomplete &' for 1st argument; dereference the argument with *}}
   
   void testPointerReferenceConversion(Incomplete &reference, Incomplete *pointer) {
     incompletePointerFunction(reference); // expected-error {{no matching function for call to 'incompletePointerFunction'}}
@@ -467,7 +467,7 @@ namespace PR6078 {
   };
 
   void f() {
-    S()(0); // expected-error{{conversion from 'int' to 'A' is ambiguous}}
+    S()(0); // expected-error{{conversion from 'int' to 'PR6078::A' is ambiguous}}
   }
 }
 

diff  --git a/clang/test/SemaCXX/overload-member-call.cpp b/clang/test/SemaCXX/overload-member-call.cpp
index d3044e25e0c16..0cf32694a1caa 100644
--- a/clang/test/SemaCXX/overload-member-call.cpp
+++ b/clang/test/SemaCXX/overload-member-call.cpp
@@ -77,11 +77,11 @@ namespace test1 {
     void foo(int n, const char *s, int t, ...); // expected-note {{candidate function not viable: requires at least 3 arguments, but 2 were provided}}
     void foo(int n, const char *s, int t, int u = 0); // expected-note {{candidate function not viable: requires at least 3 arguments, but 2 were provided}}
 
-    void bar(double d); //expected-note {{candidate function not viable: 'this' argument has type 'const A', but method is not marked const}}
-    void bar(int i); //expected-note {{candidate function not viable: 'this' argument has type 'const A', but method is not marked const}}
+    void bar(double d); //expected-note {{candidate function not viable: 'this' argument has type 'const test1::A', but method is not marked const}}
+    void bar(int i); //expected-note {{candidate function not viable: 'this' argument has type 'const test1::A', but method is not marked const}}
 
-    void baz(A &d); // expected-note {{candidate function not viable: 1st argument ('const A') would lose const qualifier}}
-    void baz(int i); // expected-note {{candidate function not viable: no known conversion from 'const A' to 'int' for 1st argument}} 
+    void baz(A &d); // expected-note {{candidate function not viable: 1st argument ('const test1::A') would lose const qualifier}}
+    void baz(int i); // expected-note {{candidate function not viable: no known conversion from 'const test1::A' to 'int' for 1st argument}} 
 
     void ref() &&;   // expected-note {{expects an rvalue for object argument}} expected-note {{requires 0 arguments, but 1 was provided}}
     void ref(int) &; // expected-note {{expects an lvalue for object argument}} expected-note {{requires 1 argument, but 0 were provided}}
@@ -114,7 +114,7 @@ namespace test1 {
 
 namespace b7398190 {
   struct S {
-    int f(); // expected-note {{'this' argument has type 'const S', but method is not marked const}}
+    int f(); // expected-note {{'this' argument has type 'const b7398190::S', but method is not marked const}}
     void f(int); // expected-note {{requires 1 argument, but 0 were provided}}
   };
   const S *p;

diff  --git a/clang/test/SemaCXX/overloaded-operator.cpp b/clang/test/SemaCXX/overloaded-operator.cpp
index 3290656460a8a..e3ec42ab96928 100644
--- a/clang/test/SemaCXX/overloaded-operator.cpp
+++ b/clang/test/SemaCXX/overloaded-operator.cpp
@@ -404,7 +404,7 @@ namespace rdar9136502 {
 namespace rdar9222009 {
 class StringRef {
   inline bool operator==(StringRef LHS, StringRef RHS) { // expected-error{{overloaded 'operator==' must be a binary operator (has 3 parameters)}}
-    return !(LHS == RHS); // expected-error{{invalid operands to binary expression ('StringRef' and 'StringRef')}}
+    return !(LHS == RHS); // expected-error{{invalid operands to binary expression ('rdar9222009::StringRef' and 'rdar9222009::StringRef')}}
   }
 };
 
@@ -481,7 +481,7 @@ namespace PR14995 {
   void h() {
     D d;
     d++;  // ok
-    ++d; // expected-error{{cannot increment value of type 'D'}}
+    ++d; // expected-error{{cannot increment value of type 'PR14995::D'}}
   }
 
   template<typename...T> struct E {

diff  --git a/clang/test/SemaCXX/pseudo-destructors.cpp b/clang/test/SemaCXX/pseudo-destructors.cpp
index 55a96002be2ab..f214f5226ee28 100644
--- a/clang/test/SemaCXX/pseudo-destructors.cpp
+++ b/clang/test/SemaCXX/pseudo-destructors.cpp
@@ -108,15 +108,15 @@ struct Derived : Base {
 
 void test() {
   Derived d;
-  static_cast<Base *>(&d).~Base(); // expected-error {{member reference type 'Base *' is a pointer; did you mean to use '->'}}
-  d->~Derived(); // expected-error {{member reference type 'Derived' is not a pointer; did you mean to use '.'}}
+  static_cast<Base *>(&d).~Base(); // expected-error {{member reference type 'dotPointerAccess::Base *' is a pointer; did you mean to use '->'}}
+  d->~Derived(); // expected-error {{member reference type 'dotPointerAccess::Derived' is not a pointer; did you mean to use '.'}}
 }
 
 typedef Derived *Foo;
 
 void test2(Foo d) {
   d.~Foo(); // This is ok
-  d.~Derived(); // expected-error {{member reference type 'Foo' (aka 'dotPointerAccess::Derived *') is a pointer; did you mean to use '->'}}
+  d.~Derived(); // expected-error {{member reference type 'dotPointerAccess::Foo' (aka 'dotPointerAccess::Derived *') is a pointer; did you mean to use '->'}}
 }
 }
 

diff  --git a/clang/test/SemaCXX/recovery-expr-type.cpp b/clang/test/SemaCXX/recovery-expr-type.cpp
index 2a0278ef6057b..3db11466529e1 100644
--- a/clang/test/SemaCXX/recovery-expr-type.cpp
+++ b/clang/test/SemaCXX/recovery-expr-type.cpp
@@ -101,7 +101,7 @@ void test() {
 namespace test8 {
 typedef int arr[];
 int v = arr(); // expected-error {{array types cannot be value-initialized}} \
-                  expected-error {{cannot initialize a variable of type 'int' with an rvalue of type 'arr'}}
+                  expected-error {{cannot initialize a variable of type 'int' with an rvalue of type 'test8::arr'}}
 }
 
 namespace test9 {
@@ -146,7 +146,7 @@ void crash2() { constexpr int s = fun(); }
 
 namespace test13 {
 enum Circular {             // expected-note {{not complete until the closing '}'}}
-  Circular_A = Circular(1), // expected-error {{'Circular' is an incomplete type}}
+  Circular_A = Circular(1), // expected-error {{'test13::Circular' is an incomplete type}}
 };
 // Enumerators can be evaluated (they evaluate as zero, but we don't care).
 static_assert(Circular_A == 0 && Circular_A != 0, ""); // expected-error {{static_assert failed}}

diff  --git a/clang/test/SemaCXX/references.cpp b/clang/test/SemaCXX/references.cpp
index 7ef3f43ff55ae..f059eb6e64602 100644
--- a/clang/test/SemaCXX/references.cpp
+++ b/clang/test/SemaCXX/references.cpp
@@ -90,7 +90,7 @@ class Test6 { // expected-warning{{class 'Test6' does not declare any constructo
   int& okay; // expected-note{{reference member 'okay' will never be initialized}}
 };
 
-struct C : B, A { }; // expected-warning {{direct base 'A' is inaccessible due to ambiguity:\n    struct C -> B -> A\nstruct C -> A}}
+struct C : B, A { }; // expected-warning {{direct base 'A' is inaccessible due to ambiguity:\n    struct C -> struct B -> struct A\nstruct C -> struct A}}
 
 void test7(C& c) {
   A& a1 = c; // expected-error {{ambiguous conversion from derived class 'C' to base class 'A':}}
@@ -180,7 +180,7 @@ namespace ExplicitRefInit {
   // This is invalid: we can't copy-initialize an 'A' temporary using an
   // explicit constructor.
   struct A { explicit A(int); };
-  const A &a(0); // expected-error {{reference to type 'const A' could not bind to an rvalue of type 'int'}}
+  const A &a(0); // expected-error {{reference to type 'const ExplicitRefInit::A' could not bind to an rvalue of type 'int'}}
 }
 
 namespace RefCollapseTypePrinting {

diff  --git a/clang/test/SemaCXX/static-cast.cpp b/clang/test/SemaCXX/static-cast.cpp
index 7cc4bea423d60..ff47c0bb4dce1 100644
--- a/clang/test/SemaCXX/static-cast.cpp
+++ b/clang/test/SemaCXX/static-cast.cpp
@@ -90,8 +90,8 @@ void t_529_5_8()
   (void)static_cast<B&>(*((const A*)0)); // expected-error {{static_cast from 'const A' to 'B &' casts away qualifiers}}
   (void)static_cast<E*>((A*)0); // expected-error {{cannot cast private base class 'A' to 'E'}}
   (void)static_cast<E&>(*((A*)0)); // expected-error {{cannot cast private base class 'A' to 'E'}}
-  (void)static_cast<H*>((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    struct A -> B -> G2 -> struct H}}
-  (void)static_cast<H&>(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    A -> B -> G1 -> struct H\n    A -> B -> G2 -> struct H}}
+  (void)static_cast<H*>((A*)0); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
+  (void)static_cast<H&>(*((A*)0)); // expected-error {{ambiguous cast from base 'A' to derived 'H':\n    struct A -> struct B -> struct G1 -> struct H\n    struct A -> struct B -> struct G2 -> struct H}}
   (void)static_cast<E*>((B*)0); // expected-error {{static_cast from 'B *' to 'E *', which are not related by inheritance, is not allowed}}
   (void)static_cast<E&>(*((B*)0)); // expected-error {{non-const lvalue reference to type 'E' cannot bind to a value of unrelated type 'B'}}
 

diff  --git a/clang/test/SemaCXX/switch.cpp b/clang/test/SemaCXX/switch.cpp
index 26a70dfb9d5bb..380f4d559ef8e 100644
--- a/clang/test/SemaCXX/switch.cpp
+++ b/clang/test/SemaCXX/switch.cpp
@@ -124,7 +124,7 @@ void test(Opaque o, OpaqueClass oc, Defined d) {
   switch (d) {
   case Defined::a:
     break;
-  case (Defined)2: // expected-warning {{case value not in enumerated type 'Defined'}}
+  case (Defined)2: // expected-warning {{case value not in enumerated type 'OpaqueEnumWarnings::Defined'}}
     break;
   }
 }

diff  --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp
index 0ef1205d44853..2bc1178ff8b73 100644
--- a/clang/test/SemaCXX/type-traits.cpp
+++ b/clang/test/SemaCXX/type-traits.cpp
@@ -2789,7 +2789,7 @@ namespace ErrorType {
   struct S; //expected-note{{forward declaration of 'ErrorType::S'}}
 
   struct T {
-        S t; //expected-error{{field has incomplete type 'S'}}
+        S t; //expected-error{{field has incomplete type 'ErrorType::S'}}
   };
   bool b = __has_unique_object_representations(T);
 };

diff  --git a/clang/test/SemaCXX/undefined-internal.cpp b/clang/test/SemaCXX/undefined-internal.cpp
index 960542c03a0d4..abbd0921fd7b8 100644
--- a/clang/test/SemaCXX/undefined-internal.cpp
+++ b/clang/test/SemaCXX/undefined-internal.cpp
@@ -128,7 +128,7 @@ namespace PR9323 {
 #if __cplusplus <= 199711L // C++03 or earlier modes
     // expected-warning at -2 {{C++98 requires an accessible copy constructor}}
 #else
-    // expected-warning at -4 {{copying parameter of type 'Uncopyable' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
+    // expected-warning at -4 {{copying parameter of type 'PR9323::(anonymous namespace)::Uncopyable' when binding a reference to a temporary would invoke an inaccessible constructor in C++98}}
 #endif
   };
 }

diff  --git a/clang/test/SemaCXX/underlying_type.cpp b/clang/test/SemaCXX/underlying_type.cpp
index 6e7a53661912a..87f3b92802ad3 100644
--- a/clang/test/SemaCXX/underlying_type.cpp
+++ b/clang/test/SemaCXX/underlying_type.cpp
@@ -47,11 +47,11 @@ namespace PR19966 {
     // expected-error at -1 {{ISO C++ forbids forward references to 'enum'}}
     // expected-error at -2 {{variable has incomplete type}}
     __underlying_type(Invalid) dont_crash;
-    // expected-error at -1 {{cannot determine underlying type of incomplete enumeration type 'Invalid'}}
+    // expected-error at -1 {{cannot determine underlying type of incomplete enumeration type 'PR19966::Invalid'}}
   }
   enum E { // expected-note {{forward declaration of 'E'}}
     a = (__underlying_type(E)){}
-    // expected-error at -1 {{cannot determine underlying type of incomplete enumeration type 'E'}}
+    // expected-error at -1 {{cannot determine underlying type of incomplete enumeration type 'PR19966::E'}}
     // expected-error at -2 {{constant expression}}
   };
 }

diff  --git a/clang/test/SemaCXX/vector.cpp b/clang/test/SemaCXX/vector.cpp
index 3882efbbc9556..f9a9224e9a608 100644
--- a/clang/test/SemaCXX/vector.cpp
+++ b/clang/test/SemaCXX/vector.cpp
@@ -508,8 +508,8 @@ void use(char16 c) {
   E e;
   c &Value;   // expected-error{{cannot convert between scalar type 'PR45780::E' and vector type 'char16'}}
   c == Value; // expected-error{{cannot convert between scalar type 'PR45780::E' and vector type 'char16'}}
-  e | c;      // expected-error{{cannot convert between scalar type 'E' and vector type 'char16'}}
-  e != c;     // expected-error{{cannot convert between scalar type 'E' and vector type 'char16'}}
+  e | c;      // expected-error{{cannot convert between scalar type 'PR45780::E' and vector type 'char16'}}
+  e != c;     // expected-error{{cannot convert between scalar type 'PR45780::E' and vector type 'char16'}}
 }
 
 } // namespace PR45780

diff  --git a/clang/test/SemaCXX/virtual-override.cpp b/clang/test/SemaCXX/virtual-override.cpp
index 72abfc3cf51e1..ec884f3632358 100644
--- a/clang/test/SemaCXX/virtual-override.cpp
+++ b/clang/test/SemaCXX/virtual-override.cpp
@@ -22,7 +22,7 @@ class A {
 };
 
 class B : A {
-  virtual b* f(); // expected-error{{return type of virtual function 'f' is not covariant with the return type of the function it overrides ('b *' is not derived from 'a *')}}
+  virtual b* f(); // expected-error{{return type of virtual function 'f' is not covariant with the return type of the function it overrides ('T2::b *' is not derived from 'T2::a *')}}
 };
 
 }
@@ -37,7 +37,7 @@ class A {
 };
 
 class B : A {
-  virtual b* f(); // expected-error{{invalid covariant return for virtual function: 'a' is a private base class of 'b'}}
+  virtual b* f(); // expected-error{{invalid covariant return for virtual function: 'T3::a' is a private base class of 'T3::b'}}
 };
 
 }
@@ -46,16 +46,16 @@ namespace T4 {
 
 struct a { };
 struct a1 : a { };
-struct b : a, a1 { }; // expected-warning{{direct base 'a' is inaccessible due to ambiguity:\n    struct T4::b -> a\n    struct T4::b -> a1 -> a}}
+struct b : a, a1 { }; // expected-warning{{direct base 'T4::a' is inaccessible due to ambiguity:\n    struct T4::b -> struct T4::a\n    struct T4::b -> struct T4::a1 -> struct T4::a}}
   
 class A {
   virtual a* f(); // expected-note{{overridden virtual function is here}}
 };
 
 class B : A {
-  virtual b* f(); // expected-error{{return type of virtual function 'f' is not covariant with the return type of the function it overrides (ambiguous conversion from derived class 'b' to base class 'a':\n\
-    struct T4::b -> a\n\
-    struct T4::b -> a1 -> a)}}
+  virtual b* f(); // expected-error{{return type of virtual function 'f' is not covariant with the return type of the function it overrides (ambiguous conversion from derived class 'T4::b' to base class 'T4::a':\n\
+    struct T4::b -> struct T4::a\n\
+    struct T4::b -> struct T4::a1 -> struct T4::a)}}
 };
 
 }
@@ -71,7 +71,7 @@ class A {
 
 class B : A {
   virtual a* const f(); 
-  virtual a* g(); // expected-error{{return type of virtual function 'g' is not covariant with the return type of the function it overrides ('a *' has 
diff erent qualifiers than 'a *const')}}
+  virtual a* g(); // expected-error{{return type of virtual function 'g' is not covariant with the return type of the function it overrides ('T5::a *' has 
diff erent qualifiers than 'T5::a *const')}}
 };
 
 }
@@ -87,7 +87,7 @@ class A {
 
 class B : A {
   virtual a* f(); 
-  virtual const a* g(); // expected-error{{return type of virtual function 'g' is not covariant with the return type of the function it overrides (class type 'const a *' is more qualified than class type 'a *'}}
+  virtual const a* g(); // expected-error{{return type of virtual function 'g' is not covariant with the return type of the function it overrides (class type 'const T6::a *' is more qualified than class type 'T6::a *'}}
 };
 
 }
@@ -114,7 +114,7 @@ namespace T8 {
   };
   
   class B : A {
-    b* f(); // expected-error {{return type of virtual function 'f' is not covariant with the return type of the function it overrides ('b' is incomplete)}}
+    b* f(); // expected-error {{return type of virtual function 'f' is not covariant with the return type of the function it overrides ('T8::b' is incomplete)}}
   };
 }
 
@@ -231,7 +231,7 @@ namespace type_dependent_covariance {
   };
   template <int N, int M> struct X1 : X<N> {
     virtual TD<M>* f1(); // expected-error{{return type of virtual function 'f1' is not covariant with the return type of the function it overrides ('TD<1> *'}}
-    virtual D* f2(); // expected-error{{return type of virtual function 'f2' is not covariant with the return type of the function it overrides ('D *' is not derived from 'TB<1> *')}}
+    virtual D* f2(); // expected-error{{return type of virtual function 'f2' is not covariant with the return type of the function it overrides ('type_dependent_covariance::D *' is not derived from 'TB<1> *')}}
   };
 
   X1<0, 0> good;
@@ -261,7 +261,7 @@ namespace T11 {
   };
 
   struct D : C {
-    virtual B&& f(); // expected-error {{virtual function 'f' has a 
diff erent return type ('B &&') than the function it overrides (which has return type 'A &')}}
+    virtual B&& f(); // expected-error {{virtual function 'f' has a 
diff erent return type ('T11::B &&') than the function it overrides (which has return type 'T11::A &')}}
   };
 };
 
@@ -274,7 +274,7 @@ namespace T12 {
   };
 
   struct D : C {
-    virtual B& f(); // expected-error {{virtual function 'f' has a 
diff erent return type ('B &') than the function it overrides (which has return type 'A &&')}}
+    virtual B& f(); // expected-error {{virtual function 'f' has a 
diff erent return type ('T12::B &') than the function it overrides (which has return type 'T12::A &&')}}
   };
 };
 

diff  --git a/clang/test/SemaCXX/warn-bad-memaccess.cpp b/clang/test/SemaCXX/warn-bad-memaccess.cpp
index 2b32475540d1d..c7320901fc3ed 100644
--- a/clang/test/SemaCXX/warn-bad-memaccess.cpp
+++ b/clang/test/SemaCXX/warn-bad-memaccess.cpp
@@ -152,7 +152,7 @@ namespace N {
 namespace recursive_class {
 struct S {
   S v;
-  // expected-error at -1{{field has incomplete type 'S'}}
+  // expected-error at -1{{field has incomplete type 'recursive_class::S'}}
   // expected-note at -3{{definition of 'recursive_class::S' is not complete until the closing '}'}}
 } a;
 

diff  --git a/clang/test/SemaCXX/warn-enum-compare.cpp b/clang/test/SemaCXX/warn-enum-compare.cpp
index 67fb2696e8484..eb777b2f6dc73 100644
--- a/clang/test/SemaCXX/warn-enum-compare.cpp
+++ b/clang/test/SemaCXX/warn-enum-compare.cpp
@@ -78,15 +78,15 @@ void test () {
 
   while (B1 == B2); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
   while (name1::B2 == name2::B3); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
-  while (z == name2::B2); // expected-warning  {{comparison of 
diff erent enumeration types ('Baz' and 'name2::Baz')}}
+  while (z == name2::B2); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
 
   while (((((B1)))) == B2); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
   while (name1::B2 == (name2::B3)); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
-  while (z == ((((name2::B2))))); // expected-warning  {{comparison of 
diff erent enumeration types ('Baz' and 'name2::Baz')}}
+  while (z == ((((name2::B2))))); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
 
   while ((((B1))) == (((B2)))); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
   while ((name1::B2) == (((name2::B3)))); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
-  while ((((z))) == (name2::B2)); // expected-warning  {{comparison of 
diff erent enumeration types ('Baz' and 'name2::Baz')}}
+  while ((((z))) == (name2::B2)); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'name2::Baz')}}
 
   while (x == a); // expected-warning  {{comparison of 
diff erent enumeration types ('Foo' and 'name1::Foo')}}
   while (x == b); // expected-warning  {{comparison of 
diff erent enumeration types ('Foo' and 'oneFoo' (aka 'name1::Foo'))}}
@@ -229,14 +229,14 @@ void test () {
   while (td == c); // expected-warning  {{comparison of 
diff erent enumeration types ('TD' and 'twoFoo' (aka 'name1::Foo'))}}
   while (td == x); // expected-warning  {{comparison of 
diff erent enumeration types ('TD' and 'Foo')}}
   while (td == y); // expected-warning  {{comparison of 
diff erent enumeration types ('TD' and 'Bar')}}
-  while (td == z); // expected-warning  {{comparison of 
diff erent enumeration types ('TD' and 'Baz')}}
+  while (td == z); // expected-warning  {{comparison of 
diff erent enumeration types ('TD' and 'name1::Baz')}}
 
   while (a == TD1); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Foo' and 'TD')}}
   while (b == TD2); // expected-warning  {{comparison of 
diff erent enumeration types ('oneFoo' (aka 'name1::Foo') and 'TD')}}
   while (c == TD1); // expected-warning  {{comparison of 
diff erent enumeration types ('twoFoo' (aka 'name1::Foo') and 'TD')}}
   while (x == TD2); // expected-warning  {{comparison of 
diff erent enumeration types ('Foo' and 'TD')}}
   while (y == TD1); // expected-warning  {{comparison of 
diff erent enumeration types ('Bar' and 'TD')}}
-  while (z == TD2); // expected-warning  {{comparison of 
diff erent enumeration types ('Baz' and 'TD')}}
+  while (z == TD2); // expected-warning  {{comparison of 
diff erent enumeration types ('name1::Baz' and 'TD')}}
 
   switch (a) {
     case name1::F1: break;

diff  --git a/clang/test/SemaCXX/warn-new-overaligned-3.cpp b/clang/test/SemaCXX/warn-new-overaligned-3.cpp
index ba14303fb9d84..c9a57fb65089a 100644
--- a/clang/test/SemaCXX/warn-new-overaligned-3.cpp
+++ b/clang/test/SemaCXX/warn-new-overaligned-3.cpp
@@ -16,8 +16,8 @@ struct Test {
 
 void helper() {
   Test t;
-  new Test;  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
-  new Test[10];  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test;  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test[10];  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
 }
 }
 

diff  --git a/clang/test/SemaCXX/warn-new-overaligned.cpp b/clang/test/SemaCXX/warn-new-overaligned.cpp
index c5495e312dcc6..710973ccb32b5 100644
--- a/clang/test/SemaCXX/warn-new-overaligned.cpp
+++ b/clang/test/SemaCXX/warn-new-overaligned.cpp
@@ -12,8 +12,8 @@ struct Test {
 
 void helper() {
   Test t;
-  new Test;  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
-  new Test[10];  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test;  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test[10];  // expected-warning {{type 'test1::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
 }
 }
 
@@ -25,8 +25,8 @@ class Test {
 
 void helper() {
   Test t;
-  new Test;  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
-  new Test[10];  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test;  // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test[10];  // expected-warning {{type 'test2::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
 }
 }
 
@@ -47,7 +47,7 @@ struct Test {
 void helper() {
   Test t;
   new Test;
-  new Test[10];  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test[10];  // expected-warning {{type 'test3::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
 }
 }
 
@@ -67,7 +67,7 @@ struct Test {
 
 void helper() {
   Test t;
-  new Test;  // expected-warning {{type 'Test' requires 256 bytes of alignment and the default allocator only guarantees}}
+  new Test;  // expected-warning {{type 'test4::Test' requires 256 bytes of alignment and the default allocator only guarantees}}
   new Test[10];
 }
 }

diff  --git a/clang/test/SemaCXX/warn-reinterpret-base-class.cpp b/clang/test/SemaCXX/warn-reinterpret-base-class.cpp
index d8054449c99d0..55bc777ce2e0f 100644
--- a/clang/test/SemaCXX/warn-reinterpret-base-class.cpp
+++ b/clang/test/SemaCXX/warn-reinterpret-base-class.cpp
@@ -20,7 +20,7 @@ class DVA : public virtual A {
 };
 class DDVA : public virtual DA {
 };
-class DMA : public virtual A, public virtual DA { //expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    class DMA -> A\n    class DMA -> DA -> A}}
+class DMA : public virtual A, public virtual DA { //expected-warning{{direct base 'A' is inaccessible due to ambiguity:\n    class DMA -> class A\n    class DMA -> class DA -> class A}}
 };
 
 class B;
@@ -46,7 +46,7 @@ void reinterpret_not_defined_class(B *b, C *c) {
 namespace BaseMalformed {
   struct A; // expected-note {{forward declaration of 'BaseMalformed::A'}}
   struct B {
-    A a; // expected-error {{field has incomplete type 'A'}}
+    A a; // expected-error {{field has incomplete type 'BaseMalformed::A'}}
   };
   struct C : public B {} c;
   B *b = reinterpret_cast<B *>(&c);
@@ -57,7 +57,7 @@ namespace ChildMalformed {
   struct A; // expected-note {{forward declaration of 'ChildMalformed::A'}}
   struct B {};
   struct C : public B {
-    A a; // expected-error {{field has incomplete type 'A'}}
+    A a; // expected-error {{field has incomplete type 'ChildMalformed::A'}}
   } c;
   B *b = reinterpret_cast<B *>(&c);
 } // end anonymous namespace
@@ -66,7 +66,7 @@ namespace ChildMalformed {
 namespace BaseBaseMalformed {
   struct A; // expected-note {{forward declaration of 'BaseBaseMalformed::A'}}
   struct Y {};
-  struct X { A a; }; // expected-error {{field has incomplete type 'A'}}
+  struct X { A a; }; // expected-error {{field has incomplete type 'BaseBaseMalformed::A'}}
   struct B : Y, X {};
   struct C : B {} c;
   B *p = reinterpret_cast<B*>(&c);
@@ -82,7 +82,7 @@ namespace InheritanceMalformed {
 // Virtual base class outside upcast base-chain is malformed.
 namespace VBaseMalformed{
   struct A; // expected-note {{forward declaration of 'VBaseMalformed::A'}}
-  struct X { A a; };  // expected-error {{field has incomplete type 'A'}}
+  struct X { A a; };  // expected-error {{field has incomplete type 'VBaseMalformed::A'}}
   struct B : public virtual X {};
   struct C : B {} c;
   B *p = reinterpret_cast<B*>(&c);

diff  --git a/clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp b/clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp
index 0613338945978..47588660d2049 100644
--- a/clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp
+++ b/clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp
@@ -91,7 +91,7 @@ struct S2: virtual S1 { };
 struct S3 { };
 
 struct S4: virtual S3, S2 {
-  S4() : S2(), // expected-warning {{base class 'S2' will be initialized after base 'S3'}}
+  S4() : S2(), // expected-warning {{base class 'T1::S2' will be initialized after base 'T1::S3'}}
     S3() { };
 };
 }

diff  --git a/clang/test/SemaCXX/warn-thread-safety-parsing.cpp b/clang/test/SemaCXX/warn-thread-safety-parsing.cpp
index d014fc3a87bda..b6e9c052a241a 100644
--- a/clang/test/SemaCXX/warn-thread-safety-parsing.cpp
+++ b/clang/test/SemaCXX/warn-thread-safety-parsing.cpp
@@ -1485,7 +1485,7 @@ class Foo {
   int a GUARDED_BY(mu1_);
   int b GUARDED_BY(mu2_);
   int c GUARDED_BY(mu3_);  // \
-    // expected-warning {{'guarded_by' attribute requires arguments whose type is annotated with 'capability' attribute; type here is 'Derived3'}}
+    // expected-warning {{'guarded_by' attribute requires arguments whose type is annotated with 'capability' attribute; type here is 'InheritanceTest::Derived3'}}
 
   void foo() EXCLUSIVE_LOCKS_REQUIRED(mu1_, mu2_) {
     a = 0;

diff  --git a/clang/test/SemaHLSL/prohibit_pointer.hlsl b/clang/test/SemaHLSL/prohibit_pointer.hlsl
index 6c1f833a6f073..4a328f6f15569 100644
--- a/clang/test/SemaHLSL/prohibit_pointer.hlsl
+++ b/clang/test/SemaHLSL/prohibit_pointer.hlsl
@@ -75,7 +75,7 @@ struct Fish {
 int gone_fishing() {
   Fish F;
   int Result = *F; // user-defined dereference operators work
-  // expected-error at +1 {{member reference type 'Fins' is not a pointer}}
+  // expected-error at +1 {{member reference type 'Fish::Fins' is not a pointer}}
   Result += F->Left;
   return Result;
 }

diff  --git a/clang/test/SemaObjCXX/arc-templates.mm b/clang/test/SemaObjCXX/arc-templates.mm
index 97854dff8c1ac..2a7d11f9d1f9e 100644
--- a/clang/test/SemaObjCXX/arc-templates.mm
+++ b/clang/test/SemaObjCXX/arc-templates.mm
@@ -102,8 +102,8 @@ void test_X0() {
 template<typename T>
 struct make_weak_fail {
   typedef T T_type;
-  typedef __weak T_type type; // expected-error{{the type 'T_type' (aka '__weak id') is already explicitly ownership-qualified}} \
-  // expected-error{{the type 'T_type' (aka '__strong id') is already explicitly ownership-qualified}}
+  typedef __weak T_type type; // expected-error{{the type 'make_weak_fail<__weak id>::T_type' (aka '__weak id') is already explicitly ownership-qualified}} \
+  // expected-error{{the type 'make_weak_fail<id>::T_type' (aka '__strong id') is already explicitly ownership-qualified}}
 };
 
 int check_make_weak_fail0[is_same<make_weak_fail<__weak id>::type, __weak id>::value? 1 : -1]; // expected-note{{in instantiation of template class 'make_weak_fail<__weak id>' requested here}}

diff  --git a/clang/test/SemaObjCXX/blocks.mm b/clang/test/SemaObjCXX/blocks.mm
index 644a269feeaef..5f7352417201b 100644
--- a/clang/test/SemaObjCXX/blocks.mm
+++ b/clang/test/SemaObjCXX/blocks.mm
@@ -172,6 +172,6 @@ int test(int outerp) {
 
 B1 test_move() {
   __block B0 b;
-  return b; // expected-error {{no viable conversion from returned value of type 'B0' to function return type 'B1'}}
+  return b; // expected-error {{no viable conversion from returned value of type 'MoveBlockVariable::B0' to function return type 'MoveBlockVariable::B1'}}
 }
 }

diff  --git a/clang/test/SemaSYCL/float128.cpp b/clang/test/SemaSYCL/float128.cpp
index b1a022216aaff..5b1a93d53d8b3 100644
--- a/clang/test/SemaSYCL/float128.cpp
+++ b/clang/test/SemaSYCL/float128.cpp
@@ -32,8 +32,8 @@ void usage() {
   // expected-error at +2 {{'A' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}}
   // expected-error at +1 {{'field1' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}}
   C.field1 = A;
-  // expected-error at +2 {{expression requires 128 bit size 'BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}}
-  // expected-error at +1 {{'bigfield' requires 128 bit size 'BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}}
+  // expected-error at +2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}}
+  // expected-error at +1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}}
   C.bigfield += 1.0;
 
   // expected-error at +1 {{'A' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}}

diff  --git a/clang/test/SemaSYCL/int128.cpp b/clang/test/SemaSYCL/int128.cpp
index 6e5b498a7eef2..bfa9a04188027 100644
--- a/clang/test/SemaSYCL/int128.cpp
+++ b/clang/test/SemaSYCL/int128.cpp
@@ -30,8 +30,8 @@ void usage() {
   // expected-error at +2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}}
   // expected-error at +1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}}
   C.field1 = A;
-  // expected-error at +2 {{expression requires 128 bit size 'BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}}
-  // expected-error at +1 {{'bigfield' requires 128 bit size 'BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}}
+  // expected-error at +2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}}
+  // expected-error at +1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}}
   C.bigfield += 1.0;
 
   // expected-error at +1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}}

diff  --git a/clang/test/SemaTemplate/anonymous-union.cpp b/clang/test/SemaTemplate/anonymous-union.cpp
index df590f21c1f4e..75d53aa5345f1 100644
--- a/clang/test/SemaTemplate/anonymous-union.cpp
+++ b/clang/test/SemaTemplate/anonymous-union.cpp
@@ -8,7 +8,7 @@ struct T0 {
   };
 };
 template <typename T>
-struct T1 : public T0, public T { //expected-warning{{direct base 'T0' is inaccessible due to ambiguity:\n    struct T1<struct A> -> T0\n    struct T1<struct A> -> A -> T0}}
+struct T1 : public T0, public T { //expected-warning{{direct base 'T0' is inaccessible due to ambiguity:\n    struct T1<struct A> -> struct T0\n    struct T1<struct A> -> struct A -> struct T0}}
   void f0() { 
     m0 = 0; // expected-error{{ambiguous conversion}}
   } 

diff  --git a/clang/test/SemaTemplate/attributes.cpp b/clang/test/SemaTemplate/attributes.cpp
index a7081e83470aa..742f5d2be801c 100644
--- a/clang/test/SemaTemplate/attributes.cpp
+++ b/clang/test/SemaTemplate/attributes.cpp
@@ -565,21 +565,21 @@ namespace preferred_name {
   using Z = const C<double>; // expected-note {{'Z' declared here}}
   template<typename T> struct [[clang::preferred_name(C<int>)]] C; // expected-error {{argument 'C<int>' to 'preferred_name' attribute is not a typedef for a specialization of 'C'}}
   template<typename T> struct [[clang::preferred_name(X), clang::preferred_name(Y)]] C;
-  template<typename T> struct [[clang::preferred_name(const X)]] C; // expected-error {{argument 'const X'}}
-  template<typename T> struct [[clang::preferred_name(Z)]] C; // expected-error {{argument 'Z' (aka 'const C<double>')}}
+  template<typename T> struct [[clang::preferred_name(const X)]] C; // expected-error {{argument 'const preferred_name::X'}}
+  template<typename T> struct [[clang::preferred_name(Z)]] C; // expected-error {{argument 'preferred_name::Z' (aka 'const C<double>')}}
   template<typename T> struct C {};
 
   // CHECK: ClassTemplateDecl {{.*}} <line:[[@LINE-10]]:{{.*}} C
   // CHECK:   ClassTemplateSpecializationDecl {{.*}} struct C definition
   // CHECK:     TemplateArgument type 'int'
   // CHECK-NOT: PreferredNameAttr
-  // CHECK:     PreferredNameAttr {{.*}} X
+  // CHECK:     PreferredNameAttr {{.*}} preferred_name::X
   // CHECK-NOT: PreferredNameAttr
   // CHECK:     CXXRecordDecl
   // CHECK:   ClassTemplateSpecializationDecl {{.*}} struct C definition
   // CHECK:     TemplateArgument type 'float'
   // CHECK-NOT: PreferredNameAttr
-  // CHECK:     PreferredNameAttr {{.*}} Y
+  // CHECK:     PreferredNameAttr {{.*}} preferred_name::Y
   // CHECK-NOT: PreferredNameAttr
   // CHECK:     CXXRecordDecl
   // CHECK:   ClassTemplateSpecializationDecl {{.*}} struct C definition

diff  --git a/clang/test/SemaTemplate/deduction-guide.cpp b/clang/test/SemaTemplate/deduction-guide.cpp
index 0638cca43baf4..3ff2106aca45b 100644
--- a/clang/test/SemaTemplate/deduction-guide.cpp
+++ b/clang/test/SemaTemplate/deduction-guide.cpp
@@ -43,11 +43,10 @@ using AT = A<int[3], int, int, short>;
 // CHECK:   `-ParmVarDecl {{.*}} 'short (*)[4]'
 // CHECK: FunctionProtoType {{.*}} 'auto (X<Ps...>, Ts (*)[Ns]...) -> A<T, Ts...>' dependent trailing_return
 // CHECK: |-InjectedClassNameType {{.*}} 'A<T, Ts...>' dependent
-// CHECK: |-ElaboratedType {{.*}} 'X<Ps...>' sugar dependent
-// CHECK: | `-TemplateSpecializationType {{.*}} 'X<Ps...>' dependent X
-// CHECK: |   `-TemplateArgument expr
-// CHECK: |     `-PackExpansionExpr {{.*}} 'T *'
-// CHECK: |       `-DeclRefExpr {{.*}} 'T *' NonTypeTemplateParm {{.*}} 'Ps' 'T *'
+// CHECK: |-TemplateSpecializationType {{.*}} 'X<Ps...>' dependent X
+// CHECK: | `-TemplateArgument expr
+// CHECK: |   `-PackExpansionExpr {{.*}} 'T *'
+// CHECK: |     `-DeclRefExpr {{.*}} 'T *' NonTypeTemplateParm {{.*}} 'Ps' 'T *'
 // CHECK: `-PackExpansionType {{.*}} 'Ts (*)[Ns]...' dependent
 // CHECK:   `-PointerType {{.*}} 'Ts (*)[Ns]' dependent contains_unexpanded_pack
 // CHECK:     `-ParenType {{.*}} 'Ts[Ns]' sugar dependent contains_unexpanded_pack
@@ -118,9 +117,8 @@ using CT = C<int>;
 // CHECK: |-InjectedClassNameType {{.*}} 'C<A>' dependent
 // CHECK: |-TemplateTypeParmType {{.*}} 'A' dependent depth 0 index 0
 // CHECK: | `-TemplateTypeParm {{.*}} 'A'
-// CHECK: |-ElaboratedType {{.*}} 'Y<>' sugar dependent
-// CHECK: | `-TemplateSpecializationType {{.*}} 'Y<>' dependent Y
-// CHECK: |   `-TemplateArgument template
+// CHECK: |-TemplateSpecializationType {{.*}} 'Y<>' dependent Y
+// CHECK: | `-TemplateArgument template 
 // CHECK: `-TemplateTypeParmType {{.*}} 'type-parameter-0-2' dependent depth 0 index 2
 
 template<typename ...T> struct D { // expected-note {{candidate}}

diff  --git a/clang/test/SemaTemplate/default-expr-arguments-3.cpp b/clang/test/SemaTemplate/default-expr-arguments-3.cpp
index 4bbdb6f91ec7e..4d04209e110b3 100644
--- a/clang/test/SemaTemplate/default-expr-arguments-3.cpp
+++ b/clang/test/SemaTemplate/default-expr-arguments-3.cpp
@@ -4,7 +4,7 @@
 // CHECK: FunctionDecl {{.*}} used func 'void ()'
 // CHECK-NEXT: TemplateArgument type 'int'
 // CHECK: LambdaExpr {{.*}} '(lambda at
-// CHECK: ParmVarDecl {{.*}} used f 'foo':'foo' cinit
+// CHECK: ParmVarDecl {{.*}} used f 'foo' cinit
 // CHECK-NEXT: DeclRefExpr {{.*}} 'foo' EnumConstant {{.*}} 'a' 'foo'
 
 namespace PR28795 {
@@ -23,7 +23,7 @@ namespace PR28795 {
 // CHECK: ClassTemplateSpecializationDecl {{.*}} struct class2 definition
 // CHECK: TemplateArgument type 'int'
 // CHECK: LambdaExpr {{.*}} '(lambda at
-// CHECK: ParmVarDecl {{.*}} used f 'foo':'foo' cinit
+// CHECK: ParmVarDecl {{.*}} used f 'foo' cinit
 // CHECK-NEXT: DeclRefExpr {{.*}} 'foo' EnumConstant {{.*}} 'a' 'foo'
 
 // Template struct case:
@@ -41,7 +41,7 @@ template struct class2<int>;
 // CHECK-NEXT: FunctionDecl {{.*}} f1 'void ()'
 // CHECK: FunctionDecl {{.*}} f1 'void ()'
 // CHECK-NEXT: TemplateArgument type 'int'
-// CHECK: ParmVarDecl {{.*}} n 'foo':'foo' cinit
+// CHECK: ParmVarDecl {{.*}} n 'foo' cinit
 // CHECK-NEXT: DeclRefExpr {{.*}} 'foo' EnumConstant {{.*}} 'a' 'foo'
 
 template<typename T>

diff  --git a/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp
index f9f9c8e6e940b..9d12c41e81bb0 100644
--- a/clang/test/SemaTemplate/dependent-names.cpp
+++ b/clang/test/SemaTemplate/dependent-names.cpp
@@ -344,11 +344,11 @@ X3::Y<>::iterator it; // expected-error {{no type named 'iterator' in 'PR11421::
 namespace rdar12629723 {
   template<class T>
   struct X {
-    struct C : public C { }; // expected-error{{circular inheritance between 'C' and 'rdar12629723::X::C'}}
+    struct C : public C { }; // expected-error{{circular inheritance between 'rdar12629723::X::C' and 'rdar12629723::X::C'}}
 
     struct B;
 
-    struct A : public B {  // expected-note{{'A' declared here}}
+    struct A : public B {  // expected-note{{'rdar12629723::X::A' declared here}}
       virtual void foo() { }
     };
 
@@ -357,7 +357,7 @@ namespace rdar12629723 {
   };
 
   template<class T>
-  struct X<T>::B : public A {  // expected-error{{circular inheritance between 'A' and 'rdar12629723::X::B'}}
+  struct X<T>::B : public A {  // expected-error{{circular inheritance between 'rdar12629723::X::A' and 'rdar12629723::X::B'}}
     virtual void foo() { }
   };
 }

diff  --git a/clang/test/SemaTemplate/instantiate-self.cpp b/clang/test/SemaTemplate/instantiate-self.cpp
index 4999a4ad3784d..78f54ae7752f6 100644
--- a/clang/test/SemaTemplate/instantiate-self.cpp
+++ b/clang/test/SemaTemplate/instantiate-self.cpp
@@ -5,7 +5,7 @@
 namespace test1 {
   template<typename T> struct A {
     struct B { // expected-note {{not complete until the closing '}'}}
-      B b; // expected-error {{has incomplete type 'B'}}
+      B b; // expected-error {{has incomplete type 'test1::A<int>::B'}}
     };
     B b; // expected-note {{in instantiation of}}
   };

diff  --git a/clang/test/SemaTemplate/member-access-ambig.cpp b/clang/test/SemaTemplate/member-access-ambig.cpp
index 5c2d7617033fe..a28698bb17e20 100644
--- a/clang/test/SemaTemplate/member-access-ambig.cpp
+++ b/clang/test/SemaTemplate/member-access-ambig.cpp
@@ -48,7 +48,7 @@ namespace AddrOfMember {
   typedef int (A::*P);
   template<typename T> struct S : T {
     void f() {
-      P(&T::X) // expected-error {{cannot cast from type 'int *' to member pointer type 'P'}}
+      P(&T::X) // expected-error {{cannot cast from type 'int *' to member pointer type 'AddrOfMember::P'}}
           == &A::X;
     }
   };

diff  --git a/clang/test/SemaTemplate/member-access-expr.cpp b/clang/test/SemaTemplate/member-access-expr.cpp
index d04054784245e..d6627b954a287 100644
--- a/clang/test/SemaTemplate/member-access-expr.cpp
+++ b/clang/test/SemaTemplate/member-access-expr.cpp
@@ -156,7 +156,7 @@ namespace test6 {
     void get(B **ptr) {
       // It's okay if at some point we figure out how to diagnose this
       // at instantiation time.
-      *ptr = field; // expected-error {{incompatible pointer types assigning to 'B *' from 'A *'}}
+      *ptr = field; // expected-error {{incompatible pointer types assigning to 'test6::B *' from 'test6::A *'}}
     }
   };
 }

diff  --git a/clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp b/clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp
index 7856a0a16307b..93b07d1cd06dd 100644
--- a/clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp
+++ b/clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp
@@ -217,8 +217,8 @@ template <typename T> struct B : T {
 };
 
 template <typename T> struct C : T {
-  int     foo() { return b; }      // expected-error {{no member named 'b' in 'PR16014::C<A>'}} expected-warning {{lookup into dependent bases}}
-  int    *bar() { return &b; }     // expected-error {{no member named 'b' in 'PR16014::C<A>'}} expected-warning {{lookup into dependent bases}}
+  int     foo() { return b; }      // expected-error {{no member named 'b' in 'PR16014::C<PR16014::A>'}} expected-warning {{lookup into dependent bases}}
+  int    *bar() { return &b; }     // expected-error {{no member named 'b' in 'PR16014::C<PR16014::A>'}} expected-warning {{lookup into dependent bases}}
   int     baz() { return T::b; }   // expected-error {{no member named 'b' in 'PR16014::A'}}
   int T::*qux() { return &T::b; }  // expected-error {{no member named 'b' in 'PR16014::A'}}
   int T::*fuz() { return &U::a; }  // expected-error {{use of undeclared identifier 'U'}} \

diff  --git a/clang/test/SemaTemplate/pr52909.cpp b/clang/test/SemaTemplate/pr52909.cpp
index 7cd3973b7f6cd..a17ede44fce08 100644
--- a/clang/test/SemaTemplate/pr52909.cpp
+++ b/clang/test/SemaTemplate/pr52909.cpp
@@ -49,7 +49,7 @@ struct A {
 };
 
 static_assert(C<A>); // expected-error {{static_assert failed}}
-  // expected-note at -1 {{because 'A' does not satisfy 'C'}}
+  // expected-note at -1 {{because 'PR52909b::A' does not satisfy 'C'}}
 
 } // namespace PR52909b
 
@@ -66,6 +66,6 @@ struct S {
 };
 
 static_assert(C<S>); // expected-error {{static_assert failed}}
-  // expected-note at -1 {{because 'S' does not satisfy 'C'}}
+  // expected-note at -1 {{because 'PR53075::S' does not satisfy 'C'}}
 
 } // namespace PR53075

diff  --git a/clang/test/SemaTemplate/pr52970.cpp b/clang/test/SemaTemplate/pr52970.cpp
index eaa9b35d9a52d..7585fba412081 100644
--- a/clang/test/SemaTemplate/pr52970.cpp
+++ b/clang/test/SemaTemplate/pr52970.cpp
@@ -33,7 +33,7 @@ concept C = requires(T t) { t.a.b; };
 static_assert(C<Good>);
 static_assert(!C<Bad>);
 static_assert(C<Bad>); // cxx20-error {{static_assert failed}}
-  // cxx20-note at -1 {{because 'Bad' does not satisfy 'C'}}
+  // cxx20-note at -1 {{because 'DotFollowingFunctionName::Bad' does not satisfy 'C'}}
 #endif
 } // namespace DotFollowingFunctionName
 
@@ -58,6 +58,6 @@ concept C = requires(T t) { t.begin(); };
 static_assert(C<Good>);
 static_assert(!C<Bad>);
 static_assert(C<Bad>); // cxx20-error {{static_assert failed}}
-  // cxx20-note at -1 {{because 'Bad' (aka 'Holder<Incomplete> *') does not satisfy 'C'}}
+  // cxx20-note at -1 {{because 'DotFollowingPointer::Bad' (aka 'Holder<Incomplete> *') does not satisfy 'C'}}
 #endif
 } // namespace DotFollowingPointer

diff  --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp
index 8c290cb69772d..1fb04f5df3105 100644
--- a/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp
+++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp
@@ -131,7 +131,7 @@ namespace DeduceDifferentType {
 
   struct X { constexpr operator int() { return 0; } } x;
   template<X &> struct C {};
-  template<int N> int c(C<N>); // expected-error {{value of type 'int' is not implicitly convertible to 'X &'}}
+  template<int N> int c(C<N>); // expected-error {{value of type 'int' is not implicitly convertible to 'DeduceDifferentType::X &'}}
   int c_imp = c(C<x>()); // expected-error {{no matching function}}
   int c_exp = c<x>(C<x>()); // expected-error {{no matching function}}
 

diff  --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
index 43c6723b05279..ad9cfc7cdd9de 100644
--- a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
+++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
@@ -67,14 +67,14 @@ namespace ClassNTTP {
   static_assert(&id<A{1,2}> == &id<a>);
   static_assert(&id<A{1,3}> != &id<a>);
 
-  int k = id<1>; // expected-error {{no viable conversion from 'int' to 'A'}}
+  int k = id<1>; // expected-error {{no viable conversion from 'int' to 'ClassNTTP::A'}}
 
   struct B {
     constexpr B() {}
     constexpr B(int) = delete; // expected-note {{here}}
   };
   template<B> struct Q {}; // expected-note {{passing argument to parameter here}}
-  Q<1> q; // expected-error {{conversion function from 'int' to 'B' invokes a deleted function}}
+  Q<1> q; // expected-error {{conversion function from 'int' to 'ClassNTTP::B' invokes a deleted function}}
 
   struct C {
     constexpr C() {}
@@ -91,7 +91,7 @@ namespace ConvertedConstant {
   };
   template <A> struct X {};
   void f(X<1.0f>) {} // OK, user-defined conversion
-  void f(X<2>) {} // expected-error {{conversion from 'int' to 'A' is not allowed in a converted constant expression}}
+  void f(X<2>) {} // expected-error {{conversion from 'int' to 'ConvertedConstant::A' is not allowed in a converted constant expression}}
 }
 
 namespace CopyCounting {

diff  --git a/clang/test/SemaTemplate/virtual-member-functions.cpp b/clang/test/SemaTemplate/virtual-member-functions.cpp
index cc4d51e7dc43f..3578350d8f847 100644
--- a/clang/test/SemaTemplate/virtual-member-functions.cpp
+++ b/clang/test/SemaTemplate/virtual-member-functions.cpp
@@ -92,12 +92,12 @@ namespace PR7114 {
   public:
     class Inner : public A { };
 #if __cplusplus <= 199711L
-// expected-error at -2{{base class 'A' has private destructor}}
+// expected-error at -2{{base class 'PR7114::A' has private destructor}}
 #else
 // expected-error at -4 2 {{deleted function '~Inner' cannot override a non-deleted function}}
-// expected-note at -5 2 {{destructor of 'Inner' is implicitly deleted because base class 'A' has an inaccessible destructor}}
+// expected-note at -5 2 {{destructor of 'Inner' is implicitly deleted because base class 'PR7114::A' has an inaccessible destructor}}
 #ifdef MSABI
-// expected-note at -7 1 {{destructor of 'Inner' is implicitly deleted because base class 'A' has an inaccessible destructor}}
+// expected-note at -7 1 {{destructor of 'Inner' is implicitly deleted because base class 'PR7114::A' has an inaccessible destructor}}
 #endif
 #endif
 
@@ -140,7 +140,7 @@ namespace PR7114 {
   struct X : A {
 #if __cplusplus >= 201103L
 // expected-error at -2 {{deleted function '~X' cannot override a non-deleted function}}
-// expected-note at -3  {{destructor of 'X<int>' is implicitly deleted because base class 'A' has an inaccessible destructor}}
+// expected-note at -3  {{destructor of 'X<int>' is implicitly deleted because base class 'PR7114::A' has an inaccessible destructor}}
 #endif
     void f() { }
   };

diff  --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp
index 62d8d82ba9a7c..d0edbcb40ab8e 100644
--- a/clang/unittests/AST/ASTImporterTest.cpp
+++ b/clang/unittests/AST/ASTImporterTest.cpp
@@ -420,15 +420,14 @@ TEST_P(ImportExpr, ImportParenListExpr) {
       "typedef dummy<int> declToImport;"
       "template class dummy<int>;",
       Lang_CXX03, "", Lang_CXX03, Verifier,
-      typedefDecl(hasType(elaboratedType(namesType(templateSpecializationType(
+      typedefDecl(hasType(templateSpecializationType(
           hasDeclaration(classTemplateSpecializationDecl(hasSpecializedTemplate(
-              classTemplateDecl(hasTemplateDecl(cxxRecordDecl(hasMethod(
-                  allOf(hasName("f"),
-                        hasBody(compoundStmt(has(declStmt(hasSingleDecl(varDecl(
-                            hasInitializer(parenListExpr(has(unaryOperator(
-                                hasOperatorName("*"),
-                                hasUnaryOperand(
-                                    cxxThisExpr())))))))))))))))))))))))));
+              classTemplateDecl(hasTemplateDecl(cxxRecordDecl(hasMethod(allOf(
+                  hasName("f"),
+                  hasBody(compoundStmt(has(declStmt(hasSingleDecl(
+                      varDecl(hasInitializer(parenListExpr(has(unaryOperator(
+                          hasOperatorName("*"),
+                          hasUnaryOperand(cxxThisExpr())))))))))))))))))))))));
 }
 
 TEST_P(ImportExpr, ImportSwitch) {
@@ -515,19 +514,20 @@ TEST_P(ImportExpr, ImportPredefinedExpr) {
 
 TEST_P(ImportExpr, ImportInitListExpr) {
   MatchVerifier<Decl> Verifier;
-  testImport("void declToImport() {"
-             "  struct point { double x; double y; };"
-             "  point ptarray[10] = { [2].y = 1.0, [2].x = 2.0,"
-             "                        [0].x = 1.0 }; }",
-             Lang_CXX03, "", Lang_CXX03, Verifier,
-             functionDecl(hasDescendant(initListExpr(
-                 has(cxxConstructExpr(requiresZeroInitialization())),
-                 has(initListExpr(
-                     hasType(asString("point")), has(floatLiteral(equals(1.0))),
-                     has(implicitValueInitExpr(hasType(asString("double")))))),
-                 has(initListExpr(hasType(asString("point")),
-                                  has(floatLiteral(equals(2.0))),
-                                  has(floatLiteral(equals(1.0)))))))));
+  testImport(
+      "void declToImport() {"
+      "  struct point { double x; double y; };"
+      "  point ptarray[10] = { [2].y = 1.0, [2].x = 2.0,"
+      "                        [0].x = 1.0 }; }",
+      Lang_CXX03, "", Lang_CXX03, Verifier,
+      functionDecl(hasDescendant(initListExpr(
+          has(cxxConstructExpr(requiresZeroInitialization())),
+          has(initListExpr(
+              hasType(asString("struct point")), has(floatLiteral(equals(1.0))),
+              has(implicitValueInitExpr(hasType(asString("double")))))),
+          has(initListExpr(hasType(asString("struct point")),
+                           has(floatLiteral(equals(2.0))),
+                           has(floatLiteral(equals(1.0)))))))));
 }
 
 const internal::VariadicDynCastAllOfMatcher<Expr, CXXDefaultInitExpr>
@@ -582,8 +582,8 @@ TEST_P(ImportType, ImportUsingType) {
   testImport("struct C {};"
              "void declToImport() { using ::C; new C{}; }",
              Lang_CXX11, "", Lang_CXX11, Verifier,
-             functionDecl(hasDescendant(cxxNewExpr(hasType(pointerType(
-                 pointee(elaboratedType(namesType(usingType())))))))));
+             functionDecl(hasDescendant(
+                 cxxNewExpr(hasType(pointerType(pointee(usingType())))))));
 }
 
 TEST_P(ImportDecl, ImportFunctionTemplateDecl) {
@@ -680,8 +680,7 @@ TEST_P(ImportType, ImportDeducedTemplateSpecialization) {
              "class C { public: C(T); };"
              "C declToImport(123);",
              Lang_CXX17, "", Lang_CXX17, Verifier,
-             varDecl(hasType(elaboratedType(
-                 namesType(deducedTemplateSpecializationType())))));
+             varDecl(hasType(deducedTemplateSpecializationType())));
 }
 
 const internal::VariadicDynCastAllOfMatcher<Stmt, SizeOfPackExpr>
@@ -898,9 +897,9 @@ TEST_P(ImportDecl, ImportUsingTemplate) {
              "void declToImport() {"
              "using ns::S;  X<S> xi; }",
              Lang_CXX11, "", Lang_CXX11, Verifier,
-             functionDecl(hasDescendant(varDecl(hasTypeLoc(elaboratedTypeLoc(
-                 hasNamedTypeLoc(templateSpecializationTypeLoc(
-                     hasAnyTemplateArgumentLoc(templateArgumentLoc())))))))));
+             functionDecl(
+                 hasDescendant(varDecl(hasTypeLoc(templateSpecializationTypeLoc(
+                     hasAnyTemplateArgumentLoc(templateArgumentLoc())))))));
 }
 
 TEST_P(ImportDecl, ImportUsingEnumDecl) {
@@ -921,9 +920,8 @@ TEST_P(ImportDecl, ImportUsingPackDecl) {
       "template<typename ...T> struct C : T... { using T::operator()...; };"
       "C<A, B> declToImport;",
       Lang_CXX20, "", Lang_CXX20, Verifier,
-      varDecl(hasType(elaboratedType(namesType(templateSpecializationType(
-          hasDeclaration(classTemplateSpecializationDecl(
-              hasDescendant(usingPackDecl())))))))));
+      varDecl(hasType(templateSpecializationType(hasDeclaration(
+          classTemplateSpecializationDecl(hasDescendant(usingPackDecl())))))));
 }
 
 /// \brief Matches shadow declarations introduced into a scope by a
@@ -7146,7 +7144,7 @@ TEST_P(CTAD, DeductionGuideShouldReferToANonLocalTypedef) {
   ParmVarDecl *Param = Guide->getParamDecl(0);
   // The type of the first param (which is a typedef) should match the typedef
   // in the global scope.
-  EXPECT_EQ(Param->getType()->getAs<TypedefType>()->getDecl(), Typedef);
+  EXPECT_EQ(Param->getType()->castAs<TypedefType>()->getDecl(), Typedef);
 }
 
 TEST_P(CTAD, DeductionGuideShouldReferToANonLocalTypedefInParamPtr) {
@@ -7187,7 +7185,7 @@ TEST_P(CTAD, DeductionGuideShouldCopyALocalTypedef) {
   auto *Typedef = FirstDeclMatcher<TypedefNameDecl>().match(
       TU, typedefNameDecl(hasName("U")));
   ParmVarDecl *Param = Guide->getParamDecl(0);
-  EXPECT_NE(Param->getType()->getAs<TypedefType>()->getDecl(), Typedef);
+  EXPECT_NE(Param->getType()->castAs<TypedefType>()->getDecl(), Typedef);
 }
 
 INSTANTIATE_TEST_SUITE_P(ParameterizedTests, CTAD,

diff  --git a/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp
index f51d50ac94c42..3553c3012cd4e 100644
--- a/clang/unittests/AST/ASTTraverserTest.cpp
+++ b/clang/unittests/AST/ASTTraverserTest.cpp
@@ -1211,9 +1211,9 @@ void decompTuple()
 CXXRecordDecl 'Record'
 |-CXXRecordDecl 'Record'
 |-CXXConstructorDecl 'Record'
-| |-CXXCtorInitializer 'Simple'
+| |-CXXCtorInitializer 'struct Simple'
 | | `-CXXConstructExpr
-| |-CXXCtorInitializer 'Other'
+| |-CXXCtorInitializer 'struct Other'
 | | `-CXXConstructExpr
 | |-CXXCtorInitializer 'm_i'
 | | `-IntegerLiteral
@@ -1234,7 +1234,7 @@ CXXRecordDecl 'Record'
               R"cpp(
 CXXRecordDecl 'Record'
 |-CXXConstructorDecl 'Record'
-| |-CXXCtorInitializer 'Simple'
+| |-CXXCtorInitializer 'struct Simple'
 | | `-CXXConstructExpr
 | |-CXXCtorInitializer 'm_i'
 | | `-IntegerLiteral

diff  --git a/clang/unittests/AST/TypePrinterTest.cpp b/clang/unittests/AST/TypePrinterTest.cpp
index 322a1b87fb1f6..12801a7018125 100644
--- a/clang/unittests/AST/TypePrinterTest.cpp
+++ b/clang/unittests/AST/TypePrinterTest.cpp
@@ -60,7 +60,7 @@ TEST(TypePrinter, TemplateId) {
       [](PrintingPolicy &Policy) { Policy.FullyQualifiedName = false; }));
 
   ASSERT_TRUE(PrintedTypeMatches(
-      Code, {}, Matcher, "const Type<T> &",
+      Code, {}, Matcher, "const N::Type<T> &",
       [](PrintingPolicy &Policy) { Policy.FullyQualifiedName = true; }));
 }
 

diff  --git a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
index 752a736ae800e..7811402199ccb 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
@@ -1348,14 +1348,15 @@ TEST_P(ASTMatchersTest, HasType_MatchesAsString) {
 
   EXPECT_TRUE(
       matches("class Y { public: void x(); }; void z() {Y* y; y->x(); }",
-              cxxMemberCallExpr(on(hasType(asString("Y *"))))));
+              cxxMemberCallExpr(on(hasType(asString("class Y *"))))));
   EXPECT_TRUE(
       matches("class X { void x(int x) {} };",
               cxxMethodDecl(hasParameter(0, hasType(asString("int"))))));
   EXPECT_TRUE(matches("namespace ns { struct A {}; }  struct B { ns::A a; };",
                       fieldDecl(hasType(asString("ns::A")))));
-  EXPECT_TRUE(matches("namespace { struct A {}; }  struct B { A a; };",
-                      fieldDecl(hasType(asString("A")))));
+  EXPECT_TRUE(
+      matches("namespace { struct A {}; }  struct B { A a; };",
+              fieldDecl(hasType(asString("struct (anonymous namespace)::A")))));
 }
 
 TEST_P(ASTMatchersTest, HasOverloadedOperatorName) {
@@ -2141,10 +2142,9 @@ TEST(ASTMatchersTest, NamesMember_CXXDependentScopeMemberExpr) {
     EXPECT_TRUE(matches(
         Code,
         cxxDependentScopeMemberExpr(
-            hasObjectExpression(declRefExpr(hasType(elaboratedType(namesType(
-                templateSpecializationType(hasDeclaration(classTemplateDecl(
-                    has(cxxRecordDecl(has(cxxMethodDecl(hasName("mem"))
-                                              .bind("templMem")))))))))))),
+            hasObjectExpression(declRefExpr(hasType(templateSpecializationType(
+                hasDeclaration(classTemplateDecl(has(cxxRecordDecl(
+                    has(cxxMethodDecl(hasName("mem")).bind("templMem")))))))))),
             memberHasSameNameAsBoundNode("templMem"))));
 
     EXPECT_TRUE(
@@ -2162,10 +2162,9 @@ TEST(ASTMatchersTest, NamesMember_CXXDependentScopeMemberExpr) {
     EXPECT_TRUE(matches(
         Code,
         cxxDependentScopeMemberExpr(
-            hasObjectExpression(declRefExpr(
-                hasType(elaboratedType(namesType(templateSpecializationType(
-                    hasDeclaration(classTemplateDecl(has(cxxRecordDecl(has(
-                        fieldDecl(hasName("mem")).bind("templMem")))))))))))),
+            hasObjectExpression(declRefExpr(hasType(templateSpecializationType(
+                hasDeclaration(classTemplateDecl(has(cxxRecordDecl(
+                    has(fieldDecl(hasName("mem")).bind("templMem")))))))))),
             memberHasSameNameAsBoundNode("templMem"))));
   }
 
@@ -2180,10 +2179,9 @@ TEST(ASTMatchersTest, NamesMember_CXXDependentScopeMemberExpr) {
     EXPECT_TRUE(matches(
         Code,
         cxxDependentScopeMemberExpr(
-            hasObjectExpression(declRefExpr(
-                hasType(elaboratedType(namesType(templateSpecializationType(
-                    hasDeclaration(classTemplateDecl(has(cxxRecordDecl(
-                        has(varDecl(hasName("mem")).bind("templMem")))))))))))),
+            hasObjectExpression(declRefExpr(hasType(templateSpecializationType(
+                hasDeclaration(classTemplateDecl(has(cxxRecordDecl(
+                    has(varDecl(hasName("mem")).bind("templMem")))))))))),
             memberHasSameNameAsBoundNode("templMem"))));
   }
   {

diff  --git a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
index d11609cce095c..195ac67c804dd 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
@@ -1809,8 +1809,7 @@ TEST_P(ASTMatchersTest, PointerType_MatchesPointersToConstTypes) {
 
 TEST_P(ASTMatchersTest, TypedefType) {
   EXPECT_TRUE(matches("typedef int X; X a;",
-                      varDecl(hasName("a"), hasType(elaboratedType(
-                                                namesType(typedefType()))))));
+                      varDecl(hasName("a"), hasType(typedefType()))));
 }
 
 TEST_P(ASTMatchersTest, TemplateSpecializationType) {
@@ -1859,7 +1858,7 @@ TEST_P(ASTMatchersTest, ElaboratedType) {
                       "N::M::D d;",
                       elaboratedType()));
   EXPECT_TRUE(matches("class C {} c;", elaboratedType()));
-  EXPECT_TRUE(matches("class C {}; C c;", elaboratedType()));
+  EXPECT_TRUE(notMatches("class C {}; C c;", elaboratedType()));
 }
 
 TEST_P(ASTMatchersTest, SubstTemplateTypeParmType) {
@@ -2180,8 +2179,7 @@ TEST_P(ASTMatchersTest,
   }
   EXPECT_TRUE(matches(
       "template <typename T> class C {}; C<char> var;",
-      varDecl(hasName("var"), hasTypeLoc(elaboratedTypeLoc(hasNamedTypeLoc(
-                                  templateSpecializationTypeLoc()))))));
+      varDecl(hasName("var"), hasTypeLoc(templateSpecializationTypeLoc()))));
 }
 
 TEST_P(
@@ -2220,12 +2218,13 @@ TEST_P(ASTMatchersTest,
 }
 
 TEST_P(ASTMatchersTest,
-       ElaboratedTypeLocTest_BindsToBareElaboratedObjectDeclaration) {
+       ElaboratedTypeLocTest_DoesNotBindToNonElaboratedObjectDeclaration) {
   if (!GetParam().isCXX()) {
     return;
   }
-  EXPECT_TRUE(matches("class C {}; C c;",
-                      varDecl(hasName("c"), hasTypeLoc(elaboratedTypeLoc()))));
+  EXPECT_TRUE(
+      notMatches("class C {}; C c;",
+                 varDecl(hasName("c"), hasTypeLoc(elaboratedTypeLoc()))));
 }
 
 TEST_P(
@@ -2234,17 +2233,19 @@ TEST_P(
   if (!GetParam().isCXX()) {
     return;
   }
-  EXPECT_TRUE(matches("namespace N { class D {}; } using N::D; D d;",
-                      varDecl(hasName("d"), hasTypeLoc(elaboratedTypeLoc()))));
+  EXPECT_TRUE(
+      notMatches("namespace N { class D {}; } using N::D; D d;",
+                 varDecl(hasName("d"), hasTypeLoc(elaboratedTypeLoc()))));
 }
 
 TEST_P(ASTMatchersTest,
-       ElaboratedTypeLocTest_BindsToBareElaboratedStructDeclaration) {
+       ElaboratedTypeLocTest_DoesNotBindToNonElaboratedStructDeclaration) {
   if (!GetParam().isCXX()) {
     return;
   }
-  EXPECT_TRUE(matches("struct s {}; s ss;",
-                      varDecl(hasName("ss"), hasTypeLoc(elaboratedTypeLoc()))));
+  EXPECT_TRUE(
+      notMatches("struct s {}; s ss;",
+                 varDecl(hasName("ss"), hasTypeLoc(elaboratedTypeLoc()))));
 }
 
 TEST_P(ASTMatchersTest, LambdaCaptureTest) {

diff  --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
index 11f293f5306d5..8b3881adc4ce0 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -187,15 +187,13 @@ TEST(TypeMatcher, MatchesDeclTypes) {
                       parmVarDecl(hasType(namedDecl(hasName("T"))))));
   // InjectedClassNameType
   EXPECT_TRUE(matches("template <typename T> struct S {"
-                      "  void f(S s);"
-                      "};",
-                      parmVarDecl(hasType(elaboratedType(
-                          namesType(injectedClassNameType()))))));
+                        "  void f(S s);"
+                        "};",
+                      parmVarDecl(hasType(injectedClassNameType()))));
   EXPECT_TRUE(notMatches("template <typename T> struct S {"
-                         "  void g(S<T> s);"
-                         "};",
-                         parmVarDecl(hasType(elaboratedType(
-                             namesType(injectedClassNameType()))))));
+                           "  void g(S<T> s);"
+                           "};",
+                         parmVarDecl(hasType(injectedClassNameType()))));
   // InjectedClassNameType -> CXXRecordDecl
   EXPECT_TRUE(matches("template <typename T> struct S {"
                         "  void f(S s);"
@@ -245,28 +243,24 @@ TEST(HasDeclaration, ElaboratedType) {
 }
 
 TEST(HasDeclaration, HasDeclarationOfTypeWithDecl) {
-  EXPECT_TRUE(matches(
-      "typedef int X; X a;",
-      varDecl(hasName("a"), hasType(elaboratedType(namesType(
-                                typedefType(hasDeclaration(decl()))))))));
+  EXPECT_TRUE(matches("typedef int X; X a;",
+                      varDecl(hasName("a"),
+                              hasType(typedefType(hasDeclaration(decl()))))));
 
   // FIXME: Add tests for other types with getDecl() (e.g. RecordType)
 }
 
 TEST(HasDeclaration, HasDeclarationOfTemplateSpecializationType) {
-  EXPECT_TRUE(matches(
-      "template <typename T> class A {}; A<int> a;",
-      varDecl(hasType(elaboratedType(namesType(templateSpecializationType(
-          hasDeclaration(namedDecl(hasName("A"))))))))));
-  EXPECT_TRUE(matches(
-      "template <typename T> class A {};"
-      "template <typename T> class B { A<T> a; };",
-      fieldDecl(hasType(elaboratedType(namesType(templateSpecializationType(
-          hasDeclaration(namedDecl(hasName("A"))))))))));
-  EXPECT_TRUE(matches(
-      "template <typename T> class A {}; A<int> a;",
-      varDecl(hasType(elaboratedType(namesType(
-          templateSpecializationType(hasDeclaration(cxxRecordDecl()))))))));
+  EXPECT_TRUE(matches("template <typename T> class A {}; A<int> a;",
+                      varDecl(hasType(templateSpecializationType(
+                        hasDeclaration(namedDecl(hasName("A"))))))));
+  EXPECT_TRUE(matches("template <typename T> class A {};"
+                      "template <typename T> class B { A<T> a; };",
+                      fieldDecl(hasType(templateSpecializationType(
+                        hasDeclaration(namedDecl(hasName("A"))))))));
+  EXPECT_TRUE(matches("template <typename T> class A {}; A<int> a;",
+                      varDecl(hasType(templateSpecializationType(
+                          hasDeclaration(cxxRecordDecl()))))));
 }
 
 TEST(HasDeclaration, HasDeclarationOfCXXNewExpr) {
@@ -276,10 +270,9 @@ TEST(HasDeclaration, HasDeclarationOfCXXNewExpr) {
 }
 
 TEST(HasDeclaration, HasDeclarationOfTypeAlias) {
-  EXPECT_TRUE(matches(
-      "template <typename T> using C = T; C<int> c;",
-      varDecl(hasType(elaboratedType(namesType(templateSpecializationType(
-          hasDeclaration(typeAliasTemplateDecl()))))))));
+  EXPECT_TRUE(matches("template <typename T> using C = T; C<int> c;",
+                      varDecl(hasType(templateSpecializationType(
+                          hasDeclaration(typeAliasTemplateDecl()))))));
 }
 
 TEST(HasUnqualifiedDesugaredType, DesugarsUsing) {
@@ -400,9 +393,9 @@ TEST(HasTypeLoc, MatchesCXXBaseSpecifierAndCtorInitializer) {
   )cpp";
 
   EXPECT_TRUE(matches(
-      code, cxxRecordDecl(hasAnyBase(hasTypeLoc(loc(asString("Foo")))))));
-  EXPECT_TRUE(
-      matches(code, cxxCtorInitializer(hasTypeLoc(loc(asString("Foo"))))));
+      code, cxxRecordDecl(hasAnyBase(hasTypeLoc(loc(asString("class Foo")))))));
+  EXPECT_TRUE(matches(
+      code, cxxCtorInitializer(hasTypeLoc(loc(asString("class Foo"))))));
 }
 
 TEST(HasTypeLoc, MatchesCXXFunctionalCastExpr) {
@@ -414,13 +407,13 @@ TEST(HasTypeLoc, MatchesCXXNewExpr) {
   EXPECT_TRUE(matches("auto* x = new int(3);",
                       cxxNewExpr(hasTypeLoc(loc(asString("int"))))));
   EXPECT_TRUE(matches("class Foo{}; auto* x = new Foo();",
-                      cxxNewExpr(hasTypeLoc(loc(asString("Foo"))))));
+                      cxxNewExpr(hasTypeLoc(loc(asString("class Foo"))))));
 }
 
 TEST(HasTypeLoc, MatchesCXXTemporaryObjectExpr) {
   EXPECT_TRUE(
       matches("struct Foo { Foo(int, int); }; auto x = Foo(1, 2);",
-              cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("Foo"))))));
+              cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("struct Foo"))))));
 }
 
 TEST(HasTypeLoc, MatchesCXXUnresolvedConstructExpr) {
@@ -446,8 +439,9 @@ TEST(HasTypeLoc, MatchesDeclaratorDecl) {
                       varDecl(hasName("x"), hasTypeLoc(loc(asString("int"))))));
   EXPECT_TRUE(matches("int x(3);",
                       varDecl(hasName("x"), hasTypeLoc(loc(asString("int"))))));
-  EXPECT_TRUE(matches("struct Foo { Foo(int, int); }; Foo x(1, 2);",
-                      varDecl(hasName("x"), hasTypeLoc(loc(asString("Foo"))))));
+  EXPECT_TRUE(
+      matches("struct Foo { Foo(int, int); }; Foo x(1, 2);",
+              varDecl(hasName("x"), hasTypeLoc(loc(asString("struct Foo"))))));
 
   // Make sure we don't crash on implicit constructors.
   EXPECT_TRUE(notMatches("class X {}; X x;",
@@ -6104,21 +6098,19 @@ TEST(HasReferentLoc, DoesNotBindToParameterWithoutIntReferenceTypeLoc) {
 }
 
 TEST(HasAnyTemplateArgumentLoc, BindsToSpecializationWithIntArgument) {
-  EXPECT_TRUE(matches(
-      "template<typename T> class A {}; A<int> a;",
-      varDecl(hasName("a"),
-              hasTypeLoc(elaboratedTypeLoc(hasNamedTypeLoc(
-                  templateSpecializationTypeLoc(hasAnyTemplateArgumentLoc(
-                      hasTypeLoc(loc(asString("int")))))))))));
+  EXPECT_TRUE(
+      matches("template<typename T> class A {}; A<int> a;",
+              varDecl(hasName("a"), hasTypeLoc(templateSpecializationTypeLoc(
+                                        hasAnyTemplateArgumentLoc(hasTypeLoc(
+                                            loc(asString("int")))))))));
 }
 
 TEST(HasAnyTemplateArgumentLoc, BindsToSpecializationWithDoubleArgument) {
-  EXPECT_TRUE(matches(
-      "template<typename T> class A {}; A<double> a;",
-      varDecl(hasName("a"),
-              hasTypeLoc(elaboratedTypeLoc(hasNamedTypeLoc(
-                  templateSpecializationTypeLoc(hasAnyTemplateArgumentLoc(
-                      hasTypeLoc(loc(asString("double")))))))))));
+  EXPECT_TRUE(
+      matches("template<typename T> class A {}; A<double> a;",
+              varDecl(hasName("a"), hasTypeLoc(templateSpecializationTypeLoc(
+                                        hasAnyTemplateArgumentLoc(hasTypeLoc(
+                                            loc(asString("double")))))))));
 }
 
 TEST(HasAnyTemplateArgumentLoc, BindsToExplicitSpecializationWithIntArgument) {
@@ -6178,21 +6170,19 @@ TEST(HasAnyTemplateArgumentLoc,
 }
 
 TEST(HasTemplateArgumentLoc, BindsToSpecializationWithIntArgument) {
-  EXPECT_TRUE(
-      matches("template<typename T> class A {}; A<int> a;",
-              varDecl(hasName("a"),
-                      hasTypeLoc(elaboratedTypeLoc(hasNamedTypeLoc(
-                          templateSpecializationTypeLoc(hasTemplateArgumentLoc(
-                              0, hasTypeLoc(loc(asString("int")))))))))));
+  EXPECT_TRUE(matches(
+      "template<typename T> class A {}; A<int> a;",
+      varDecl(hasName("a"),
+              hasTypeLoc(templateSpecializationTypeLoc(hasTemplateArgumentLoc(
+                  0, hasTypeLoc(loc(asString("int")))))))));
 }
 
 TEST(HasTemplateArgumentLoc, BindsToSpecializationWithDoubleArgument) {
-  EXPECT_TRUE(
-      matches("template<typename T> class A {}; A<double> a;",
-              varDecl(hasName("a"),
-                      hasTypeLoc(elaboratedTypeLoc(hasNamedTypeLoc(
-                          templateSpecializationTypeLoc(hasTemplateArgumentLoc(
-                              0, hasTypeLoc(loc(asString("double")))))))))));
+  EXPECT_TRUE(matches(
+      "template<typename T> class A {}; A<double> a;",
+      varDecl(hasName("a"),
+              hasTypeLoc(templateSpecializationTypeLoc(hasTemplateArgumentLoc(
+                  0, hasTypeLoc(loc(asString("double")))))))));
 }
 
 TEST(HasTemplateArgumentLoc, BindsToExplicitSpecializationWithIntArgument) {
@@ -6330,7 +6320,7 @@ TEST(HasNamedTypeLoc, BindsToElaboratedObjectDeclaration) {
 }
 
 TEST(HasNamedTypeLoc, DoesNotBindToNonElaboratedObjectDeclaration) {
-  EXPECT_TRUE(matches(
+  EXPECT_TRUE(notMatches(
       R"(
       template <typename T>
       class C {};

diff  --git a/clang/unittests/Introspection/IntrospectionTest.cpp b/clang/unittests/Introspection/IntrospectionTest.cpp
index 5f5b231b008a3..69e461609e7dd 100644
--- a/clang/unittests/Introspection/IntrospectionTest.cpp
+++ b/clang/unittests/Introspection/IntrospectionTest.cpp
@@ -780,23 +780,13 @@ struct B : A {
   EXPECT_THAT(
       ExpectedLocations,
       UnorderedElementsAre(
+STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
 STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getBeginLoc()),
 STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
 STRING_LOCATION_PAIR(CtorInit, getLParenLoc()),
 STRING_LOCATION_PAIR(CtorInit, getRParenLoc()),
 STRING_LOCATION_PAIR(CtorInit, getSourceLocation()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
 STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
 STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getEndLoc())
  ));
@@ -808,17 +798,11 @@ STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getEndLoc())
   EXPECT_THAT(
       ExpectedRanges,
       UnorderedElementsAre(
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getSourceRange())));
+  STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getLocalSourceRange()),
+  STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getSourceRange()),
+  STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getLocalSourceRange()),
+  STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
+  STRING_LOCATION_PAIR(CtorInit, getSourceRange())));
   // clang-format on
 }
 
@@ -898,31 +882,26 @@ struct C {
 STRING_LOCATION_PAIR(CtorInit, getLParenLoc()),
 STRING_LOCATION_PAIR(CtorInit, getRParenLoc()),
 STRING_LOCATION_PAIR(CtorInit, getSourceLocation()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc())
+STRING_LOCATION_PAIR(CtorInit,
+                     getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
+STRING_LOCATION_PAIR(CtorInit,
+                     getTypeSourceInfo()->getTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(CtorInit,
+  getTypeSourceInfo()->getTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc())
   ));
   // clang-format on
 
   auto ExpectedRanges = FormatExpected<SourceRange>(Result.RangeAccessors);
 
-  // clang-format off
   EXPECT_THAT(
       ExpectedRanges,
       UnorderedElementsAre(
-STRING_LOCATION_PAIR(CtorInit, getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange())
-  ));
-  // clang-format on
+          STRING_LOCATION_PAIR(CtorInit, getSourceRange()),
+          STRING_LOCATION_PAIR(
+              CtorInit,
+              getTypeSourceInfo()->getTypeLoc().getLocalSourceRange()),
+          STRING_LOCATION_PAIR(
+              CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange())));
 }
 
 TEST(Introspection, SourceLocations_CXXCtorInitializer_pack) {
@@ -964,57 +943,38 @@ struct D : Templ<T...> {
   EXPECT_EQ(
      llvm::makeArrayRef(ExpectedLocations),
       (ArrayRef<std::pair<std::string, SourceLocation>>{
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getBeginLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getEndLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getEndLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getEllipsisLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getLParenLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getMemberLocation()),
 STRING_LOCATION_STDPAIR(CtorInit, getRParenLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getSourceLocation()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
+STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
 STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc())
+STRING_LOCATION_STDPAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getEndLoc())
   }));
   // clang-format on
 
   auto ExpectedRanges = FormatExpected<SourceRange>(Result.RangeAccessors);
 
-  // clang-format off
   EXPECT_THAT(
       ExpectedRanges,
       UnorderedElementsAre(
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getNextTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(CtorInit, getSourceRange())
-  ));
-  // clang-format on
+          STRING_LOCATION_PAIR(CtorInit,
+                               getBaseClassLoc().getLocalSourceRange()),
+          STRING_LOCATION_PAIR(CtorInit, getBaseClassLoc().getSourceRange()),
+          STRING_LOCATION_PAIR(CtorInit, getSourceRange()),
+          STRING_LOCATION_PAIR(
+              CtorInit,
+              getTypeSourceInfo()->getTypeLoc().getLocalSourceRange()),
+          STRING_LOCATION_PAIR(
+              CtorInit, getTypeSourceInfo()->getTypeLoc().getSourceRange())));
 }
 
 TEST(Introspection, SourceLocations_CXXBaseSpecifier_plain) {
@@ -1031,7 +991,7 @@ class B : A {};
 
   auto BoundNodes = ast_matchers::match(
       decl(hasDescendant(cxxRecordDecl(hasDirectBase(
-          cxxBaseSpecifier(hasType(asString("A"))).bind("base"))))),
+          cxxBaseSpecifier(hasType(asString("class A"))).bind("base"))))),
       TU, Ctx);
 
   EXPECT_EQ(BoundNodes.size(), 1u);
@@ -1047,16 +1007,11 @@ class B : A {};
   EXPECT_THAT(ExpectedLocations,
               UnorderedElementsAre(
 STRING_LOCATION_PAIR(Base, getBaseTypeLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
 STRING_LOCATION_PAIR(Base, getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
 STRING_LOCATION_PAIR(Base, getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc())
   ));
   // clang-format on
 
@@ -1064,12 +1019,9 @@ STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().ge
 
   // clang-format off
   EXPECT_THAT(ExpectedRanges, UnorderedElementsAre(
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
+STRING_LOCATION_PAIR(Base, getSourceRange()),
 STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getSourceRange())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getLocalSourceRange())
     ));
   // clang-format on
 }
@@ -1088,7 +1040,7 @@ class B : public A {};
 
   auto BoundNodes = ast_matchers::match(
       decl(hasDescendant(cxxRecordDecl(hasDirectBase(
-          cxxBaseSpecifier(hasType(asString("A"))).bind("base"))))),
+          cxxBaseSpecifier(hasType(asString("class A"))).bind("base"))))),
       TU, Ctx);
 
   EXPECT_EQ(BoundNodes.size(), 1u);
@@ -1103,17 +1055,12 @@ class B : public A {};
   // clang-format off
   EXPECT_THAT(ExpectedLocations,
               UnorderedElementsAre(
-STRING_LOCATION_PAIR(Base, getBeginLoc()),
 STRING_LOCATION_PAIR(Base, getBaseTypeLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(Base, getBeginLoc()),
 STRING_LOCATION_PAIR(Base, getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc())
   ));
   // clang-format on
 
@@ -1122,10 +1069,7 @@ STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().ge
   // clang-format off
   EXPECT_THAT(ExpectedRanges, UnorderedElementsAre(
 STRING_LOCATION_PAIR(Base, getSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getLocalSourceRange()),
 STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getSourceRange())
   ));
   // clang-format on
@@ -1146,7 +1090,7 @@ class C : virtual B, A {};
 
   auto BoundNodes = ast_matchers::match(
       decl(hasDescendant(cxxRecordDecl(hasDirectBase(
-          cxxBaseSpecifier(hasType(asString("A"))).bind("base"))))),
+          cxxBaseSpecifier(hasType(asString("class A"))).bind("base"))))),
       TU, Ctx);
 
   EXPECT_EQ(BoundNodes.size(), 1u);
@@ -1162,16 +1106,11 @@ class C : virtual B, A {};
   EXPECT_THAT(ExpectedLocations,
               UnorderedElementsAre(
 STRING_LOCATION_PAIR(Base, getBaseTypeLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
 STRING_LOCATION_PAIR(Base, getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
 STRING_LOCATION_PAIR(Base, getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TypeSpecTypeLoc>().getNameLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc())
   ));
   // clang-format on
 
@@ -1179,12 +1118,9 @@ STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().ge
 
   // clang-format off
   EXPECT_THAT(ExpectedRanges, UnorderedElementsAre(
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
+STRING_LOCATION_PAIR(Base, getSourceRange()),
 STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getSourceRange())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getLocalSourceRange())
   ));
   // clang-format on
 }
@@ -1220,20 +1156,13 @@ class B : A<int, bool> {};
   EXPECT_THAT(ExpectedLocations,
               UnorderedElementsAre(
 STRING_LOCATION_PAIR(Base, getBaseTypeLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
 STRING_LOCATION_PAIR(Base, getBeginLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
 STRING_LOCATION_PAIR(Base, getEndLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getBeginLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getTemplateNameLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getLAngleLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getEndLoc()),
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::TemplateSpecializationTypeLoc>().getRAngleLoc())
   ));
   // clang-format on
 
@@ -1241,12 +1170,9 @@ STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().ge
 
   // clang-format off
   EXPECT_THAT(ExpectedRanges, UnorderedElementsAre(
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getLocalSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getAs<clang::ElaboratedTypeLoc>().getNamedTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getNextTypeLoc().getSourceRange()),
+STRING_LOCATION_PAIR(Base, getSourceRange()),
 STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getSourceRange()),
-STRING_LOCATION_PAIR(Base, getSourceRange())
+STRING_LOCATION_PAIR(Base, getTypeSourceInfo()->getTypeLoc().getLocalSourceRange())
   ));
   // clang-format on
 }

diff  --git a/clang/unittests/Sema/CodeCompleteTest.cpp b/clang/unittests/Sema/CodeCompleteTest.cpp
index 33856284c4fa0..dae0793658c5b 100644
--- a/clang/unittests/Sema/CodeCompleteTest.cpp
+++ b/clang/unittests/Sema/CodeCompleteTest.cpp
@@ -250,7 +250,7 @@ TEST(PreferredTypeTest, BinaryExpr) {
       a | ^1; a & ^1;
     }
   )cpp";
-  EXPECT_THAT(collectPreferredTypes(Code), Each("A"));
+  EXPECT_THAT(collectPreferredTypes(Code), Each("enum A"));
 
   Code = R"cpp(
     enum class A {};
@@ -260,7 +260,7 @@ TEST(PreferredTypeTest, BinaryExpr) {
       a | ^a; a & ^a;
     }
   )cpp";
-  EXPECT_THAT(collectPreferredTypes(Code), Each("A"));
+  EXPECT_THAT(collectPreferredTypes(Code), Each("enum A"));
 
   // Binary shifts.
   Code = R"cpp(
@@ -296,7 +296,7 @@ TEST(PreferredTypeTest, BinaryExpr) {
       c = ^c; c += ^c; c -= ^c; c *= ^c; c /= ^c; c %= ^c;
     }
   )cpp";
-  EXPECT_THAT(collectPreferredTypes(Code), Each("Cls"));
+  EXPECT_THAT(collectPreferredTypes(Code), Each("class Cls"));
 
   Code = R"cpp(
     class Cls {};

diff  --git a/clang/unittests/StaticAnalyzer/SValTest.cpp b/clang/unittests/StaticAnalyzer/SValTest.cpp
index d8897b0f2183d..55a07302ca284 100644
--- a/clang/unittests/StaticAnalyzer/SValTest.cpp
+++ b/clang/unittests/StaticAnalyzer/SValTest.cpp
@@ -319,10 +319,7 @@ void foo(int x) {
   ASSERT_TRUE(LD.has_value());
   auto LDT = LD->getType(Context);
   ASSERT_FALSE(LDT.isNull());
-  const auto *DElaboratedType = dyn_cast<ElaboratedType>(LDT);
-  ASSERT_NE(DElaboratedType, nullptr);
-  const auto *DRecordType =
-      dyn_cast<RecordType>(DElaboratedType->getNamedType());
+  const auto *DRecordType = dyn_cast<RecordType>(LDT);
   ASSERT_NE(DRecordType, nullptr);
   EXPECT_EQ("TestStruct", DRecordType->getDecl()->getName());
 }

diff  --git a/clang/unittests/StaticAnalyzer/TestReturnValueUnderConstruction.cpp b/clang/unittests/StaticAnalyzer/TestReturnValueUnderConstruction.cpp
index 6661b33f58344..eb0ee6c1fd8a0 100644
--- a/clang/unittests/StaticAnalyzer/TestReturnValueUnderConstruction.cpp
+++ b/clang/unittests/StaticAnalyzer/TestReturnValueUnderConstruction.cpp
@@ -38,8 +38,7 @@ class TestReturnValueUnderConstructionChecker
 
     const auto *RetReg = cast<TypedValueRegion>(RetVal->getAsRegion());
     const Expr *OrigExpr = Call.getOriginExpr();
-    ASSERT_EQ(OrigExpr->getType()->getCanonicalTypeInternal(),
-              RetReg->getValueType()->getCanonicalTypeInternal());
+    ASSERT_EQ(OrigExpr->getType(), RetReg->getValueType());
   }
 };
 

diff  --git a/clang/unittests/Tooling/QualTypeNamesTest.cpp b/clang/unittests/Tooling/QualTypeNamesTest.cpp
index 4e5156000d668..336a27e69be59 100644
--- a/clang/unittests/Tooling/QualTypeNamesTest.cpp
+++ b/clang/unittests/Tooling/QualTypeNamesTest.cpp
@@ -33,7 +33,7 @@ struct TypeNameVisitor : TestVisitor<TypeNameVisitor> {
         ADD_FAILURE() << "Typename::getFullyQualifiedName failed for "
                       << VD->getQualifiedNameAsString() << std::endl
                       << "   Actual: " << ActualName << std::endl
-                      << " Expected: " << ExpectedName;
+                      << " Exepcted: " << ExpectedName;
       }
     }
     return true;
@@ -42,7 +42,7 @@ struct TypeNameVisitor : TestVisitor<TypeNameVisitor> {
 
 // named namespaces inside anonymous namespaces
 
-TEST(QualTypeNameTest, Simple) {
+TEST(QualTypeNameTest, getFullyQualifiedName) {
   TypeNameVisitor Visitor;
   // Simple case to test the test framework itself.
   Visitor.ExpectedQualTypeNames["CheckInt"] = "int";
@@ -170,9 +170,7 @@ TEST(QualTypeNameTest, Simple) {
       "};\n"
       "EnumScopeClass::AnEnum AnEnumVar;\n",
       TypeNameVisitor::Lang_CXX11);
-}
 
-TEST(QualTypeNameTest, Complex) {
   TypeNameVisitor Complex;
   Complex.ExpectedQualTypeNames["CheckTX"] = "B::TX";
   Complex.runOver(
@@ -189,9 +187,7 @@ TEST(QualTypeNameTest, Complex) {
       "  TX CheckTX;"
       "  struct A { typedef int X; };"
       "}");
-}
 
-TEST(QualTypeNameTest, DoubleUsing) {
   TypeNameVisitor DoubleUsing;
   DoubleUsing.ExpectedQualTypeNames["direct"] = "a::A<0>";
   DoubleUsing.ExpectedQualTypeNames["indirect"] = "b::B";
@@ -210,9 +206,7 @@ TEST(QualTypeNameTest, DoubleUsing) {
       B double_indirect;
     }
   )cpp");
-}
 
-TEST(QualTypeNameTest, GlobalNsPrefix) {
   TypeNameVisitor GlobalNsPrefix;
   GlobalNsPrefix.WithGlobalNsPrefix = true;
   GlobalNsPrefix.ExpectedQualTypeNames["IntVal"] = "int";
@@ -250,9 +244,7 @@ TEST(QualTypeNameTest, GlobalNsPrefix) {
       "  }\n"
       "}\n"
   );
-}
 
-TEST(QualTypeNameTest, InlineNamespace) {
   TypeNameVisitor InlineNamespace;
   InlineNamespace.ExpectedQualTypeNames["c"] = "B::C";
   InlineNamespace.runOver("inline namespace A {\n"
@@ -263,9 +255,7 @@ TEST(QualTypeNameTest, InlineNamespace) {
                           "using namespace A::B;\n"
                           "C c;\n",
                           TypeNameVisitor::Lang_CXX11);
-}
 
-TEST(QualTypeNameTest, AnonStrucs) {
   TypeNameVisitor AnonStrucs;
   AnonStrucs.ExpectedQualTypeNames["a"] = "short";
   AnonStrucs.ExpectedQualTypeNames["un_in_st_1"] =

diff  --git a/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp
index 6c6670c541b57..299e1b022a1bf 100644
--- a/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp
+++ b/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp
@@ -45,7 +45,7 @@ TEST(RecursiveASTVisitor, VisitsCXXBaseSpecifiersWithIncompleteInnerClass) {
 
 TEST(RecursiveASTVisitor, VisitsCXXBaseSpecifiersOfSelfReferentialType) {
   TypeLocVisitor Visitor;
-  Visitor.ExpectMatch("X<Y>", 2, 18, 2);
+  Visitor.ExpectMatch("X<class Y>", 2, 18);
   EXPECT_TRUE(Visitor.runOver(
     "template<typename T> class X {};\n"
     "class Y : public X<Y> {};"));

diff  --git a/clang/unittests/Tooling/StencilTest.cpp b/clang/unittests/Tooling/StencilTest.cpp
index 45dab154c7d6b..1f49c1a30c041 100644
--- a/clang/unittests/Tooling/StencilTest.cpp
+++ b/clang/unittests/Tooling/StencilTest.cpp
@@ -43,7 +43,6 @@ static std::string wrapSnippet(StringRef ExtraPreface,
       T& operator*() const;
     };
     }
-    template<class T> T desugar() { return T(); };
   )cc";
   return (Preface + ExtraPreface + "auto stencil_test_snippet = []{" +
           StatementCode + "};")
@@ -546,7 +545,7 @@ TEST_F(StencilTest, DescribeQualifiedType) {
 
 TEST_F(StencilTest, DescribeUnqualifiedType) {
   std::string Snippet = "using N::C; C c; c;";
-  std::string Expected = "C";
+  std::string Expected = "N::C";
   auto StmtMatch =
       matchStmt(Snippet, declRefExpr(hasType(qualType().bind("type"))));
   ASSERT_TRUE(StmtMatch);
@@ -555,7 +554,7 @@ TEST_F(StencilTest, DescribeUnqualifiedType) {
 }
 
 TEST_F(StencilTest, DescribeAnonNamespaceType) {
-  std::string Snippet = "auto c = desugar<AnonC>(); c;";
+  std::string Snippet = "AnonC c; c;";
   std::string Expected = "(anonymous namespace)::AnonC";
   auto StmtMatch =
       matchStmt(Snippet, declRefExpr(hasType(qualType().bind("type"))));


        


More information about the cfe-commits mailing list