Coverage Report

Created: 2020-09-19 12:23

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/AST/TypeLoc.cpp
Line
Count
Source (jump to first uncovered line)
1
//===- TypeLoc.cpp - Type Source Info Wrapper -----------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
//  This file defines the TypeLoc subclasses implementations.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "clang/AST/TypeLoc.h"
14
#include "clang/AST/DeclTemplate.h"
15
#include "clang/AST/ASTContext.h"
16
#include "clang/AST/Attr.h"
17
#include "clang/AST/Expr.h"
18
#include "clang/AST/NestedNameSpecifier.h"
19
#include "clang/AST/TemplateBase.h"
20
#include "clang/AST/TemplateName.h"
21
#include "clang/AST/TypeLocVisitor.h"
22
#include "clang/Basic/SourceLocation.h"
23
#include "clang/Basic/Specifiers.h"
24
#include "llvm/Support/ErrorHandling.h"
25
#include "llvm/Support/MathExtras.h"
26
#include <algorithm>
27
#include <cassert>
28
#include <cstdint>
29
#include <cstring>
30
31
using namespace clang;
32
33
static const unsigned TypeLocMaxDataAlign = alignof(void *);
34
35
//===----------------------------------------------------------------------===//
36
// TypeLoc Implementation
37
//===----------------------------------------------------------------------===//
38
39
namespace {
40
41
class TypeLocRanger : public TypeLocVisitor<TypeLocRanger, SourceRange> {
42
public:
43
#define ABSTRACT_TYPELOC(CLASS, PARENT)
44
#define TYPELOC(CLASS, PARENT) \
45
204M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
204M
    return TyLoc.getLocalSourceRange(); \
47
204M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Line
Count
Source
45
8.12k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
8.12k
    return TyLoc.getLocalSourceRange(); \
47
8.12k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Line
Count
Source
45
1
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1
    return TyLoc.getLocalSourceRange(); \
47
1
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Line
Count
Source
45
1.06k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.06k
    return TyLoc.getLocalSourceRange(); \
47
1.06k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Line
Count
Source
45
4.03k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
4.03k
    return TyLoc.getLocalSourceRange(); \
47
4.03k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Line
Count
Source
45
5.81k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
5.81k
    return TyLoc.getLocalSourceRange(); \
47
5.81k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Line
Count
Source
45
13.5k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
13.5k
    return TyLoc.getLocalSourceRange(); \
47
13.5k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
Line
Count
Source
45
61
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
61
    return TyLoc.getLocalSourceRange(); \
47
61
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Line
Count
Source
45
732
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
732
    return TyLoc.getLocalSourceRange(); \
47
732
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Line
Count
Source
45
1.01M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.01M
    return TyLoc.getLocalSourceRange(); \
47
1.01M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
Line
Count
Source
45
43.1k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
43.1k
    return TyLoc.getLocalSourceRange(); \
47
43.1k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Line
Count
Source
45
8.96M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
8.96M
    return TyLoc.getLocalSourceRange(); \
47
8.96M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Line
Count
Source
45
2.70k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
2.70k
    return TyLoc.getLocalSourceRange(); \
47
2.70k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Line
Count
Source
45
353k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
353k
    return TyLoc.getLocalSourceRange(); \
47
353k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitAutoTypeLoc(clang::AutoTypeLoc)
Line
Count
Source
45
42.9k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
42.9k
    return TyLoc.getLocalSourceRange(); \
47
42.9k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Line
Count
Source
45
7.64k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
7.64k
    return TyLoc.getLocalSourceRange(); \
47
7.64k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Line
Count
Source
45
46
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
46
    return TyLoc.getLocalSourceRange(); \
47
46
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Line
Count
Source
45
18
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
18
    return TyLoc.getLocalSourceRange(); \
47
18
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Line
Count
Source
45
4.05M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
4.05M
    return TyLoc.getLocalSourceRange(); \
47
4.05M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Line
Count
Source
45
58
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
58
    return TyLoc.getLocalSourceRange(); \
47
58
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Line
Count
Source
45
251k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
251k
    return TyLoc.getLocalSourceRange(); \
47
251k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Line
Count
Source
45
140
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
140
    return TyLoc.getLocalSourceRange(); \
47
140
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Line
Count
Source
45
632k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
632k
    return TyLoc.getLocalSourceRange(); \
47
632k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Line
Count
Source
45
1.09k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.09k
    return TyLoc.getLocalSourceRange(); \
47
1.09k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
Line
Count
Source
45
211
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
211
    return TyLoc.getLocalSourceRange(); \
47
211
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
Line
Count
Source
45
934k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
934k
    return TyLoc.getLocalSourceRange(); \
47
934k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Line
Count
Source
45
1.66M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.66M
    return TyLoc.getLocalSourceRange(); \
47
1.66M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Line
Count
Source
45
188
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
188
    return TyLoc.getLocalSourceRange(); \
47
188
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Line
Count
Source
45
36
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
36
    return TyLoc.getLocalSourceRange(); \
47
36
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Line
Count
Source
45
366
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
366
    return TyLoc.getLocalSourceRange(); \
47
366
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
Line
Count
Source
45
58.4k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
58.4k
    return TyLoc.getLocalSourceRange(); \
47
58.4k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Line
Count
Source
45
709k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
709k
    return TyLoc.getLocalSourceRange(); \
47
709k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Line
Count
Source
45
81.6k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
81.6k
    return TyLoc.getLocalSourceRange(); \
47
81.6k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Line
Count
Source
45
2.05M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
2.05M
    return TyLoc.getLocalSourceRange(); \
47
2.05M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Line
Count
Source
45
61.3k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
61.3k
    return TyLoc.getLocalSourceRange(); \
47
61.3k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
Line
Count
Source
45
266k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
266k
    return TyLoc.getLocalSourceRange(); \
47
266k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitParenTypeLoc(clang::ParenTypeLoc)
Line
Count
Source
45
100k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
100k
    return TyLoc.getLocalSourceRange(); \
47
100k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitPipeTypeLoc(clang::PipeTypeLoc)
Line
Count
Source
45
2
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
2
    return TyLoc.getLocalSourceRange(); \
47
2
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitPointerTypeLoc(clang::PointerTypeLoc)
Line
Count
Source
45
1.46M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.46M
    return TyLoc.getLocalSourceRange(); \
47
1.46M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Line
Count
Source
45
1.27M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.27M
    return TyLoc.getLocalSourceRange(); \
47
1.27M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Line
Count
Source
45
456k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
456k
    return TyLoc.getLocalSourceRange(); \
47
456k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Line
Count
Source
45
252
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
252
    return TyLoc.getLocalSourceRange(); \
47
252
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
Line
Count
Source
45
13.8M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
13.8M
    return TyLoc.getLocalSourceRange(); \
47
13.8M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitEnumTypeLoc(clang::EnumTypeLoc)
Line
Count
Source
45
303k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
303k
    return TyLoc.getLocalSourceRange(); \
47
303k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
45
10.5M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
10.5M
    return TyLoc.getLocalSourceRange(); \
47
10.5M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
Line
Count
Source
45
95.4M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
95.4M
    return TyLoc.getLocalSourceRange(); \
47
95.4M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Line
Count
Source
45
28.9M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
28.9M
    return TyLoc.getLocalSourceRange(); \
47
28.9M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Line
Count
Source
45
6.62k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
6.62k
    return TyLoc.getLocalSourceRange(); \
47
6.62k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
Line
Count
Source
45
67
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
67
    return TyLoc.getLocalSourceRange(); \
47
67
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
45
30.9M
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
30.9M
    return TyLoc.getLocalSourceRange(); \
47
30.9M
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
Line
Count
Source
45
1.75k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.75k
    return TyLoc.getLocalSourceRange(); \
47
1.75k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
Line
Count
Source
45
1.53k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
1.53k
    return TyLoc.getLocalSourceRange(); \
47
1.53k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitVectorTypeLoc(clang::VectorTypeLoc)
Line
Count
Source
45
448k
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
448k
    return TyLoc.getLocalSourceRange(); \
47
448k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocRanger::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
Line
Count
Source
45
132
  SourceRange Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
46
132
    return TyLoc.getLocalSourceRange(); \
47
132
  }
48
#include "clang/AST/TypeLocNodes.def"
49
};
50
51
} // namespace
52
53
204M
SourceRange TypeLoc::getLocalSourceRangeImpl(TypeLoc TL) {
54
204M
  if (TL.isNull()) 
return SourceRange()0
;
55
204M
  return TypeLocRanger().Visit(TL);
56
204M
}
57
58
namespace {
59
60
class TypeAligner : public TypeLocVisitor<TypeAligner, unsigned> {
61
public:
62
#define ABSTRACT_TYPELOC(CLASS, PARENT)
63
#define TYPELOC(CLASS, PARENT) \
64
277M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
277M
    return TyLoc.getLocalDataAlignment(); \
66
277M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Line
Count
Source
64
16.0M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
16.0M
    return TyLoc.getLocalDataAlignment(); \
66
16.0M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Line
Count
Source
64
29
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
29
    return TyLoc.getLocalDataAlignment(); \
66
29
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Line
Count
Source
64
6.11k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
6.11k
    return TyLoc.getLocalDataAlignment(); \
66
6.11k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Line
Count
Source
64
538k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
538k
    return TyLoc.getLocalDataAlignment(); \
66
538k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Line
Count
Source
64
37.1k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
37.1k
    return TyLoc.getLocalDataAlignment(); \
66
37.1k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Line
Count
Source
64
144k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
144k
    return TyLoc.getLocalDataAlignment(); \
66
144k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
Line
Count
Source
64
46.6k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
46.6k
    return TyLoc.getLocalDataAlignment(); \
66
46.6k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Line
Count
Source
64
7.32k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
7.32k
    return TyLoc.getLocalDataAlignment(); \
66
7.32k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Line
Count
Source
64
5.80M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
5.80M
    return TyLoc.getLocalDataAlignment(); \
66
5.80M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
Line
Count
Source
64
242k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
242k
    return TyLoc.getLocalDataAlignment(); \
66
242k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Line
Count
Source
64
27.9M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
27.9M
    return TyLoc.getLocalDataAlignment(); \
66
27.9M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Line
Count
Source
64
25.5k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
25.5k
    return TyLoc.getLocalDataAlignment(); \
66
25.5k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Line
Count
Source
64
443k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
443k
    return TyLoc.getLocalDataAlignment(); \
66
443k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitAutoTypeLoc(clang::AutoTypeLoc)
Line
Count
Source
64
275k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
275k
    return TyLoc.getLocalDataAlignment(); \
66
275k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Line
Count
Source
64
2.60k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
2.60k
    return TyLoc.getLocalDataAlignment(); \
66
2.60k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Line
Count
Source
64
250
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
250
    return TyLoc.getLocalDataAlignment(); \
66
250
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Line
Count
Source
64
13
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
13
    return TyLoc.getLocalDataAlignment(); \
66
13
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Line
Count
Source
64
5.64M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
5.64M
    return TyLoc.getLocalDataAlignment(); \
66
5.64M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Line
Count
Source
64
59
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
59
    return TyLoc.getLocalDataAlignment(); \
66
59
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Line
Count
Source
64
429k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
429k
    return TyLoc.getLocalDataAlignment(); \
66
429k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Line
Count
Source
64
100
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
100
    return TyLoc.getLocalDataAlignment(); \
66
100
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Line
Count
Source
64
5.11M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
5.11M
    return TyLoc.getLocalDataAlignment(); \
66
5.11M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Line
Count
Source
64
1.85k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
1.85k
    return TyLoc.getLocalDataAlignment(); \
66
1.85k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
Line
Count
Source
64
26.7k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
26.7k
    return TyLoc.getLocalDataAlignment(); \
66
26.7k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
Line
Count
Source
64
18.8M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
18.8M
    return TyLoc.getLocalDataAlignment(); \
66
18.8M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Line
Count
Source
64
2.61M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
2.61M
    return TyLoc.getLocalDataAlignment(); \
66
2.61M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Line
Count
Source
64
318k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
318k
    return TyLoc.getLocalDataAlignment(); \
66
318k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Line
Count
Source
64
358
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
358
    return TyLoc.getLocalDataAlignment(); \
66
358
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Line
Count
Source
64
389
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
389
    return TyLoc.getLocalDataAlignment(); \
66
389
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
Line
Count
Source
64
54.8k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
54.8k
    return TyLoc.getLocalDataAlignment(); \
66
54.8k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Line
Count
Source
64
5.18M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
5.18M
    return TyLoc.getLocalDataAlignment(); \
66
5.18M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Line
Count
Source
64
1.69M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
1.69M
    return TyLoc.getLocalDataAlignment(); \
66
1.69M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Line
Count
Source
64
7.09M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
7.09M
    return TyLoc.getLocalDataAlignment(); \
66
7.09M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Line
Count
Source
64
295k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
295k
    return TyLoc.getLocalDataAlignment(); \
66
295k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
Line
Count
Source
64
552k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
552k
    return TyLoc.getLocalDataAlignment(); \
66
552k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitParenTypeLoc(clang::ParenTypeLoc)
Line
Count
Source
64
1.35M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
1.35M
    return TyLoc.getLocalDataAlignment(); \
66
1.35M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitPipeTypeLoc(clang::PipeTypeLoc)
Line
Count
Source
64
133
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
133
    return TyLoc.getLocalDataAlignment(); \
66
133
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitPointerTypeLoc(clang::PointerTypeLoc)
Line
Count
Source
64
9.46M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
9.46M
    return TyLoc.getLocalDataAlignment(); \
66
9.46M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Line
Count
Source
64
5.22M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
5.22M
    return TyLoc.getLocalDataAlignment(); \
66
5.22M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Line
Count
Source
64
1.46M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
1.46M
    return TyLoc.getLocalDataAlignment(); \
66
1.46M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Line
Count
Source
64
118k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
118k
    return TyLoc.getLocalDataAlignment(); \
66
118k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
Line
Count
Source
64
11.0M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
11.0M
    return TyLoc.getLocalDataAlignment(); \
66
11.0M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitEnumTypeLoc(clang::EnumTypeLoc)
Line
Count
Source
64
563k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
563k
    return TyLoc.getLocalDataAlignment(); \
66
563k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
64
9.06M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
9.06M
    return TyLoc.getLocalDataAlignment(); \
66
9.06M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
Line
Count
Source
64
19.0M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
19.0M
    return TyLoc.getLocalDataAlignment(); \
66
19.0M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Line
Count
Source
64
21.9M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
21.9M
    return TyLoc.getLocalDataAlignment(); \
66
21.9M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Line
Count
Source
64
12.4k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
12.4k
    return TyLoc.getLocalDataAlignment(); \
66
12.4k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
Line
Count
Source
64
119
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
119
    return TyLoc.getLocalDataAlignment(); \
66
119
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
64
98.1M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
98.1M
    return TyLoc.getLocalDataAlignment(); \
66
98.1M
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
Line
Count
Source
64
3.11k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
3.11k
    return TyLoc.getLocalDataAlignment(); \
66
3.11k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
Line
Count
Source
64
1.59k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
1.59k
    return TyLoc.getLocalDataAlignment(); \
66
1.59k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitVectorTypeLoc(clang::VectorTypeLoc)
Line
Count
Source
64
845k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
845k
    return TyLoc.getLocalDataAlignment(); \
66
845k
  }
TypeLoc.cpp:(anonymous namespace)::TypeAligner::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
Line
Count
Source
64
2.90k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
65
2.90k
    return TyLoc.getLocalDataAlignment(); \
66
2.90k
  }
67
#include "clang/AST/TypeLocNodes.def"
68
};
69
70
} // namespace
71
72
/// Returns the alignment of the type source info data block.
73
277M
unsigned TypeLoc::getLocalAlignmentForType(QualType Ty) {
74
277M
  if (Ty.isNull()) 
return 10
;
75
277M
  return TypeAligner().Visit(TypeLoc(Ty, nullptr));
76
277M
}
77
78
namespace {
79
80
class TypeSizer : public TypeLocVisitor<TypeSizer, unsigned> {
81
public:
82
#define ABSTRACT_TYPELOC(CLASS, PARENT)
83
#define TYPELOC(CLASS, PARENT) \
84
173M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
173M
    return TyLoc.getLocalDataSize(); \
86
173M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Line
Count
Source
84
5.72M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
5.72M
    return TyLoc.getLocalDataSize(); \
86
5.72M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Line
Count
Source
84
11
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
11
    return TyLoc.getLocalDataSize(); \
86
11
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Line
Count
Source
84
5.67k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
5.67k
    return TyLoc.getLocalDataSize(); \
86
5.67k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Line
Count
Source
84
408k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
408k
    return TyLoc.getLocalDataSize(); \
86
408k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Line
Count
Source
84
26.1k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
26.1k
    return TyLoc.getLocalDataSize(); \
86
26.1k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Line
Count
Source
84
76.9k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
76.9k
    return TyLoc.getLocalDataSize(); \
86
76.9k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
Line
Count
Source
84
17.9k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
17.9k
    return TyLoc.getLocalDataSize(); \
86
17.9k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Line
Count
Source
84
6.60k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
6.60k
    return TyLoc.getLocalDataSize(); \
86
6.60k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Line
Count
Source
84
4.26M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
4.26M
    return TyLoc.getLocalDataSize(); \
86
4.26M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
Line
Count
Source
84
78.8k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
78.8k
    return TyLoc.getLocalDataSize(); \
86
78.8k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Line
Count
Source
84
12.4M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
12.4M
    return TyLoc.getLocalDataSize(); \
86
12.4M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Line
Count
Source
84
11.3k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
11.3k
    return TyLoc.getLocalDataSize(); \
86
11.3k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Line
Count
Source
84
326k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
326k
    return TyLoc.getLocalDataSize(); \
86
326k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitAutoTypeLoc(clang::AutoTypeLoc)
Line
Count
Source
84
175k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
175k
    return TyLoc.getLocalDataSize(); \
86
175k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Line
Count
Source
84
1.97k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.97k
    return TyLoc.getLocalDataSize(); \
86
1.97k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Line
Count
Source
84
82
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
82
    return TyLoc.getLocalDataSize(); \
86
82
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Line
Count
Source
84
13
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
13
    return TyLoc.getLocalDataSize(); \
86
13
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Line
Count
Source
84
4.36M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
4.36M
    return TyLoc.getLocalDataSize(); \
86
4.36M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Line
Count
Source
84
59
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
59
    return TyLoc.getLocalDataSize(); \
86
59
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Line
Count
Source
84
406k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
406k
    return TyLoc.getLocalDataSize(); \
86
406k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Line
Count
Source
84
100
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
100
    return TyLoc.getLocalDataSize(); \
86
100
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Line
Count
Source
84
3.76M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
3.76M
    return TyLoc.getLocalDataSize(); \
86
3.76M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Line
Count
Source
84
916
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
916
    return TyLoc.getLocalDataSize(); \
86
916
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
Line
Count
Source
84
25.1k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
25.1k
    return TyLoc.getLocalDataSize(); \
86
25.1k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
Line
Count
Source
84
17.6M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
17.6M
    return TyLoc.getLocalDataSize(); \
86
17.6M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Line
Count
Source
84
1.04M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.04M
    return TyLoc.getLocalDataSize(); \
86
1.04M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Line
Count
Source
84
316k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
316k
    return TyLoc.getLocalDataSize(); \
86
316k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Line
Count
Source
84
358
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
358
    return TyLoc.getLocalDataSize(); \
86
358
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Line
Count
Source
84
389
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
389
    return TyLoc.getLocalDataSize(); \
86
389
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
Line
Count
Source
84
49.2k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
49.2k
    return TyLoc.getLocalDataSize(); \
86
49.2k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Line
Count
Source
84
1.69M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.69M
    return TyLoc.getLocalDataSize(); \
86
1.69M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Line
Count
Source
84
1.03M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.03M
    return TyLoc.getLocalDataSize(); \
86
1.03M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Line
Count
Source
84
2.52M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
2.52M
    return TyLoc.getLocalDataSize(); \
86
2.52M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Line
Count
Source
84
176k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
176k
    return TyLoc.getLocalDataSize(); \
86
176k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
Line
Count
Source
84
552k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
552k
    return TyLoc.getLocalDataSize(); \
86
552k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitParenTypeLoc(clang::ParenTypeLoc)
Line
Count
Source
84
392k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
392k
    return TyLoc.getLocalDataSize(); \
86
392k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitPipeTypeLoc(clang::PipeTypeLoc)
Line
Count
Source
84
129
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
129
    return TyLoc.getLocalDataSize(); \
86
129
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitPointerTypeLoc(clang::PointerTypeLoc)
Line
Count
Source
84
6.71M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
6.71M
    return TyLoc.getLocalDataSize(); \
86
6.71M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Line
Count
Source
84
3.68M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
3.68M
    return TyLoc.getLocalDataSize(); \
86
3.68M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Line
Count
Source
84
1.05M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.05M
    return TyLoc.getLocalDataSize(); \
86
1.05M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Line
Count
Source
84
117k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
117k
    return TyLoc.getLocalDataSize(); \
86
117k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
Line
Count
Source
84
9.28M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
9.28M
    return TyLoc.getLocalDataSize(); \
86
9.28M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitEnumTypeLoc(clang::EnumTypeLoc)
Line
Count
Source
84
209k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
209k
    return TyLoc.getLocalDataSize(); \
86
209k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
84
4.19M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
4.19M
    return TyLoc.getLocalDataSize(); \
86
4.19M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
Line
Count
Source
84
16.4M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
16.4M
    return TyLoc.getLocalDataSize(); \
86
16.4M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Line
Count
Source
84
14.4M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
14.4M
    return TyLoc.getLocalDataSize(); \
86
14.4M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Line
Count
Source
84
4.05k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
4.05k
    return TyLoc.getLocalDataSize(); \
86
4.05k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
Line
Count
Source
84
111
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
111
    return TyLoc.getLocalDataSize(); \
86
111
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
84
58.8M
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
58.8M
    return TyLoc.getLocalDataSize(); \
86
58.8M
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
Line
Count
Source
84
3.10k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
3.10k
    return TyLoc.getLocalDataSize(); \
86
3.10k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
Line
Count
Source
84
1.33k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
1.33k
    return TyLoc.getLocalDataSize(); \
86
1.33k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitVectorTypeLoc(clang::VectorTypeLoc)
Line
Count
Source
84
589k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
589k
    return TyLoc.getLocalDataSize(); \
86
589k
  }
TypeLoc.cpp:(anonymous namespace)::TypeSizer::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
Line
Count
Source
84
2.90k
  unsigned Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
85
2.90k
    return TyLoc.getLocalDataSize(); \
86
2.90k
  }
87
#include "clang/AST/TypeLocNodes.def"
88
};
89
90
} // namespace
91
92
/// Returns the size of the type source info data block.
93
125M
unsigned TypeLoc::getFullDataSizeForType(QualType Ty) {
94
125M
  unsigned Total = 0;
95
125M
  TypeLoc TyLoc(Ty, nullptr);
96
125M
  unsigned MaxAlign = 1;
97
298M
  while (!TyLoc.isNull()) {
98
173M
    unsigned Align = getLocalAlignmentForType(TyLoc.getType());
99
173M
    MaxAlign = std::max(Align, MaxAlign);
100
173M
    Total = llvm::alignTo(Total, Align);
101
173M
    Total += TypeSizer().Visit(TyLoc);
102
173M
    TyLoc = TyLoc.getNextTypeLoc();
103
173M
  }
104
125M
  Total = llvm::alignTo(Total, MaxAlign);
105
125M
  return Total;
106
125M
}
107
108
namespace {
109
110
class NextLoc : public TypeLocVisitor<NextLoc, TypeLoc> {
111
public:
112
#define ABSTRACT_TYPELOC(CLASS, PARENT)
113
#define TYPELOC(CLASS, PARENT) \
114
327M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
327M
    return TyLoc.getNextTypeLoc(); \
116
327M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Line
Count
Source
114
7.98M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
7.98M
    return TyLoc.getNextTypeLoc(); \
116
7.98M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Line
Count
Source
114
14
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
14
    return TyLoc.getNextTypeLoc(); \
116
14
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Line
Count
Source
114
8.08k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
8.08k
    return TyLoc.getNextTypeLoc(); \
116
8.08k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Line
Count
Source
114
739k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
739k
    return TyLoc.getNextTypeLoc(); \
116
739k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Line
Count
Source
114
64.7k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
64.7k
    return TyLoc.getNextTypeLoc(); \
116
64.7k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Line
Count
Source
114
188k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
188k
    return TyLoc.getNextTypeLoc(); \
116
188k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
Line
Count
Source
114
31.5k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
31.5k
    return TyLoc.getNextTypeLoc(); \
116
31.5k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Line
Count
Source
114
8.98k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
8.98k
    return TyLoc.getNextTypeLoc(); \
116
8.98k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Line
Count
Source
114
5.44M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
5.44M
    return TyLoc.getNextTypeLoc(); \
116
5.44M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
Line
Count
Source
114
203k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
203k
    return TyLoc.getNextTypeLoc(); \
116
203k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Line
Count
Source
114
17.8M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
17.8M
    return TyLoc.getNextTypeLoc(); \
116
17.8M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Line
Count
Source
114
20.4k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
20.4k
    return TyLoc.getNextTypeLoc(); \
116
20.4k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Line
Count
Source
114
563k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
563k
    return TyLoc.getNextTypeLoc(); \
116
563k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitAutoTypeLoc(clang::AutoTypeLoc)
Line
Count
Source
114
229k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
229k
    return TyLoc.getNextTypeLoc(); \
116
229k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Line
Count
Source
114
5.81k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
5.81k
    return TyLoc.getNextTypeLoc(); \
116
5.81k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Line
Count
Source
114
144
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
144
    return TyLoc.getNextTypeLoc(); \
116
144
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Line
Count
Source
114
22
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
22
    return TyLoc.getNextTypeLoc(); \
116
22
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Line
Count
Source
114
6.79M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
6.79M
    return TyLoc.getNextTypeLoc(); \
116
6.79M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Line
Count
Source
114
101
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
101
    return TyLoc.getNextTypeLoc(); \
116
101
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Line
Count
Source
114
617k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
617k
    return TyLoc.getNextTypeLoc(); \
116
617k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Line
Count
Source
114
170
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
170
    return TyLoc.getNextTypeLoc(); \
116
170
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Line
Count
Source
114
5.25M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
5.25M
    return TyLoc.getNextTypeLoc(); \
116
5.25M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Line
Count
Source
114
1.45k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
1.45k
    return TyLoc.getNextTypeLoc(); \
116
1.45k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
Line
Count
Source
114
77.0k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
77.0k
    return TyLoc.getNextTypeLoc(); \
116
77.0k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
Line
Count
Source
114
37.0M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
37.0M
    return TyLoc.getNextTypeLoc(); \
116
37.0M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Line
Count
Source
114
1.95M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
1.95M
    return TyLoc.getNextTypeLoc(); \
116
1.95M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Line
Count
Source
114
326k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
326k
    return TyLoc.getNextTypeLoc(); \
116
326k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Line
Count
Source
114
508
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
508
    return TyLoc.getNextTypeLoc(); \
116
508
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Line
Count
Source
114
601
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
601
    return TyLoc.getNextTypeLoc(); \
116
601
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
Line
Count
Source
114
171k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
171k
    return TyLoc.getNextTypeLoc(); \
116
171k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Line
Count
Source
114
3.98M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
3.98M
    return TyLoc.getNextTypeLoc(); \
116
3.98M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Line
Count
Source
114
1.11M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
1.11M
    return TyLoc.getNextTypeLoc(); \
116
1.11M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Line
Count
Source
114
3.48M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
3.48M
    return TyLoc.getNextTypeLoc(); \
116
3.48M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Line
Count
Source
114
209k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
209k
    return TyLoc.getNextTypeLoc(); \
116
209k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
Line
Count
Source
114
1.11M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
1.11M
    return TyLoc.getNextTypeLoc(); \
116
1.11M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitParenTypeLoc(clang::ParenTypeLoc)
Line
Count
Source
114
931k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
931k
    return TyLoc.getNextTypeLoc(); \
116
931k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitPipeTypeLoc(clang::PipeTypeLoc)
Line
Count
Source
114
273
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
273
    return TyLoc.getNextTypeLoc(); \
116
273
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitPointerTypeLoc(clang::PointerTypeLoc)
Line
Count
Source
114
14.1M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
14.1M
    return TyLoc.getNextTypeLoc(); \
116
14.1M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Line
Count
Source
114
7.04M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
7.04M
    return TyLoc.getNextTypeLoc(); \
116
7.04M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Line
Count
Source
114
2.00M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
2.00M
    return TyLoc.getNextTypeLoc(); \
116
2.00M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Line
Count
Source
114
176k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
176k
    return TyLoc.getNextTypeLoc(); \
116
176k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
Line
Count
Source
114
19.6M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
19.6M
    return TyLoc.getNextTypeLoc(); \
116
19.6M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitEnumTypeLoc(clang::EnumTypeLoc)
Line
Count
Source
114
389k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
389k
    return TyLoc.getNextTypeLoc(); \
116
389k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
114
10.1M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
10.1M
    return TyLoc.getNextTypeLoc(); \
116
10.1M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
Line
Count
Source
114
70.6M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
70.6M
    return TyLoc.getNextTypeLoc(); \
116
70.6M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Line
Count
Source
114
30.5M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
30.5M
    return TyLoc.getNextTypeLoc(); \
116
30.5M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Line
Count
Source
114
7.57k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
7.57k
    return TyLoc.getNextTypeLoc(); \
116
7.57k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
Line
Count
Source
114
177
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
177
    return TyLoc.getNextTypeLoc(); \
116
177
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
114
75.8M
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
75.8M
    return TyLoc.getNextTypeLoc(); \
116
75.8M
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
Line
Count
Source
114
4.93k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
4.93k
    return TyLoc.getNextTypeLoc(); \
116
4.93k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
Line
Count
Source
114
2.43k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
2.43k
    return TyLoc.getNextTypeLoc(); \
116
2.43k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitVectorTypeLoc(clang::VectorTypeLoc)
Line
Count
Source
114
742k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
742k
    return TyLoc.getNextTypeLoc(); \
116
742k
  }
TypeLoc.cpp:(anonymous namespace)::NextLoc::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
Line
Count
Source
114
3.57k
  TypeLoc Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
115
3.57k
    return TyLoc.getNextTypeLoc(); \
116
3.57k
  }
117
#include "clang/AST/TypeLocNodes.def"
118
};
119
120
} // namespace
121
122
/// Get the next TypeLoc pointed by this TypeLoc, e.g for "int*" the
123
/// TypeLoc is a PointerLoc and next TypeLoc is for "int".
124
327M
TypeLoc TypeLoc::getNextTypeLocImpl(TypeLoc TL) {
125
327M
  return NextLoc().Visit(TL);
126
327M
}
127
128
/// Initializes a type location, and all of its children
129
/// recursively, as if the entire tree had been written in the
130
/// given location.
131
void TypeLoc::initializeImpl(ASTContext &Context, TypeLoc TL,
132
10.9M
                             SourceLocation Loc) {
133
12.2M
  while (
true12.2M
) {
134
12.2M
    switch (TL.getTypeLocClass()) {
135
0
#define ABSTRACT_TYPELOC(CLASS, PARENT)
136
0
#define TYPELOC(CLASS, PARENT)        \
137
1.33M
    case CLASS: {                     \
138
1.33M
      CLASS##TypeLoc TLCasted = TL.castAs<CLASS##TypeLoc>(); \
139
1.33M
      TLCasted.initializeLocal(Context, Loc);  \
140
1.33M
      TL = TLCasted.getNextTypeLoc(); \
141
12.2M
      if (!TL) 
return10.9M
; \
142
0
      continue;                       \
143
1.33M
    }
144
0
#include "clang/AST/TypeLocNodes.def"
145
12.2M
    }
146
12.2M
  }
147
10.9M
}
148
149
namespace {
150
151
class TypeLocCopier : public TypeLocVisitor<TypeLocCopier> {
152
  TypeLoc Source;
153
154
public:
155
2.06k
  TypeLocCopier(TypeLoc source) : Source(source) {}
156
157
#define ABSTRACT_TYPELOC(CLASS, PARENT)
158
#define TYPELOC(CLASS, PARENT)                          \
159
2.06k
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
2.06k
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
2.06k
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Line
Count
Source
159
4
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
4
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
4
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Line
Count
Source
159
1
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
1
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
1
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Line
Count
Source
159
683
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
683
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
683
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Line
Count
Source
159
4
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
4
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
4
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitAutoTypeLoc(clang::AutoTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
Line
Count
Source
159
3
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
3
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
3
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Line
Count
Source
159
18
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
18
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
18
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Line
Count
Source
159
18
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
18
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
18
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitParenTypeLoc(clang::ParenTypeLoc)
Line
Count
Source
159
3
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
3
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
3
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitPipeTypeLoc(clang::PipeTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitPointerTypeLoc(clang::PointerTypeLoc)
Line
Count
Source
159
26
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
26
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
26
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitEnumTypeLoc(clang::EnumTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
159
51
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
51
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
51
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Line
Count
Source
159
389
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
389
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
389
  }
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Line
Count
Source
159
1
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
1
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
1
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
159
864
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
864
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
864
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitVectorTypeLoc(clang::VectorTypeLoc)
Line
Count
Source
159
2
  void Visit##CLASS##TypeLoc(CLASS##TypeLoc dest) {   \
160
2
    dest.copyLocal(Source.castAs<CLASS##TypeLoc>());  \
161
2
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TypeLocCopier::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
162
#include "clang/AST/TypeLocNodes.def"
163
};
164
165
} // namespace
166
167
228k
void TypeLoc::copy(TypeLoc other) {
168
228k
  assert(getFullDataSize() == other.getFullDataSize());
169
228k
170
  // If both data pointers are aligned to the maximum alignment, we
171
  // can memcpy because getFullDataSize() accurately reflects the
172
  // layout of the data.
173
228k
  if (reinterpret_cast<uintptr_t>(Data) ==
174
228k
          llvm::alignTo(reinterpret_cast<uintptr_t>(Data),
175
228k
                        TypeLocMaxDataAlign) &&
176
226k
      reinterpret_cast<uintptr_t>(other.Data) ==
177
226k
          llvm::alignTo(reinterpret_cast<uintptr_t>(other.Data),
178
226k
                        TypeLocMaxDataAlign)) {
179
226k
    memcpy(Data, other.Data, getFullDataSize());
180
226k
    return;
181
226k
  }
182
1.99k
183
  // Copy each of the pieces.
184
1.99k
  TypeLoc TL(getType(), Data);
185
2.06k
  do {
186
2.06k
    TypeLocCopier(other).Visit(TL);
187
2.06k
    other = other.getNextTypeLoc();
188
2.06k
  } while ((TL = TL.getNextTypeLoc()));
189
1.99k
}
190
191
92.9M
SourceLocation TypeLoc::getBeginLoc() const {
192
92.9M
  TypeLoc Cur = *this;
193
92.9M
  TypeLoc LeftMost = Cur;
194
101M
  while (true) {
195
101M
    switch (Cur.getTypeLocClass()) {
196
617k
    case Elaborated:
197
617k
      LeftMost = Cur;
198
617k
      break;
199
2.82M
    case FunctionProto:
200
2.82M
      if (Cur.castAs<FunctionProtoTypeLoc>().getTypePtr()
201
19.9k
              ->hasTrailingReturn()) {
202
19.9k
        LeftMost = Cur;
203
19.9k
        break;
204
19.9k
      }
205
2.80M
      LLVM_FALLTHROUGH;
206
4.39M
    case FunctionNoProto:
207
4.39M
    case ConstantArray:
208
4.39M
    case DependentSizedArray:
209
4.39M
    case IncompleteArray:
210
4.39M
    case VariableArray:
211
      // FIXME: Currently QualifiedTypeLoc does not have a source range
212
4.39M
    case Qualified:
213
4.39M
      Cur = Cur.getNextTypeLoc();
214
4.39M
      continue;
215
96.9M
    default:
216
96.9M
      if (Cur.getLocalSourceRange().getBegin().isValid())
217
96.3M
        LeftMost = Cur;
218
96.9M
      Cur = Cur.getNextTypeLoc();
219
96.9M
      if (Cur.isNull())
220
92.2M
        break;
221
4.65M
      continue;
222
92.9M
    } // switch
223
92.9M
    break;
224
92.9M
  } // while
225
92.9M
  return LeftMost.getLocalSourceRange().getBegin();
226
92.9M
}
227
228
14.9M
SourceLocation TypeLoc::getEndLoc() const {
229
14.9M
  TypeLoc Cur = *this;
230
14.9M
  TypeLoc Last;
231
17.0M
  while (true) {
232
17.0M
    switch (Cur.getTypeLocClass()) {
233
14.9M
    default:
234
14.9M
      if (!Last)
235
13.6M
        Last = Cur;
236
14.9M
      return Last.getLocalSourceRange().getEnd();
237
51.2k
    case Paren:
238
51.2k
    case ConstantArray:
239
51.2k
    case DependentSizedArray:
240
51.2k
    case IncompleteArray:
241
51.2k
    case VariableArray:
242
51.2k
    case FunctionNoProto:
243
51.2k
      Last = Cur;
244
51.2k
      break;
245
460k
    case FunctionProto:
246
460k
      if (Cur.castAs<FunctionProtoTypeLoc>().getTypePtr()->hasTrailingReturn())
247
2.48k
        Last = TypeLoc();
248
458k
      else
249
458k
        Last = Cur;
250
460k
      break;
251
923k
    case Pointer:
252
923k
    case BlockPointer:
253
923k
    case MemberPointer:
254
923k
    case LValueReference:
255
923k
    case RValueReference:
256
923k
    case PackExpansion:
257
923k
      if (!Last)
258
842k
        Last = Cur;
259
923k
      break;
260
687k
    case Qualified:
261
687k
    case Elaborated:
262
687k
      break;
263
2.12M
    }
264
2.12M
    Cur = Cur.getNextTypeLoc();
265
2.12M
  }
266
14.9M
}
267
268
namespace {
269
270
struct TSTChecker : public TypeLocVisitor<TSTChecker, bool> {
271
  // Overload resolution does the real work for us.
272
1.33M
  static bool isTypeSpec(TypeSpecTypeLoc _) { return true; }
273
0
  static bool isTypeSpec(TypeLoc _) { return false; }
274
275
#define ABSTRACT_TYPELOC(CLASS, PARENT)
276
#define TYPELOC(CLASS, PARENT) \
277
1.33M
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
1.33M
    return isTypeSpec(TyLoc); \
279
1.33M
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitAdjustedTypeLoc(clang::AdjustedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDecayedTypeLoc(clang::DecayedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitAtomicTypeLoc(clang::AtomicTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitAttributedTypeLoc(clang::AttributedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitComplexTypeLoc(clang::ComplexTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitAutoTypeLoc(clang::AutoTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDeducedTemplateSpecializationTypeLoc(clang::DeducedTemplateSpecializationTypeLoc)
Line
Count
Source
277
56
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
56
    return isTypeSpec(TyLoc); \
279
56
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentAddressSpaceTypeLoc(clang::DependentAddressSpaceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentExtIntTypeLoc(clang::DependentExtIntTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentVectorTypeLoc(clang::DependentVectorTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitExtIntTypeLoc(clang::ExtIntTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)
Line
Count
Source
277
6.33k
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
6.33k
    return isTypeSpec(TyLoc); \
279
6.33k
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitMacroQualifiedTypeLoc(clang::MacroQualifiedTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitConstantMatrixTypeLoc(clang::ConstantMatrixTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitDependentSizedMatrixTypeLoc(clang::DependentSizedMatrixTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitObjCTypeParamTypeLoc(clang::ObjCTypeParamTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitParenTypeLoc(clang::ParenTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitPipeTypeLoc(clang::PipeTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitPointerTypeLoc(clang::PointerTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitEnumTypeLoc(clang::EnumTypeLoc)
Line
Count
Source
277
9.82k
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
9.82k
    return isTypeSpec(TyLoc); \
279
9.82k
  }
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitRecordTypeLoc(clang::RecordTypeLoc)
Line
Count
Source
277
536k
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
536k
    return isTypeSpec(TyLoc); \
279
536k
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitTypedefTypeLoc(clang::TypedefTypeLoc)
Line
Count
Source
277
782k
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
782k
    return isTypeSpec(TyLoc); \
279
782k
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitUnaryTransformTypeLoc(clang::UnaryTransformTypeLoc)
TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)
Line
Count
Source
277
164
  bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
278
164
    return isTypeSpec(TyLoc); \
279
164
  }
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitVectorTypeLoc(clang::VectorTypeLoc)
Unexecuted instantiation: TypeLoc.cpp:(anonymous namespace)::TSTChecker::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)
280
#include "clang/AST/TypeLocNodes.def"
281
};
282
283
} // namespace
284
285
/// Determines if the given type loc corresponds to a
286
/// TypeSpecTypeLoc.  Since there is not actually a TypeSpecType in
287
/// the type hierarchy, this is made somewhat complicated.
288
///
289
/// There are a lot of types that currently use TypeSpecTypeLoc
290
/// because it's a convenient base class.  Ideally we would not accept
291
/// those here, but ideally we would have better implementations for
292
/// them.
293
1.33M
bool TypeSpecTypeLoc::isKind(const TypeLoc &TL) {
294
1.33M
  if (TL.getType().hasLocalQualifiers()) 
return false0
;
295
1.33M
  return TSTChecker().Visit(TL);
296
1.33M
}
297
298
773
bool TagTypeLoc::isDefinition() const {
299
773
  TagDecl *D = getDecl();
300
773
  return D->isCompleteDefinition() &&
301
723
         (D->getIdentifier() == nullptr || 
D->getLocation() == getNameLoc()686
);
302
773
}
303
304
// Reimplemented to account for GNU/C++ extension
305
//     typeof unary-expression
306
// where there are no parentheses.
307
6.62k
SourceRange TypeOfExprTypeLoc::getLocalSourceRange() const {
308
6.62k
  if (getRParenLoc().isValid())
309
6.62k
    return SourceRange(getTypeofLoc(), getRParenLoc());
310
0
  else
311
0
    return SourceRange(getTypeofLoc(),
312
0
                       getUnderlyingExpr()->getSourceRange().getEnd());
313
6.62k
}
314
315
316
315k
TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const {
317
315k
  if (needsExtraLocalData())
318
315k
    return static_cast<TypeSpecifierType>(getWrittenBuiltinSpecs().Type);
319
0
  switch (getTypePtr()->getKind()) {
320
0
  case BuiltinType::Void:
321
0
    return TST_void;
322
0
  case BuiltinType::Bool:
323
0
    return TST_bool;
324
0
  case BuiltinType::Char_U:
325
0
  case BuiltinType::Char_S:
326
0
    return TST_char;
327
0
  case BuiltinType::Char8:
328
0
    return TST_char8;
329
0
  case BuiltinType::Char16:
330
0
    return TST_char16;
331
0
  case BuiltinType::Char32:
332
0
    return TST_char32;
333
0
  case BuiltinType::WChar_S:
334
0
  case BuiltinType::WChar_U:
335
0
    return TST_wchar;
336
0
  case BuiltinType::UChar:
337
0
  case BuiltinType::UShort:
338
0
  case BuiltinType::UInt:
339
0
  case BuiltinType::ULong:
340
0
  case BuiltinType::ULongLong:
341
0
  case BuiltinType::UInt128:
342
0
  case BuiltinType::SChar:
343
0
  case BuiltinType::Short:
344
0
  case BuiltinType::Int:
345
0
  case BuiltinType::Long:
346
0
  case BuiltinType::LongLong:
347
0
  case BuiltinType::Int128:
348
0
  case BuiltinType::Half:
349
0
  case BuiltinType::Float:
350
0
  case BuiltinType::Double:
351
0
  case BuiltinType::LongDouble:
352
0
  case BuiltinType::Float16:
353
0
  case BuiltinType::Float128:
354
0
  case BuiltinType::ShortAccum:
355
0
  case BuiltinType::Accum:
356
0
  case BuiltinType::LongAccum:
357
0
  case BuiltinType::UShortAccum:
358
0
  case BuiltinType::UAccum:
359
0
  case BuiltinType::ULongAccum:
360
0
  case BuiltinType::ShortFract:
361
0
  case BuiltinType::Fract:
362
0
  case BuiltinType::LongFract:
363
0
  case BuiltinType::UShortFract:
364
0
  case BuiltinType::UFract:
365
0
  case BuiltinType::ULongFract:
366
0
  case BuiltinType::SatShortAccum:
367
0
  case BuiltinType::SatAccum:
368
0
  case BuiltinType::SatLongAccum:
369
0
  case BuiltinType::SatUShortAccum:
370
0
  case BuiltinType::SatUAccum:
371
0
  case BuiltinType::SatULongAccum:
372
0
  case BuiltinType::SatShortFract:
373
0
  case BuiltinType::SatFract:
374
0
  case BuiltinType::SatLongFract:
375
0
  case BuiltinType::SatUShortFract:
376
0
  case BuiltinType::SatUFract:
377
0
  case BuiltinType::SatULongFract:
378
0
  case BuiltinType::BFloat16:
379
0
    llvm_unreachable("Builtin type needs extra local data!");
380
    // Fall through, if the impossible happens.
381
0
382
0
  case BuiltinType::NullPtr:
383
0
  case BuiltinType::Overload:
384
0
  case BuiltinType::Dependent:
385
0
  case BuiltinType::BoundMember:
386
0
  case BuiltinType::UnknownAny:
387
0
  case BuiltinType::ARCUnbridgedCast:
388
0
  case BuiltinType::PseudoObject:
389
0
  case BuiltinType::ObjCId:
390
0
  case BuiltinType::ObjCClass:
391
0
  case BuiltinType::ObjCSel:
392
0
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
393
0
  case BuiltinType::Id:
394
0
#include "clang/Basic/OpenCLImageTypes.def"
395
0
#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
396
0
  case BuiltinType::Id:
397
0
#include "clang/Basic/OpenCLExtensionTypes.def"
398
0
  case BuiltinType::OCLSampler:
399
0
  case BuiltinType::OCLEvent:
400
0
  case BuiltinType::OCLClkEvent:
401
0
  case BuiltinType::OCLQueue:
402
0
  case BuiltinType::OCLReserveID:
403
0
#define SVE_TYPE(Name, Id, SingletonId) \
404
0
  case BuiltinType::Id:
405
0
#include "clang/Basic/AArch64SVEACLETypes.def"
406
0
  case BuiltinType::BuiltinFn:
407
0
  case BuiltinType::IncompleteMatrixIdx:
408
0
  case BuiltinType::OMPArraySection:
409
0
  case BuiltinType::OMPArrayShaping:
410
0
  case BuiltinType::OMPIterator:
411
0
    return TST_unspecified;
412
0
  }
413
0
414
0
  llvm_unreachable("Invalid BuiltinType Kind!");
415
0
}
416
417
162
TypeLoc TypeLoc::IgnoreParensImpl(TypeLoc TL) {
418
324
  while (ParenTypeLoc PTL = TL.getAs<ParenTypeLoc>())
419
162
    TL = PTL.getInnerLoc();
420
162
  return TL;
421
162
}
422
423
21
SourceLocation TypeLoc::findNullabilityLoc() const {
424
21
  if (auto ATL = getAs<AttributedTypeLoc>()) {
425
21
    const Attr *A = ATL.getAttr();
426
21
    if (A && (isa<TypeNullableAttr>(A) || isa<TypeNonNullAttr>(A) ||
427
0
              isa<TypeNullUnspecifiedAttr>(A)))
428
21
      return A->getLocation();
429
0
  }
430
0
431
0
  return {};
432
0
}
433
434
211k
TypeLoc TypeLoc::findExplicitQualifierLoc() const {
435
  // Qualified types.
436
211k
  if (auto qual = getAs<QualifiedTypeLoc>())
437
9
    return qual;
438
211k
439
211k
  TypeLoc loc = IgnoreParens();
440
211k
441
  // Attributed types.
442
211k
  if (auto attr = loc.getAs<AttributedTypeLoc>()) {
443
23
    if (attr.isQualifier()) return attr;
444
0
    return attr.getModifiedLoc().findExplicitQualifierLoc();
445
0
  }
446
211k
447
  // C11 _Atomic types.
448
211k
  if (auto atomic = loc.getAs<AtomicTypeLoc>()) {
449
0
    return atomic;
450
0
  }
451
211k
452
211k
  return {};
453
211k
}
454
455
void ObjCTypeParamTypeLoc::initializeLocal(ASTContext &Context,
456
173k
                                           SourceLocation Loc) {
457
173k
  setNameLoc(Loc);
458
173k
  if (!getNumProtocols()) 
return170k
;
459
2.33k
460
2.33k
  setProtocolLAngleLoc(Loc);
461
2.33k
  setProtocolRAngleLoc(Loc);
462
4.67k
  for (unsigned i = 0, e = getNumProtocols(); i != e; 
++i2.33k
)
463
2.33k
    setProtocolLoc(i, Loc);
464
2.33k
}
465
466
void ObjCObjectTypeLoc::initializeLocal(ASTContext &Context,
467
49.1k
                                        SourceLocation Loc) {
468
49.1k
  setHasBaseTypeAsWritten(true);
469
49.1k
  setTypeArgsLAngleLoc(Loc);
470
49.1k
  setTypeArgsRAngleLoc(Loc);
471
49.3k
  for (unsigned i = 0, e = getNumTypeArgs(); i != e; 
++i169
) {
472
169
    setTypeArgTInfo(i,
473
169
                   Context.getTrivialTypeSourceInfo(
474
169
                     getTypePtr()->getTypeArgsAsWritten()[i], Loc));
475
169
  }
476
49.1k
  setProtocolLAngleLoc(Loc);
477
49.1k
  setProtocolRAngleLoc(Loc);
478
49.1k
  for (unsigned i = 0, e = getNumProtocols(); i != e; 
++i11
)
479
11
    setProtocolLoc(i, Loc);
480
49.1k
}
481
482
1.01M
SourceRange AttributedTypeLoc::getLocalSourceRange() const {
483
  // Note that this does *not* include the range of the attribute
484
  // enclosure, e.g.:
485
  //    __attribute__((foo(bar)))
486
  //    ^~~~~~~~~~~~~~~        ~~
487
  // or
488
  //    [[foo(bar)]]
489
  //    ^~        ~~
490
  // That enclosure doesn't necessarily belong to a single attribute
491
  // anyway.
492
1.01M
  return getAttr() ? getAttr()->getRange() : 
SourceRange()78
;
493
1.01M
}
494
495
void TypeOfTypeLoc::initializeLocal(ASTContext &Context,
496
2
                                       SourceLocation Loc) {
497
2
  TypeofLikeTypeLoc<TypeOfTypeLoc, TypeOfType, TypeOfTypeLocInfo>
498
2
      ::initializeLocal(Context, Loc);
499
2
  this->getLocalData()->UnderlyingTInfo = Context.getTrivialTypeSourceInfo(
500
2
      getUnderlyingType(), Loc);
501
2
}
502
503
void UnaryTransformTypeLoc::initializeLocal(ASTContext &Context,
504
8
                                       SourceLocation Loc) {
505
8
    setKWLoc(Loc);
506
8
    setRParenLoc(Loc);
507
8
    setLParenLoc(Loc);
508
8
    this->setUnderlyingTInfo(
509
8
        Context.getTrivialTypeSourceInfo(getTypePtr()->getBaseType(), Loc));
510
8
}
511
512
void ElaboratedTypeLoc::initializeLocal(ASTContext &Context,
513
10.0k
                                        SourceLocation Loc) {
514
10.0k
  setElaboratedKeywordLoc(Loc);
515
10.0k
  NestedNameSpecifierLocBuilder Builder;
516
10.0k
  Builder.MakeTrivial(Context, getTypePtr()->getQualifier(), Loc);
517
10.0k
  setQualifierLoc(Builder.getWithLocInContext(Context));
518
10.0k
}
519
520
void DependentNameTypeLoc::initializeLocal(ASTContext &Context,
521
223k
                                           SourceLocation Loc) {
522
223k
  setElaboratedKeywordLoc(Loc);
523
223k
  NestedNameSpecifierLocBuilder Builder;
524
223k
  Builder.MakeTrivial(Context, getTypePtr()->getQualifier(), Loc);
525
223k
  setQualifierLoc(Builder.getWithLocInContext(Context));
526
223k
  setNameLoc(Loc);
527
223k
}
528
529
void
530
DependentTemplateSpecializationTypeLoc::initializeLocal(ASTContext &Context,
531
100k
                                                        SourceLocation Loc) {
532
100k
  setElaboratedKeywordLoc(Loc);
533
100k
  if (getTypePtr()->getQualifier()) {
534
100k
    NestedNameSpecifierLocBuilder Builder;
535
100k
    Builder.MakeTrivial(Context, getTypePtr()->getQualifier(), Loc);
536
100k
    setQualifierLoc(Builder.getWithLocInContext(Context));
537
0
  } else {
538
0
    setQualifierLoc(NestedNameSpecifierLoc());
539
0
  }
540
100k
  setTemplateKeywordLoc(Loc);
541
100k
  setTemplateNameLoc(Loc);
542
100k
  setLAngleLoc(Loc);
543
100k
  setRAngleLoc(Loc);
544
100k
  TemplateSpecializationTypeLoc::initializeArgLocs(Context, getNumArgs(),
545
100k
                                                   getTypePtr()->getArgs(),
546
100k
                                                   getArgInfos(), Loc);
547
100k
}
548
549
void TemplateSpecializationTypeLoc::initializeArgLocs(ASTContext &Context,
550
                                                      unsigned NumArgs,
551
                                                  const TemplateArgument *Args,
552
                                              TemplateArgumentLocInfo *ArgInfos,
553
895k
                                                      SourceLocation Loc) {
554
2.24M
  for (unsigned i = 0, e = NumArgs; i != e; 
++i1.34M
) {
555
1.34M
    switch (Args[i].getKind()) {
556
0
    case TemplateArgument::Null:
557
0
      llvm_unreachable("Impossible TemplateArgument");
558
0
559
20
    case TemplateArgument::Integral:
560
20
    case TemplateArgument::Declaration:
561
20
    case TemplateArgument::NullPtr:
562
20
      ArgInfos[i] = TemplateArgumentLocInfo();
563
20
      break;
564
20
565
641k
    case TemplateArgument::Expression:
566
641k
      ArgInfos[i] = TemplateArgumentLocInfo(Args[i].getAsExpr());
567
641k
      break;
568
20
569
684k
    case TemplateArgument::Type:
570
684k
      ArgInfos[i] = TemplateArgumentLocInfo(
571
684k
                          Context.getTrivialTypeSourceInfo(Args[i].getAsType(),
572
684k
                                                           Loc));
573
684k
      break;
574
20
575
5.34k
    case TemplateArgument::Template:
576
5.34k
    case TemplateArgument::TemplateExpansion: {
577
5.34k
      NestedNameSpecifierLocBuilder Builder;
578
5.34k
      TemplateName Template = Args[i].getAsTemplateOrTemplatePattern();
579
5.34k
      if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
580
42
        Builder.MakeTrivial(Context, DTN->getQualifier(), Loc);
581
5.30k
      else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
582
4
        Builder.MakeTrivial(Context, QTN->getQualifier(), Loc);
583
5.34k
584
5.34k
      ArgInfos[i] = TemplateArgumentLocInfo(
585
5.34k
          Builder.getWithLocInContext(Context), Loc,
586
5.34k
          Args[i].getKind() == TemplateArgument::Template ? SourceLocation()
587
3
                                                          : Loc);
588
5.34k
      break;
589
5.34k
    }
590
5.34k
591
16.6k
    case TemplateArgument::Pack:
592
16.6k
      ArgInfos[i] = TemplateArgumentLocInfo();
593
16.6k
      break;
594
1.34M
    }
595
1.34M
  }
596
895k
}
597
598
2
DeclarationNameInfo AutoTypeLoc::getConceptNameInfo() const {
599
2
  return DeclarationNameInfo(getNamedConcept()->getDeclName(),
600
2
                             getLocalData()->ConceptNameLoc);
601
2
}
602
603
17.7k
void AutoTypeLoc::initializeLocal(ASTContext &Context, SourceLocation Loc) {
604
17.7k
  setNestedNameSpecifierLoc(NestedNameSpecifierLoc());
605
17.7k
  setTemplateKWLoc(Loc);
606
17.7k
  setConceptNameLoc(Loc);
607
17.7k
  setFoundDecl(nullptr);
608
17.7k
  setRAngleLoc(Loc);
609
17.7k
  setLAngleLoc(Loc);
610
17.7k
  TemplateSpecializationTypeLoc::initializeArgLocs(Context, getNumArgs(),
611
17.7k
                                                   getTypePtr()->getArgs(),
612
17.7k
                                                   getArgInfos(), Loc);
613
17.7k
  setNameLoc(Loc);
614
17.7k
}
615
616
617
namespace {
618
619
  class GetContainedAutoTypeLocVisitor :
620
    public TypeLocVisitor<GetContainedAutoTypeLocVisitor, TypeLoc> {
621
  public:
622
    using TypeLocVisitor<GetContainedAutoTypeLocVisitor, TypeLoc>::Visit;
623
624
164
    TypeLoc VisitAutoTypeLoc(AutoTypeLoc TL) {
625
164
      return TL;
626
164
    }
627
628
    // Only these types can contain the desired 'auto' type.
629
630
100
    TypeLoc VisitElaboratedTypeLoc(ElaboratedTypeLoc T) {
631
100
      return Visit(T.getNamedTypeLoc());
632
100
    }
633
634
146
    TypeLoc VisitQualifiedTypeLoc(QualifiedTypeLoc T) {
635
146
      return Visit(T.getUnqualifiedLoc());
636
146
    }
637
638
523
    TypeLoc VisitPointerTypeLoc(PointerTypeLoc T) {
639
523
      return Visit(T.getPointeeLoc());
640
523
    }
641
642
0
    TypeLoc VisitBlockPointerTypeLoc(BlockPointerTypeLoc T) {
643
0
      return Visit(T.getPointeeLoc());
644
0
    }
645
646
3.82k
    TypeLoc VisitReferenceTypeLoc(ReferenceTypeLoc T) {
647
3.82k
      return Visit(T.getPointeeLoc());
648
3.82k
    }
649
650
93
    TypeLoc VisitMemberPointerTypeLoc(MemberPointerTypeLoc T) {
651
93
      return Visit(T.getPointeeLoc());
652
93
    }
653
654
52
    TypeLoc VisitArrayTypeLoc(ArrayTypeLoc T) {
655
52
      return Visit(T.getElementLoc());
656
52
    }
657
658
297
    TypeLoc VisitFunctionTypeLoc(FunctionTypeLoc T) {
659
297
      return Visit(T.getReturnLoc());
660
297
    }
661
662
287
    TypeLoc VisitParenTypeLoc(ParenTypeLoc T) {
663
287
      return Visit(T.getInnerLoc());
664
287
    }
665
666
2
    TypeLoc VisitAttributedTypeLoc(AttributedTypeLoc T) {
667
2
      return Visit(T.getModifiedLoc());
668
2
    }
669
670
0
    TypeLoc VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc T) {
671
0
      return Visit(T.getInnerLoc());
672
0
    }
673
674
0
    TypeLoc VisitAdjustedTypeLoc(AdjustedTypeLoc T) {
675
0
      return Visit(T.getOriginalLoc());
676
0
    }
677
678
94
    TypeLoc VisitPackExpansionTypeLoc(PackExpansionTypeLoc T) {
679
94
      return Visit(T.getPatternLoc());
680
94
    }
681
  };
682
683
} // namespace
684
685
316k
AutoTypeLoc TypeLoc::getContainedAutoTypeLoc() const {
686
316k
  TypeLoc Res = GetContainedAutoTypeLocVisitor().Visit(*this);
687
316k
  if (Res.isNull())
688
316k
    return AutoTypeLoc();
689
164
  return Res.getAs<AutoTypeLoc>();
690
164
}