Coverage Report

Created: 2024-02-11 06:23

/src/libprotobuf-mutator/build/external.protobuf/src/external.protobuf/src/google/protobuf/descriptor.cc
Line
Count
Source (jump to first uncovered line)
1
// Protocol Buffers - Google's data interchange format
2
// Copyright 2008 Google Inc.  All rights reserved.
3
//
4
// Use of this source code is governed by a BSD-style
5
// license that can be found in the LICENSE file or at
6
// https://developers.google.com/open-source/licenses/bsd
7
8
// Author: kenton@google.com (Kenton Varda)
9
//  Based on original Protocol Buffers design by
10
//  Sanjay Ghemawat, Jeff Dean, and others.
11
12
#include "google/protobuf/descriptor.h"
13
14
#include <algorithm>
15
#include <array>
16
#include <cstdlib>
17
#include <functional>
18
#include <iterator>
19
#include <limits>
20
#include <memory>
21
#include <sstream>
22
#include <string>
23
#include <type_traits>
24
#include <utility>
25
#include <vector>
26
27
#include "google/protobuf/stubs/common.h"
28
#include "absl/base/call_once.h"
29
#include "absl/base/casts.h"
30
#include "absl/base/dynamic_annotations.h"
31
#include "absl/container/btree_map.h"
32
#include "absl/container/flat_hash_map.h"
33
#include "absl/container/flat_hash_set.h"
34
#include "absl/functional/function_ref.h"
35
#include "absl/hash/hash.h"
36
#include "absl/log/absl_check.h"
37
#include "absl/log/absl_log.h"
38
#include "absl/memory/memory.h"
39
#include "absl/status/statusor.h"
40
#include "absl/strings/ascii.h"
41
#include "absl/strings/escaping.h"
42
#include "absl/strings/match.h"
43
#include "absl/strings/str_cat.h"
44
#include "absl/strings/str_format.h"
45
#include "absl/strings/str_join.h"
46
#include "absl/strings/str_split.h"
47
#include "absl/strings/string_view.h"
48
#include "absl/strings/strip.h"
49
#include "absl/strings/substitute.h"
50
#include "absl/synchronization/mutex.h"
51
#include "absl/types/optional.h"
52
#include "google/protobuf/any.h"
53
#include "google/protobuf/cpp_edition_defaults.h"
54
#include "google/protobuf/cpp_features.pb.h"
55
#include "google/protobuf/descriptor.pb.h"
56
#include "google/protobuf/descriptor_database.h"
57
#include "google/protobuf/descriptor_legacy.h"
58
#include "google/protobuf/descriptor_visitor.h"
59
#include "google/protobuf/dynamic_message.h"
60
#include "google/protobuf/feature_resolver.h"
61
#include "google/protobuf/generated_message_util.h"
62
#include "google/protobuf/io/strtod.h"
63
#include "google/protobuf/io/tokenizer.h"
64
#include "google/protobuf/parse_context.h"
65
#include "google/protobuf/port.h"
66
#include "google/protobuf/repeated_ptr_field.h"
67
#include "google/protobuf/text_format.h"
68
#include "google/protobuf/unknown_field_set.h"
69
70
71
// Must be included last.
72
#include "google/protobuf/port_def.inc"
73
74
namespace google {
75
namespace protobuf {
76
namespace {
77
using ::google::protobuf::internal::DownCast;
78
79
const int kPackageLimit = 100;
80
81
82
174
std::string ToCamelCase(const std::string& input, bool lower_first) {
83
174
  bool capitalize_next = !lower_first;
84
174
  std::string result;
85
174
  result.reserve(input.size());
86
87
2.74k
  for (char character : input) {
88
2.74k
    if (character == '_') {
89
236
      capitalize_next = true;
90
2.50k
    } else if (capitalize_next) {
91
236
      result.push_back(absl::ascii_toupper(character));
92
236
      capitalize_next = false;
93
2.27k
    } else {
94
2.27k
      result.push_back(character);
95
2.27k
    }
96
2.74k
  }
97
98
  // Lower-case the first letter.
99
174
  if (lower_first && !result.empty()) {
100
174
    result[0] = absl::ascii_tolower(result[0]);
101
174
  }
102
103
174
  return result;
104
174
}
105
106
0
std::string ToJsonName(const std::string& input) {
107
0
  bool capitalize_next = false;
108
0
  std::string result;
109
0
  result.reserve(input.size());
110
111
0
  for (char character : input) {
112
0
    if (character == '_') {
113
0
      capitalize_next = true;
114
0
    } else if (capitalize_next) {
115
0
      result.push_back(absl::ascii_toupper(character));
116
0
      capitalize_next = false;
117
0
    } else {
118
0
      result.push_back(character);
119
0
    }
120
0
  }
121
122
0
  return result;
123
0
}
124
125
template <typename OptionsT>
126
0
bool IsLegacyJsonFieldConflictEnabled(const OptionsT& options) {
127
0
#ifdef __GNUC__
128
0
#pragma GCC diagnostic push
129
0
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
130
0
#endif
131
0
  return options.deprecated_legacy_json_field_conflicts();
132
0
#ifdef __GNUC__
133
0
#pragma GCC diagnostic pop
134
0
#endif
135
0
}
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::IsLegacyJsonFieldConflictEnabled<google::protobuf::MessageOptions>(google::protobuf::MessageOptions const&)
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::IsLegacyJsonFieldConflictEnabled<google::protobuf::EnumOptions>(google::protobuf::EnumOptions const&)
136
137
// Backport of fold expressions for the comma operator to C++11.
138
// Usage:  Fold({expr...});
139
// Guaranteed to evaluate left-to-right
140
struct ExpressionEater {
141
  template <typename T>
142
2.11k
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
142
1.55k
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<bool>(bool&&)
Line
Count
Source
142
224
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<int&>(int&)
Line
Count
Source
142
224
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<char*&>(char*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::SourceCodeInfo*&>(google::protobuf::SourceCodeInfo*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::FileDescriptorTables*&>(google::protobuf::FileDescriptorTables*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::FeatureSet*&>(google::protobuf::FeatureSet*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::MessageOptions*&>(google::protobuf::MessageOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::FieldOptions*&>(google::protobuf::FieldOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::EnumOptions*&>(google::protobuf::EnumOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::EnumValueOptions*&>(google::protobuf::EnumValueOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::ExtensionRangeOptions*&>(google::protobuf::ExtensionRangeOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::OneofOptions*&>(google::protobuf::OneofOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::ServiceOptions*&>(google::protobuf::ServiceOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::MethodOptions*&>(google::protobuf::MethodOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:google::protobuf::(anonymous namespace)::ExpressionEater::ExpressionEater<google::protobuf::FileOptions*&>(google::protobuf::FileOptions*&)
Line
Count
Source
142
8
  ExpressionEater(T&&) {}  // NOLINT
143
};
144
736
void Fold(std::initializer_list<ExpressionEater>) {}
145
146
template <int R>
147
1.87k
constexpr size_t RoundUpTo(size_t n) {
148
1.87k
  static_assert((R & (R - 1)) == 0, "Must be power of two");
149
1.87k
  return (n + (R - 1)) & ~(R - 1);
150
1.87k
}
151
152
0
constexpr size_t Max(size_t a, size_t b) { return a > b ? a : b; }
153
template <typename T, typename... Ts>
154
0
constexpr size_t Max(T a, Ts... b) {
155
0
  return Max(a, Max(b...));
156
0
}
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::Max<unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long>(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)
157
158
template <typename T>
159
0
constexpr size_t EffectiveAlignof() {
160
0
  // `char` is special in that it gets aligned to 8. It is where we drop the
161
0
  // trivial structs.
162
0
  return std::is_same<T, char>::value ? 8 : alignof(T);
163
0
}
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<char>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::SourceCodeInfo>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::FileDescriptorTables>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::FeatureSet>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::MessageOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::FieldOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::EnumOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::EnumValueOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::ExtensionRangeOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::OneofOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::ServiceOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::MethodOptions>()
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::EffectiveAlignof<google::protobuf::FileOptions>()
164
165
template <int align, typename U, typename... T>
166
using AppendIfAlign =
167
    typename std::conditional<EffectiveAlignof<U>() == align, void (*)(T..., U),
168
                              void (*)(T...)>::type;
169
170
// Metafunction to sort types in descending order of alignment.
171
// Useful for the flat allocator to ensure proper alignment of all elements
172
// without having to add padding.
173
// Instead of implementing a proper sort metafunction we just do a
174
// filter+merge, which is much simpler to write as a metafunction.
175
// We have a fixed set of alignments we can filter on.
176
// For simplicity we use a function pointer as a type list.
177
template <typename In, typename T16, typename T8, typename T4, typename T2,
178
          typename T1>
179
struct TypeListSortImpl;
180
181
template <typename... T16, typename... T8, typename... T4, typename... T2,
182
          typename... T1>
183
struct TypeListSortImpl<void (*)(), void (*)(T16...), void (*)(T8...),
184
                        void (*)(T4...), void (*)(T2...), void (*)(T1...)> {
185
  using type = void (*)(T16..., T8..., T4..., T2..., T1...);
186
};
187
188
template <typename First, typename... Rest, typename... T16, typename... T8,
189
          typename... T4, typename... T2, typename... T1>
190
struct TypeListSortImpl<void (*)(First, Rest...), void (*)(T16...),
191
                        void (*)(T8...), void (*)(T4...), void (*)(T2...),
192
                        void (*)(T1...)> {
193
  using type = typename TypeListSortImpl<
194
      void (*)(Rest...), AppendIfAlign<16, First, T16...>,
195
      AppendIfAlign<8, First, T8...>, AppendIfAlign<4, First, T4...>,
196
      AppendIfAlign<2, First, T2...>, AppendIfAlign<1, First, T1...>>::type;
197
};
198
199
template <typename... T>
200
using SortByAlignment =
201
    typename TypeListSortImpl<void (*)(T...), void (*)(), void (*)(),
202
                              void (*)(), void (*)(), void (*)()>::type;
203
204
template <template <typename...> class C, typename... T>
205
auto ApplyTypeList(void (*)(T...)) -> C<T...>;
206
207
template <typename T>
208
0
constexpr int FindTypeIndex() {
209
0
  return -1;
210
0
}
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions>()
211
212
template <typename T, typename T1, typename... Ts>
213
0
constexpr int FindTypeIndex() {
214
0
  return std::is_same<T, T1>::value ? 0 : FindTypeIndex<T, Ts...>() + 1;
215
0
}
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<char, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::SourceCodeInfo, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileDescriptorTables, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FeatureSet, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MessageOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FieldOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::EnumValueOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ExtensionRangeOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::OneofOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::ServiceOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::MethodOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
Unexecuted instantiation: descriptor.cc:int google::protobuf::(anonymous namespace)::FindTypeIndex<google::protobuf::FileOptions, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>()
216
217
// A type to value map, where the possible keys as specified in `Keys...`.
218
// The values for key `K` is `ValueT<K>`
219
template <template <typename> class ValueT, typename... Keys>
220
class TypeMap {
221
 public:
222
  template <typename K>
223
6.92k
  ValueT<K>& Get() {
224
6.92k
    return static_cast<Base<K>&>(payload_).value;
225
6.92k
  }
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Line
Count
Source
223
704
  ValueT<K>& Get() {
224
704
    return static_cast<Base<K>&>(payload_).value;
225
704
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Line
Count
Source
223
2.25k
  ValueT<K>& Get() {
224
2.25k
    return static_cast<Base<K>&>(payload_).value;
225
2.25k
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileDescriptorTables>()
Line
Count
Source
223
40
  ValueT<K>& Get() {
224
40
    return static_cast<Base<K>&>(payload_).value;
225
40
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileOptions>()
Line
Count
Source
223
36
  ValueT<K>& Get() {
224
36
    return static_cast<Base<K>&>(payload_).value;
225
36
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::SourceCodeInfo>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<char>()
Line
Count
Source
223
2.62k
  ValueT<K>& Get() {
224
2.62k
    return static_cast<Base<K>&>(payload_).value;
225
2.62k
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ServiceOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MethodOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MessageOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ExtensionRangeOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::OneofOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumValueOptions>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FieldOptions>()
Line
Count
Source
223
100
  ValueT<K>& Get() {
224
100
    return static_cast<Base<K>&>(payload_).value;
225
100
  }
descriptor.cc:int& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FeatureSet>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:char*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<char>()
Line
Count
Source
223
878
  ValueT<K>& Get() {
224
878
    return static_cast<Base<K>&>(payload_).value;
225
878
  }
descriptor.cc:google::protobuf::SourceCodeInfo*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::SourceCodeInfo>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::FileDescriptorTables*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileDescriptorTables>()
Line
Count
Source
223
16
  ValueT<K>& Get() {
224
16
    return static_cast<Base<K>&>(payload_).value;
225
16
  }
descriptor.cc:google::protobuf::FeatureSet*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FeatureSet>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::MessageOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MessageOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::FieldOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FieldOptions>()
Line
Count
Source
223
36
  ValueT<K>& Get() {
224
36
    return static_cast<Base<K>&>(payload_).value;
225
36
  }
descriptor.cc:google::protobuf::EnumOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::EnumValueOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumValueOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::ExtensionRangeOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ExtensionRangeOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::OneofOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::OneofOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::ServiceOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ServiceOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::MethodOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MethodOptions>()
Line
Count
Source
223
8
  ValueT<K>& Get() {
224
8
    return static_cast<Base<K>&>(payload_).value;
225
8
  }
descriptor.cc:google::protobuf::FileOptions*& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileOptions>()
Line
Count
Source
223
12
  ValueT<K>& Get() {
224
12
    return static_cast<Base<K>&>(payload_).value;
225
12
  }
226
227
  template <typename K>
228
4.93k
  const ValueT<K>& Get() const {
229
4.93k
    return static_cast<const Base<K>&>(payload_).value;
230
4.93k
  }
descriptor.cc:char* const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::PointerT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<char>() const
Line
Count
Source
228
4.17k
  const ValueT<K>& Get() const {
229
4.17k
    return static_cast<const Base<K>&>(payload_).value;
230
4.17k
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<char>() const
Line
Count
Source
228
48
  const ValueT<K>& Get() const {
229
48
    return static_cast<const Base<K>&>(payload_).value;
230
48
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::SourceCodeInfo>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileDescriptorTables>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FeatureSet>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MessageOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FieldOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::EnumValueOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ExtensionRangeOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::OneofOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::ServiceOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::MethodOptions>() const
Line
Count
Source
228
56
  const ValueT<K>& Get() const {
229
56
    return static_cast<const Base<K>&>(payload_).value;
230
56
  }
descriptor.cc:int const& google::protobuf::(anonymous namespace)::TypeMap<google::protobuf::(anonymous namespace)::IntT, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Get<google::protobuf::FileOptions>() const
Line
Count
Source
228
40
  const ValueT<K>& Get() const {
229
40
    return static_cast<const Base<K>&>(payload_).value;
230
40
  }
231
232
 private:
233
  template <typename K>
234
  struct Base {
235
    ValueT<K> value{};
236
  };
237
  struct Payload : Base<Keys>... {};
238
  Payload payload_;
239
};
240
241
template <typename T>
242
using IntT = int;
243
template <typename T>
244
using PointerT = T*;
245
246
// Manages an allocation of sequential arrays of type `T...`.
247
// It is more space efficient than storing N (ptr, size) pairs, by storing only
248
// the pointer to the head and the boundaries between the arrays.
249
template <typename... T>
250
class FlatAllocation {
251
 public:
252
  static constexpr size_t kMaxAlign = Max(alignof(T)...);
253
254
8
  FlatAllocation(const TypeMap<IntT, T...>& ends) : ends_(ends) {
255
    // The arrays start just after FlatAllocation, so adjust the ends.
256
8
    Fold({(ends_.template Get<T>() +=
257
8
           RoundUpTo<kMaxAlign>(sizeof(FlatAllocation)))...});
258
8
    Fold({Init<T>()...});
259
8
  }
260
261
0
  void Destroy() {
262
0
    Fold({Destroy<T>()...});
263
0
    internal::SizedDelete(this, total_bytes());
264
0
  }
265
266
  template <int I>
267
  using type = typename std::tuple_element<I, std::tuple<T...>>::type;
268
269
  // Gets a tuple of the head pointers for the arrays
270
8
  TypeMap<PointerT, T...> Pointers() const {
271
8
    TypeMap<PointerT, T...> out;
272
8
    Fold({(out.template Get<T>() = Begin<T>())...});
273
8
    return out;
274
8
  }
275
276
277
 private:
278
  // Total number of bytes used by all arrays.
279
0
  int total_bytes() const {
280
    // Get the last end.
281
0
    return ends_.template Get<typename std::tuple_element<
282
0
        sizeof...(T) - 1, std::tuple<T...>>::type>();
283
0
  }
284
285
286
  template <typename U>
287
216
  int BeginOffset() const {
288
216
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
216
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
216
    using PrevType =
292
216
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
216
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
216
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
216
                           : ends_.template Get<PrevType>();
297
216
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::SourceCodeInfo>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::FileDescriptorTables>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::FeatureSet>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::MessageOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::FieldOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::EnumOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::EnumValueOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::ExtensionRangeOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::OneofOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::ServiceOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::MethodOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<google::protobuf::FileOptions>() const
Line
Count
Source
287
16
  int BeginOffset() const {
288
16
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
16
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
16
    using PrevType =
292
16
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
16
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
16
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
16
                           : ends_.template Get<PrevType>();
297
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::BeginOffset<char>() const
Line
Count
Source
287
8
  int BeginOffset() const {
288
8
    constexpr int type_index = FindTypeIndex<U, T...>();
289
    // Avoid a negative value here to keep it compiling when type_index == 0
290
8
    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
291
8
    using PrevType =
292
8
        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
293
    // Ensure the types are properly aligned.
294
8
    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
295
8
    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
296
8
                           : ends_.template Get<PrevType>();
297
8
  }
298
299
  template <typename U>
300
216
  int EndOffset() const {
301
216
    return ends_.template Get<U>();
302
216
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::SourceCodeInfo>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::FileDescriptorTables>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::FeatureSet>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::MessageOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::FieldOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::EnumOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::EnumValueOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::ExtensionRangeOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::OneofOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::ServiceOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::MethodOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<google::protobuf::FileOptions>() const
Line
Count
Source
300
16
  int EndOffset() const {
301
16
    return ends_.template Get<U>();
302
16
  }
descriptor.cc:int google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::EndOffset<char>() const
Line
Count
Source
300
8
  int EndOffset() const {
301
8
    return ends_.template Get<U>();
302
8
  }
303
304
  // Avoid the reinterpret_cast if the array is empty.
305
  // Clang's Control Flow Integrity does not like the cast pointing to memory
306
  // that is not yet initialized to be of that type.
307
  // (from -fsanitize=cfi-unrelated-cast)
308
  template <typename U>
309
112
  U* Begin() const {
310
112
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
112
    if (begin == end) return nullptr;
312
32
    return reinterpret_cast<U*>(data() + begin);
313
112
  }
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
8
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::SourceCodeInfo* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::SourceCodeInfo>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::FileDescriptorTables* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::FileDescriptorTables>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
8
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::FeatureSet* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::FeatureSet>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::MessageOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::MessageOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::FieldOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::FieldOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
4
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::EnumOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::EnumOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::EnumValueOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::EnumValueOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::ExtensionRangeOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::ExtensionRangeOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::OneofOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::OneofOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::ServiceOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::ServiceOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::MethodOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::MethodOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
0
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:google::protobuf::FileOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<google::protobuf::FileOptions>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
4
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
descriptor.cc:char* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Begin<char>() const
Line
Count
Source
309
8
  U* Begin() const {
310
8
    int begin = BeginOffset<U>(), end = EndOffset<U>();
311
8
    if (begin == end) return nullptr;
312
8
    return reinterpret_cast<U*>(data() + begin);
313
8
  }
314
315
  template <typename U>
316
0
  U* End() const {
317
0
    int begin = BeginOffset<U>(), end = EndOffset<U>();
318
0
    if (begin == end) return nullptr;
319
0
    return reinterpret_cast<U*>(data() + end);
320
0
  }
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Unexecuted instantiation: descriptor.cc:google::protobuf::SourceCodeInfo* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::SourceCodeInfo>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::FileDescriptorTables* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::FileDescriptorTables>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::FeatureSet* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::FeatureSet>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::MessageOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::MessageOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::FieldOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::FieldOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::EnumOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::EnumOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::EnumValueOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::EnumValueOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::ExtensionRangeOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::ExtensionRangeOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::OneofOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::OneofOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::ServiceOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::ServiceOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::MethodOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::MethodOptions>() const
Unexecuted instantiation: descriptor.cc:google::protobuf::FileOptions* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<google::protobuf::FileOptions>() const
Unexecuted instantiation: descriptor.cc:char* google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::End<char>() const
321
322
  template <typename U>
323
112
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
112
    if (std::is_same<U, char>::value) return true;
326
104
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
1.69k
         p != end; p += sizeof(U)) {
328
1.59k
      ::new (p) U{};
329
1.59k
    }
330
104
    return true;
331
112
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<char>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
0
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
0
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
0
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
1.55k
         p != end; p += sizeof(U)) {
328
1.55k
      ::new (p) U{};
329
1.55k
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::SourceCodeInfo>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::FileDescriptorTables>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
16
         p != end; p += sizeof(U)) {
328
8
      ::new (p) U{};
329
8
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::FeatureSet>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::MessageOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::FieldOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
36
         p != end; p += sizeof(U)) {
328
28
      ::new (p) U{};
329
28
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::EnumOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::EnumValueOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::ExtensionRangeOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::OneofOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::ServiceOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::MethodOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
8
         p != end; p += sizeof(U)) {
328
0
      ::new (p) U{};
329
0
    }
330
8
    return true;
331
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Init<google::protobuf::FileOptions>()
Line
Count
Source
323
8
  bool Init() {
324
    // Skip for the `char` block. No need to zero initialize it.
325
8
    if (std::is_same<U, char>::value) return true;
326
8
    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
327
12
         p != end; p += sizeof(U)) {
328
4
      ::new (p) U{};
329
4
    }
330
8
    return true;
331
8
  }
332
333
  template <typename U>
334
0
  bool Destroy() {
335
0
    if (std::is_trivially_destructible<U>::value) return true;
336
0
    for (U *it = Begin<U>(), *end = End<U>(); it != end; ++it) {
337
0
      it->~U();
338
0
    }
339
0
    return true;
340
0
  }
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<char>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::SourceCodeInfo>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::FileDescriptorTables>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::FeatureSet>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::MessageOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::FieldOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::EnumOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::EnumValueOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::ExtensionRangeOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::OneofOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::ServiceOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::MethodOptions>()
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocation<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::Destroy<google::protobuf::FileOptions>()
341
342
240
  char* data() const {
343
240
    return const_cast<char*>(reinterpret_cast<const char*>(this));
344
240
  }
345
346
  TypeMap<IntT, T...> ends_;
347
};
348
349
template <typename... T>
350
8
TypeMap<IntT, T...> CalculateEnds(const TypeMap<IntT, T...>& sizes) {
351
8
  int total = 0;
352
8
  TypeMap<IntT, T...> out;
353
8
  Fold({(out.template Get<T>() = total +=
354
8
         sizeof(T) * sizes.template Get<T>())...});
355
8
  return out;
356
8
}
357
358
// The implementation for FlatAllocator below.
359
// This separate class template makes it easier to have methods that fold on
360
// `T...`.
361
template <typename... T>
362
class FlatAllocatorImpl {
363
 public:
364
  using Allocation = FlatAllocation<T...>;
365
366
  template <typename U>
367
1.75k
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
1.75k
    ABSL_CHECK(!has_allocated());
370
1.75k
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
870
      static_assert(alignof(U) <= 8, "");
373
870
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
888
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
888
      using TypeToUse =
378
888
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
888
                                    char, U>::type;
380
888
      total_.template Get<TypeToUse>() += array_size;
381
888
    }
382
1.75k
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FileDescriptorTables>(int)
Line
Count
Source
367
8
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
8
    ABSL_CHECK(!has_allocated());
370
8
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
0
      static_assert(alignof(U) <= 8, "");
373
0
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
8
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
8
      using TypeToUse =
378
8
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
8
                                    char, U>::type;
380
8
      total_.template Get<TypeToUse>() += array_size;
381
8
    }
382
8
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FileOptions>(int)
Line
Count
Source
367
4
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
4
    ABSL_CHECK(!has_allocated());
370
4
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
0
      static_assert(alignof(U) <= 8, "");
373
0
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
4
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
4
      using TypeToUse =
378
4
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
4
                                    char, U>::type;
380
4
      total_.template Get<TypeToUse>() += array_size;
381
4
    }
382
4
  }
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::SourceCodeInfo>(int)
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::ServiceDescriptor>(int)
Line
Count
Source
367
8
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
8
    ABSL_CHECK(!has_allocated());
370
8
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
8
      static_assert(alignof(U) <= 8, "");
373
8
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
8
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
8
  }
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::ServiceOptions>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::MethodDescriptor>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::MethodOptions>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::MessageOptions>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::ExtensionRangeOptions>(int)
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::Descriptor::ReservedRange>(int)
Line
Count
Source
367
88
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
88
    ABSL_CHECK(!has_allocated());
370
88
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
88
      static_assert(alignof(U) <= 8, "");
373
88
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
88
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
88
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*>(int)
Line
Count
Source
367
122
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
122
    ABSL_CHECK(!has_allocated());
370
122
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
122
      static_assert(alignof(U) <= 8, "");
373
122
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
122
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
122
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::OneofDescriptor>(int)
Line
Count
Source
367
88
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
88
    ABSL_CHECK(!has_allocated());
370
88
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
88
      static_assert(alignof(U) <= 8, "");
373
88
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
88
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
88
  }
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::OneofOptions>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::EnumOptions>(int)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::EnumValueOptions>(int)
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::EnumDescriptor::ReservedRange>(int)
Line
Count
Source
367
34
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
34
    ABSL_CHECK(!has_allocated());
370
34
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
34
      static_assert(alignof(U) <= 8, "");
373
34
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
34
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
34
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FieldDescriptor>(int)
Line
Count
Source
367
184
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
184
    ABSL_CHECK(!has_allocated());
370
184
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
184
      static_assert(alignof(U) <= 8, "");
373
184
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
184
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
184
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FieldOptions>(int)
Line
Count
Source
367
28
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
28
    ABSL_CHECK(!has_allocated());
370
28
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
0
      static_assert(alignof(U) <= 8, "");
373
0
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
28
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
28
      using TypeToUse =
378
28
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
28
                                    char, U>::type;
380
28
      total_.template Get<TypeToUse>() += array_size;
381
28
    }
382
28
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<int>(int)
Line
Count
Source
367
16
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
16
    ABSL_CHECK(!has_allocated());
370
16
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
16
      static_assert(alignof(U) <= 8, "");
373
16
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
16
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
16
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FileDescriptor const*>(int)
Line
Count
Source
367
8
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
8
    ABSL_CHECK(!has_allocated());
370
8
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
8
      static_assert(alignof(U) <= 8, "");
373
8
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
8
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
8
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::EnumValueDescriptor>(int)
Line
Count
Source
367
34
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
34
    ABSL_CHECK(!has_allocated());
370
34
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
34
      static_assert(alignof(U) <= 8, "");
373
34
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
34
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
34
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int)
Line
Count
Source
367
848
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
848
    ABSL_CHECK(!has_allocated());
370
848
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
0
      static_assert(alignof(U) <= 8, "");
373
0
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
848
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
848
      using TypeToUse =
378
848
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
848
                                    char, U>::type;
380
848
      total_.template Get<TypeToUse>() += array_size;
381
848
    }
382
848
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::FileDescriptor>(int)
Line
Count
Source
367
8
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
8
    ABSL_CHECK(!has_allocated());
370
8
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
8
      static_assert(alignof(U) <= 8, "");
373
8
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
8
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
8
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::EnumDescriptor>(int)
Line
Count
Source
367
96
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
96
    ABSL_CHECK(!has_allocated());
370
96
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
96
      static_assert(alignof(U) <= 8, "");
373
96
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
96
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
96
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::Descriptor>(int)
Line
Count
Source
367
96
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
96
    ABSL_CHECK(!has_allocated());
370
96
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
96
      static_assert(alignof(U) <= 8, "");
373
96
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
96
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
96
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::PlanArray<google::protobuf::Descriptor::ExtensionRange>(int)
Line
Count
Source
367
88
  void PlanArray(int array_size) {
368
    // We can't call PlanArray after FinalizePlanning has been called.
369
88
    ABSL_CHECK(!has_allocated());
370
88
    if (std::is_trivially_destructible<U>::value) {
371
      // Trivial types are aligned to 8 bytes.
372
88
      static_assert(alignof(U) <= 8, "");
373
88
      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
374
88
    } else {
375
      // Since we can't use `if constexpr`, just make the expression compile
376
      // when this path is not taken.
377
0
      using TypeToUse =
378
0
          typename std::conditional<std::is_trivially_destructible<U>::value,
379
0
                                    char, U>::type;
380
0
      total_.template Get<TypeToUse>() += array_size;
381
0
    }
382
88
  }
383
384
  template <typename U>
385
1.60k
  U* AllocateArray(int array_size) {
386
1.60k
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
1.60k
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
1.60k
    ABSL_CHECK(has_allocated());
391
392
1.60k
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
1.60k
    int& used = used_.template Get<TypeToUse>();
394
1.60k
    U* res = reinterpret_cast<U*>(data + used);
395
1.60k
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
1.60k
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
1.60k
    return res;
398
1.60k
  }
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int)
Line
Count
Source
385
696
  U* AllocateArray(int array_size) {
386
696
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
696
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
696
    ABSL_CHECK(has_allocated());
391
392
696
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
696
    int& used = used_.template Get<TypeToUse>();
394
696
    U* res = reinterpret_cast<U*>(data + used);
395
696
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
696
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
696
    return res;
398
696
  }
descriptor.cc:google::protobuf::EnumValueDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::EnumValueDescriptor>(int)
Line
Count
Source
385
34
  U* AllocateArray(int array_size) {
386
34
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
34
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
34
    ABSL_CHECK(has_allocated());
391
392
34
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
34
    int& used = used_.template Get<TypeToUse>();
394
34
    U* res = reinterpret_cast<U*>(data + used);
395
34
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
34
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
34
    return res;
398
34
  }
descriptor.cc:google::protobuf::EnumDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::EnumDescriptor>(int)
Line
Count
Source
385
96
  U* AllocateArray(int array_size) {
386
96
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
96
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
96
    ABSL_CHECK(has_allocated());
391
392
96
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
96
    int& used = used_.template Get<TypeToUse>();
394
96
    U* res = reinterpret_cast<U*>(data + used);
395
96
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
96
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
96
    return res;
398
96
  }
descriptor.cc:google::protobuf::Descriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::Descriptor>(int)
Line
Count
Source
385
96
  U* AllocateArray(int array_size) {
386
96
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
96
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
96
    ABSL_CHECK(has_allocated());
391
392
96
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
96
    int& used = used_.template Get<TypeToUse>();
394
96
    U* res = reinterpret_cast<U*>(data + used);
395
96
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
96
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
96
    return res;
398
96
  }
descriptor.cc:google::protobuf::Descriptor::ExtensionRange* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::Descriptor::ExtensionRange>(int)
Line
Count
Source
385
88
  U* AllocateArray(int array_size) {
386
88
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
88
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
88
    ABSL_CHECK(has_allocated());
391
392
88
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
88
    int& used = used_.template Get<TypeToUse>();
394
88
    U* res = reinterpret_cast<U*>(data + used);
395
88
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
88
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
88
    return res;
398
88
  }
descriptor.cc:google::protobuf::FileDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FileDescriptor>(int)
Line
Count
Source
385
8
  U* AllocateArray(int array_size) {
386
8
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
8
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
8
    ABSL_CHECK(has_allocated());
391
392
8
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
8
    int& used = used_.template Get<TypeToUse>();
394
8
    U* res = reinterpret_cast<U*>(data + used);
395
8
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
8
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
8
    return res;
398
8
  }
descriptor.cc:google::protobuf::FileOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FileOptions>(int)
Line
Count
Source
385
4
  U* AllocateArray(int array_size) {
386
4
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
4
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
4
    ABSL_CHECK(has_allocated());
391
392
4
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
4
    int& used = used_.template Get<TypeToUse>();
394
4
    U* res = reinterpret_cast<U*>(data + used);
395
4
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
4
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
4
    return res;
398
4
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::SourceCodeInfo* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::SourceCodeInfo>(int)
descriptor.cc:google::protobuf::FileDescriptorTables* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FileDescriptorTables>(int)
Line
Count
Source
385
8
  U* AllocateArray(int array_size) {
386
8
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
8
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
8
    ABSL_CHECK(has_allocated());
391
392
8
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
8
    int& used = used_.template Get<TypeToUse>();
394
8
    U* res = reinterpret_cast<U*>(data + used);
395
8
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
8
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
8
    return res;
398
8
  }
descriptor.cc:google::protobuf::FileDescriptor const** google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FileDescriptor const*>(int)
Line
Count
Source
385
8
  U* AllocateArray(int array_size) {
386
8
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
8
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
8
    ABSL_CHECK(has_allocated());
391
392
8
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
8
    int& used = used_.template Get<TypeToUse>();
394
8
    U* res = reinterpret_cast<U*>(data + used);
395
8
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
8
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
8
    return res;
398
8
  }
descriptor.cc:int* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<int>(int)
Line
Count
Source
385
16
  U* AllocateArray(int array_size) {
386
16
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
16
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
16
    ABSL_CHECK(has_allocated());
391
392
16
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
16
    int& used = used_.template Get<TypeToUse>();
394
16
    U* res = reinterpret_cast<U*>(data + used);
395
16
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
16
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
16
    return res;
398
16
  }
descriptor.cc:google::protobuf::ServiceDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::ServiceDescriptor>(int)
Line
Count
Source
385
8
  U* AllocateArray(int array_size) {
386
8
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
8
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
8
    ABSL_CHECK(has_allocated());
391
392
8
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
8
    int& used = used_.template Get<TypeToUse>();
394
8
    U* res = reinterpret_cast<U*>(data + used);
395
8
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
8
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
8
    return res;
398
8
  }
descriptor.cc:google::protobuf::FieldDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FieldDescriptor>(int)
Line
Count
Source
385
184
  U* AllocateArray(int array_size) {
386
184
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
184
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
184
    ABSL_CHECK(has_allocated());
391
392
184
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
184
    int& used = used_.template Get<TypeToUse>();
394
184
    U* res = reinterpret_cast<U*>(data + used);
395
184
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
184
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
184
    return res;
398
184
  }
descriptor.cc:google::protobuf::OneofDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::OneofDescriptor>(int)
Line
Count
Source
385
88
  U* AllocateArray(int array_size) {
386
88
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
88
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
88
    ABSL_CHECK(has_allocated());
391
392
88
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
88
    int& used = used_.template Get<TypeToUse>();
394
88
    U* res = reinterpret_cast<U*>(data + used);
395
88
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
88
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
88
    return res;
398
88
  }
descriptor.cc:google::protobuf::Descriptor::ReservedRange* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::Descriptor::ReservedRange>(int)
Line
Count
Source
385
88
  U* AllocateArray(int array_size) {
386
88
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
88
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
88
    ABSL_CHECK(has_allocated());
391
392
88
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
88
    int& used = used_.template Get<TypeToUse>();
394
88
    U* res = reinterpret_cast<U*>(data + used);
395
88
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
88
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
88
    return res;
398
88
  }
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const** google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*>(int)
Line
Count
Source
385
122
  U* AllocateArray(int array_size) {
386
122
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
122
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
122
    ABSL_CHECK(has_allocated());
391
392
122
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
122
    int& used = used_.template Get<TypeToUse>();
394
122
    U* res = reinterpret_cast<U*>(data + used);
395
122
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
122
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
122
    return res;
398
122
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::MessageOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::MessageOptions>(int)
descriptor.cc:google::protobuf::FieldOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::FieldOptions>(int)
Line
Count
Source
385
28
  U* AllocateArray(int array_size) {
386
28
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
28
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
28
    ABSL_CHECK(has_allocated());
391
392
28
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
28
    int& used = used_.template Get<TypeToUse>();
394
28
    U* res = reinterpret_cast<U*>(data + used);
395
28
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
28
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
28
    return res;
398
28
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::ExtensionRangeOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::ExtensionRangeOptions>(int)
Unexecuted instantiation: descriptor.cc:google::protobuf::OneofOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::OneofOptions>(int)
descriptor.cc:google::protobuf::EnumDescriptor::ReservedRange* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::EnumDescriptor::ReservedRange>(int)
Line
Count
Source
385
34
  U* AllocateArray(int array_size) {
386
34
    constexpr bool trivial = std::is_trivially_destructible<U>::value;
387
34
    using TypeToUse = typename std::conditional<trivial, char, U>::type;
388
389
    // We can only allocate after FinalizePlanning has been called.
390
34
    ABSL_CHECK(has_allocated());
391
392
34
    TypeToUse*& data = pointers_.template Get<TypeToUse>();
393
34
    int& used = used_.template Get<TypeToUse>();
394
34
    U* res = reinterpret_cast<U*>(data + used);
395
34
    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
396
34
    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
397
34
    return res;
398
34
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::EnumOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::EnumOptions>(int)
Unexecuted instantiation: descriptor.cc:google::protobuf::EnumValueOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::EnumValueOptions>(int)
Unexecuted instantiation: descriptor.cc:google::protobuf::MethodDescriptor* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::MethodDescriptor>(int)
Unexecuted instantiation: descriptor.cc:google::protobuf::ServiceOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::ServiceOptions>(int)
Unexecuted instantiation: descriptor.cc:google::protobuf::MethodOptions* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateArray<google::protobuf::MethodOptions>(int)
399
400
  template <typename... In>
401
696
  const std::string* AllocateStrings(In&&... in) {
402
696
    std::string* strings = AllocateArray<std::string>(sizeof...(in));
403
696
    std::string* res = strings;
404
696
    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
405
696
    return res;
406
696
  }
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<absl::lts_20230802::string_view>(absl::lts_20230802::string_view&&)
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<char const (&) [1]>(char const (&) [1])
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<absl::lts_20230802::string_view&, absl::lts_20230802::string_view&>(absl::lts_20230802::string_view&, absl::lts_20230802::string_view&)
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<char const (&) [18], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [18], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<absl::lts_20230802::string_view&>(absl::lts_20230802::string_view&)
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
401
16
  const std::string* AllocateStrings(In&&... in) {
402
16
    std::string* strings = AllocateArray<std::string>(sizeof...(in));
403
16
    std::string* res = strings;
404
16
    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
405
16
    return res;
406
16
  }
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
401
506
  const std::string* AllocateStrings(In&&... in) {
402
506
    std::string* strings = AllocateArray<std::string>(sizeof...(in));
403
506
    std::string* res = strings;
404
506
    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
405
506
    return res;
406
506
  }
descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
401
174
  const std::string* AllocateStrings(In&&... in) {
402
174
    std::string* strings = AllocateArray<std::string>(sizeof...(in));
403
174
    std::string* res = strings;
404
174
    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
405
174
    return res;
406
174
  }
Unexecuted instantiation: descriptor.cc:std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::AllocateStrings<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
407
408
  // Allocate all 5 names of the field:
409
  // name, full name, lowercase, camelcase and json.
410
  // It will dedup the strings when possible.
411
  // The resulting array contains `name` at index 0, `full_name` at index 1
412
  // and the other 3 indices are specified in the result.
413
  void PlanFieldNames(const std::string& name,
414
396
                      const std::string* opt_json_name) {
415
396
    ABSL_CHECK(!has_allocated());
416
417
    // Fast path for snake_case names, which follow the style guide.
418
396
    if (opt_json_name == nullptr) {
419
396
      switch (GetFieldNameCase(name)) {
420
222
        case FieldNameCase::kAllLower:
421
          // Case 1: they are all the same.
422
222
          return PlanArray<std::string>(2);
423
174
        case FieldNameCase::kSnakeCase:
424
          // Case 2: name==lower, camel==json
425
174
          return PlanArray<std::string>(3);
426
0
        default:
427
0
          break;
428
396
      }
429
396
    }
430
431
0
    std::string lowercase_name = name;
432
0
    absl::AsciiStrToLower(&lowercase_name);
433
434
0
    std::string camelcase_name = ToCamelCase(name, /* lower_first = */ true);
435
0
    std::string json_name =
436
0
        opt_json_name != nullptr ? *opt_json_name : ToJsonName(name);
437
438
0
    absl::string_view all_names[] = {name, lowercase_name, camelcase_name,
439
0
                                     json_name};
440
0
    std::sort(all_names, all_names + 4);
441
0
    int unique =
442
0
        static_cast<int>(std::unique(all_names, all_names + 4) - all_names);
443
444
0
    PlanArray<std::string>(unique + 1);
445
0
  }
446
447
  struct FieldNamesResult {
448
    const std::string* array;
449
    int lowercase_index;
450
    int camelcase_index;
451
    int json_index;
452
  };
453
  FieldNamesResult AllocateFieldNames(const std::string& name,
454
                                      const std::string& scope,
455
396
                                      const std::string* opt_json_name) {
456
396
    ABSL_CHECK(has_allocated());
457
458
396
    std::string full_name =
459
396
        scope.empty() ? name : absl::StrCat(scope, ".", name);
460
461
    // Fast path for snake_case names, which follow the style guide.
462
396
    if (opt_json_name == nullptr) {
463
396
      switch (GetFieldNameCase(name)) {
464
222
        case FieldNameCase::kAllLower:
465
          // Case 1: they are all the same.
466
222
          return {AllocateStrings(name, std::move(full_name)), 0, 0, 0};
467
174
        case FieldNameCase::kSnakeCase:
468
          // Case 2: name==lower, camel==json
469
174
          return {AllocateStrings(name, std::move(full_name),
470
174
                                  ToCamelCase(name, /* lower_first = */ true)),
471
174
                  0, 2, 2};
472
0
        default:
473
0
          break;
474
396
      }
475
396
    }
476
477
0
    std::vector<std::string> names;
478
0
    names.push_back(name);
479
0
    names.push_back(std::move(full_name));
480
481
0
    const auto push_name = [&](std::string new_name) {
482
0
      for (size_t i = 0; i < names.size(); ++i) {
483
        // Do not compare the full_name. It is unlikely to match, except in
484
        // custom json_name. We are not taking this into account in
485
        // PlanFieldNames so better to not try it.
486
0
        if (i == 1) continue;
487
0
        if (names[i] == new_name) return i;
488
0
      }
489
0
      names.push_back(std::move(new_name));
490
0
      return names.size() - 1;
491
0
    };
492
493
0
    FieldNamesResult result{nullptr, 0, 0, 0};
494
495
0
    std::string lowercase_name = name;
496
0
    absl::AsciiStrToLower(&lowercase_name);
497
0
    result.lowercase_index = push_name(std::move(lowercase_name));
498
0
    result.camelcase_index =
499
0
        push_name(ToCamelCase(name, /* lower_first = */ true));
500
0
    result.json_index =
501
0
        push_name(opt_json_name != nullptr ? *opt_json_name : ToJsonName(name));
502
503
0
    std::string* all_names = AllocateArray<std::string>(names.size());
504
0
    result.array = all_names;
505
0
    std::move(names.begin(), names.end(), all_names);
506
507
0
    return result;
508
396
  }
509
510
  template <typename Alloc>
511
8
  void FinalizePlanning(Alloc& alloc) {
512
8
    ABSL_CHECK(!has_allocated());
513
514
8
    pointers_ = alloc->CreateFlatAlloc(total_)->Pointers();
515
516
8
    ABSL_CHECK(has_allocated());
517
8
  }
descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::FinalizePlanning<google::protobuf::DescriptorPool::Tables*>(google::protobuf::DescriptorPool::Tables*&)
Line
Count
Source
511
8
  void FinalizePlanning(Alloc& alloc) {
512
8
    ABSL_CHECK(!has_allocated());
513
514
8
    pointers_ = alloc->CreateFlatAlloc(total_)->Pointers();
515
516
8
    ABSL_CHECK(has_allocated());
517
8
  }
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::FinalizePlanning<std::__1::unique_ptr<google::protobuf::DescriptorPool::Tables, std::__1::default_delete<google::protobuf::DescriptorPool::Tables> > const>(std::__1::unique_ptr<google::protobuf::DescriptorPool::Tables, std::__1::default_delete<google::protobuf::DescriptorPool::Tables> > const&)
518
519
8
  void ExpectConsumed() const {
520
    // We verify that we consumed all the memory requested if there was no
521
    // error in processing.
522
8
    Fold({ExpectConsumed<T>()...});
523
8
  }
524
525
 private:
526
4.17k
  bool has_allocated() const {
527
4.17k
    return pointers_.template Get<char>() != nullptr;
528
4.17k
  }
529
530
9.10k
  static bool IsLower(char c) { return 'a' <= c && c <= 'z'; }
531
492
  static bool IsDigit(char c) { return '0' <= c && c <= '9'; }
532
8.30k
  static bool IsLowerOrDigit(char c) { return IsLower(c) || IsDigit(c); }
533
534
  enum class FieldNameCase { kAllLower, kSnakeCase, kOther };
535
792
  FieldNameCase GetFieldNameCase(const std::string& name) {
536
792
    if (!IsLower(name[0])) return FieldNameCase::kOther;
537
792
    FieldNameCase best = FieldNameCase::kAllLower;
538
8.30k
    for (char c : name) {
539
8.30k
      if (IsLowerOrDigit(c)) {
540
        // nothing to do
541
7.83k
      } else if (c == '_') {
542
472
        best = FieldNameCase::kSnakeCase;
543
472
      } else {
544
0
        return FieldNameCase::kOther;
545
0
      }
546
8.30k
    }
547
792
    return best;
548
792
  }
549
550
  template <typename U>
551
112
  bool ExpectConsumed() const {
552
112
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
112
    return true;
554
112
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<char>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::SourceCodeInfo>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::FileDescriptorTables>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::FeatureSet>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::MessageOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::FieldOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::EnumOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::EnumValueOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::ExtensionRangeOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::OneofOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::ServiceOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::MethodOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::FlatAllocatorImpl<char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, google::protobuf::SourceCodeInfo, google::protobuf::FileDescriptorTables, google::protobuf::FeatureSet, google::protobuf::MessageOptions, google::protobuf::FieldOptions, google::protobuf::EnumOptions, google::protobuf::EnumValueOptions, google::protobuf::ExtensionRangeOptions, google::protobuf::OneofOptions, google::protobuf::ServiceOptions, google::protobuf::MethodOptions, google::protobuf::FileOptions>::ExpectConsumed<google::protobuf::FileOptions>() const
Line
Count
Source
551
8
  bool ExpectConsumed() const {
552
8
    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
553
8
    return true;
554
8
  }
555
556
  TypeMap<PointerT, T...> pointers_;
557
  TypeMap<IntT, T...> total_;
558
  TypeMap<IntT, T...> used_;
559
};
560
561
}  // namespace
562
563
class Symbol {
564
 public:
565
  enum Type {
566
    NULL_SYMBOL,
567
    MESSAGE,
568
    FIELD,
569
    ONEOF,
570
    ENUM,
571
    ENUM_VALUE,
572
    ENUM_VALUE_OTHER_PARENT,
573
    SERVICE,
574
    METHOD,
575
    FULL_PACKAGE,
576
    SUB_PACKAGE,
577
  };
578
579
442
  Symbol() {
580
442
    static constexpr internal::SymbolBase null_symbol{};
581
442
    static_assert(null_symbol.symbol_type_ == NULL_SYMBOL, "");
582
    // Initialize with a sentinel to make sure `ptr_` is never null.
583
442
    ptr_ = &null_symbol;
584
442
  }
585
586
  // Every object we store derives from internal::SymbolBase, where we store the
587
  // symbol type enum.
588
  // Storing in the object can be done without using more space in most cases,
589
  // while storing it in the Symbol type would require 8 bytes.
590
#define DEFINE_MEMBERS(TYPE, TYPE_CONSTANT, FIELD)                             \
591
532
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
532
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
532
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::EnumDescriptor*)
Line
Count
Source
591
34
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
34
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
34
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::Descriptor*)
Line
Count
Source
591
88
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
88
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
88
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::FileDescriptor*)
Line
Count
Source
591
6
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
6
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
6
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::Symbol::Subpackage*)
Line
Count
Source
591
4
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
4
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
4
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::FieldDescriptor*)
Line
Count
Source
591
396
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
396
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
396
  }                                                                            \
google::protobuf::Symbol::Symbol(google::protobuf::OneofDescriptor*)
Line
Count
Source
591
4
  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
592
4
    value->symbol_type_ = TYPE_CONSTANT;                                       \
593
4
  }                                                                            \
Unexecuted instantiation: google::protobuf::Symbol::Symbol(google::protobuf::ServiceDescriptor*)
Unexecuted instantiation: google::protobuf::Symbol::Symbol(google::protobuf::MethodDescriptor*)
594
310k
  const TYPE* FIELD() const {                                                  \
595
310k
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
310k
  }
google::protobuf::Symbol::file_descriptor() const
Line
Count
Source
594
26
  const TYPE* FIELD() const {                                                  \
595
26
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
26
  }
google::protobuf::Symbol::sub_package_file_descriptor() const
Line
Count
Source
594
40
  const TYPE* FIELD() const {                                                  \
595
40
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
40
  }
google::protobuf::Symbol::field_descriptor() const
Line
Count
Source
594
309k
  const TYPE* FIELD() const {                                                  \
595
309k
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
309k
  }
google::protobuf::Symbol::descriptor() const
Line
Count
Source
594
1.10k
  const TYPE* FIELD() const {                                                  \
595
1.10k
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
1.10k
  }
google::protobuf::Symbol::oneof_descriptor() const
Line
Count
Source
594
20
  const TYPE* FIELD() const {                                                  \
595
20
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
20
  }
google::protobuf::Symbol::enum_descriptor() const
Line
Count
Source
594
304
  const TYPE* FIELD() const {                                                  \
595
304
    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
596
304
  }
Unexecuted instantiation: google::protobuf::Symbol::service_descriptor() const
Unexecuted instantiation: google::protobuf::Symbol::method_descriptor() const
597
598
  DEFINE_MEMBERS(Descriptor, MESSAGE, descriptor)
599
  DEFINE_MEMBERS(FieldDescriptor, FIELD, field_descriptor)
600
  DEFINE_MEMBERS(OneofDescriptor, ONEOF, oneof_descriptor)
601
  DEFINE_MEMBERS(EnumDescriptor, ENUM, enum_descriptor)
602
  DEFINE_MEMBERS(ServiceDescriptor, SERVICE, service_descriptor)
603
  DEFINE_MEMBERS(MethodDescriptor, METHOD, method_descriptor)
604
  DEFINE_MEMBERS(FileDescriptor, FULL_PACKAGE, file_descriptor)
605
606
  // We use a special node for subpackage FileDescriptor.
607
  // It is potentially added to the table with multiple different names, so we
608
  // need a separate place to put the name.
609
  struct Subpackage : internal::SymbolBase {
610
    int name_size;
611
    const FileDescriptor* file;
612
  };
613
  DEFINE_MEMBERS(Subpackage, SUB_PACKAGE, sub_package_file_descriptor)
614
615
  // Enum values have two different parents.
616
  // We use two different identitied for the same object to determine the two
617
  // different insertions in the map.
618
316
  static Symbol EnumValue(EnumValueDescriptor* value, int n) {
619
316
    Symbol s;
620
316
    internal::SymbolBase* ptr;
621
316
    if (n == 0) {
622
158
      ptr = static_cast<internal::SymbolBaseN<0>*>(value);
623
158
      ptr->symbol_type_ = ENUM_VALUE;
624
158
    } else {
625
158
      ptr = static_cast<internal::SymbolBaseN<1>*>(value);
626
158
      ptr->symbol_type_ = ENUM_VALUE_OTHER_PARENT;
627
158
    }
628
316
    s.ptr_ = ptr;
629
316
    return s;
630
316
  }
631
632
1.63k
  const EnumValueDescriptor* enum_value_descriptor() const {
633
1.63k
    return type() == ENUM_VALUE
634
1.63k
               ? static_cast<const EnumValueDescriptor*>(
635
1.00k
                     static_cast<const internal::SymbolBaseN<0>*>(ptr_))
636
1.63k
           : type() == ENUM_VALUE_OTHER_PARENT
637
638
               ? static_cast<const EnumValueDescriptor*>(
638
638
                     static_cast<const internal::SymbolBaseN<1>*>(ptr_))
639
638
               : nullptr;
640
1.63k
  }
641
642
#undef DEFINE_MEMBERS
643
644
472k
  Type type() const { return static_cast<Type>(ptr_->symbol_type_); }
645
912
  bool IsNull() const { return type() == NULL_SYMBOL; }
646
0
  bool IsType() const { return type() == MESSAGE || type() == ENUM; }
647
0
  bool IsAggregate() const {
648
0
    return IsType() || IsPackage() || type() == SERVICE;
649
0
  }
650
182
  bool IsPackage() const {
651
182
    return type() == FULL_PACKAGE || type() == SUB_PACKAGE;
652
182
  }
653
654
354
  const FileDescriptor* GetFile() const {
655
354
    switch (type()) {
656
278
      case MESSAGE:
657
278
        return descriptor()->file();
658
2
      case FIELD:
659
2
        return field_descriptor()->file();
660
0
      case ONEOF:
661
0
        return oneof_descriptor()->containing_type()->file();
662
44
      case ENUM:
663
44
        return enum_descriptor()->file();
664
30
      case ENUM_VALUE:
665
30
        return enum_value_descriptor()->type()->file();
666
0
      case SERVICE:
667
0
        return service_descriptor()->file();
668
0
      case METHOD:
669
0
        return method_descriptor()->service()->file();
670
0
      case FULL_PACKAGE:
671
0
        return file_descriptor();
672
0
      case SUB_PACKAGE:
673
0
        return sub_package_file_descriptor()->file;
674
0
      default:
675
0
        return nullptr;
676
354
    }
677
354
  }
678
679
1.85k
  absl::string_view full_name() const {
680
1.85k
    switch (type()) {
681
325
      case MESSAGE:
682
325
        return descriptor()->full_name();
683
1.04k
      case FIELD:
684
1.04k
        return field_descriptor()->full_name();
685
4
      case ONEOF:
686
4
        return oneof_descriptor()->full_name();
687
104
      case ENUM:
688
104
        return enum_descriptor()->full_name();
689
333
      case ENUM_VALUE:
690
333
        return enum_value_descriptor()->full_name();
691
0
      case SERVICE:
692
0
        return service_descriptor()->full_name();
693
0
      case METHOD:
694
0
        return method_descriptor()->full_name();
695
26
      case FULL_PACKAGE:
696
26
        return file_descriptor()->package();
697
20
      case SUB_PACKAGE:
698
20
        return absl::string_view(sub_package_file_descriptor()->file->package())
699
20
            .substr(0, sub_package_file_descriptor()->name_size);
700
0
      default:
701
0
        ABSL_CHECK(false);
702
1.85k
    }
703
0
    return "";
704
1.85k
  }
705
706
155k
  std::pair<const void*, absl::string_view> parent_name_key() const {
707
155k
    const auto or_file = [&](const void* p) { return p ? p : GetFile(); };
708
155k
    switch (type()) {
709
188
      case MESSAGE:
710
188
        return {or_file(descriptor()->containing_type()), descriptor()->name()};
711
154k
      case FIELD: {
712
154k
        auto* field = field_descriptor();
713
154k
        return {or_file(field->is_extension() ? field->extension_scope()
714
154k
                                              : field->containing_type()),
715
154k
                field->name()};
716
0
      }
717
8
      case ONEOF:
718
8
        return {oneof_descriptor()->containing_type(),
719
8
                oneof_descriptor()->name()};
720
57
      case ENUM:
721
57
        return {or_file(enum_descriptor()->containing_type()),
722
57
                enum_descriptor()->name()};
723
314
      case ENUM_VALUE:
724
314
        return {or_file(enum_value_descriptor()->type()->containing_type()),
725
314
                enum_value_descriptor()->name()};
726
319
      case ENUM_VALUE_OTHER_PARENT:
727
319
        return {enum_value_descriptor()->type(),
728
319
                enum_value_descriptor()->name()};
729
0
      case SERVICE:
730
0
        return {GetFile(), service_descriptor()->name()};
731
0
      case METHOD:
732
0
        return {method_descriptor()->service(), method_descriptor()->name()};
733
0
      default:
734
0
        ABSL_CHECK(false);
735
155k
    }
736
0
    return {};
737
155k
  }
738
739
 private:
740
  const internal::SymbolBase* ptr_;
741
};
742
743
const FieldDescriptor::CppType
744
    FieldDescriptor::kTypeToCppTypeMap[MAX_TYPE + 1] = {
745
        static_cast<CppType>(0),  // 0 is reserved for errors
746
747
        CPPTYPE_DOUBLE,   // TYPE_DOUBLE
748
        CPPTYPE_FLOAT,    // TYPE_FLOAT
749
        CPPTYPE_INT64,    // TYPE_INT64
750
        CPPTYPE_UINT64,   // TYPE_UINT64
751
        CPPTYPE_INT32,    // TYPE_INT32
752
        CPPTYPE_UINT64,   // TYPE_FIXED64
753
        CPPTYPE_UINT32,   // TYPE_FIXED32
754
        CPPTYPE_BOOL,     // TYPE_BOOL
755
        CPPTYPE_STRING,   // TYPE_STRING
756
        CPPTYPE_MESSAGE,  // TYPE_GROUP
757
        CPPTYPE_MESSAGE,  // TYPE_MESSAGE
758
        CPPTYPE_STRING,   // TYPE_BYTES
759
        CPPTYPE_UINT32,   // TYPE_UINT32
760
        CPPTYPE_ENUM,     // TYPE_ENUM
761
        CPPTYPE_INT32,    // TYPE_SFIXED32
762
        CPPTYPE_INT64,    // TYPE_SFIXED64
763
        CPPTYPE_INT32,    // TYPE_SINT32
764
        CPPTYPE_INT64,    // TYPE_SINT64
765
};
766
767
const char* const FieldDescriptor::kTypeToName[MAX_TYPE + 1] = {
768
    "ERROR",  // 0 is reserved for errors
769
770
    "double",    // TYPE_DOUBLE
771
    "float",     // TYPE_FLOAT
772
    "int64",     // TYPE_INT64
773
    "uint64",    // TYPE_UINT64
774
    "int32",     // TYPE_INT32
775
    "fixed64",   // TYPE_FIXED64
776
    "fixed32",   // TYPE_FIXED32
777
    "bool",      // TYPE_BOOL
778
    "string",    // TYPE_STRING
779
    "group",     // TYPE_GROUP
780
    "message",   // TYPE_MESSAGE
781
    "bytes",     // TYPE_BYTES
782
    "uint32",    // TYPE_UINT32
783
    "enum",      // TYPE_ENUM
784
    "sfixed32",  // TYPE_SFIXED32
785
    "sfixed64",  // TYPE_SFIXED64
786
    "sint32",    // TYPE_SINT32
787
    "sint64",    // TYPE_SINT64
788
};
789
790
const char* const FieldDescriptor::kCppTypeToName[MAX_CPPTYPE + 1] = {
791
    "ERROR",  // 0 is reserved for errors
792
793
    "int32",    // CPPTYPE_INT32
794
    "int64",    // CPPTYPE_INT64
795
    "uint32",   // CPPTYPE_UINT32
796
    "uint64",   // CPPTYPE_UINT64
797
    "double",   // CPPTYPE_DOUBLE
798
    "float",    // CPPTYPE_FLOAT
799
    "bool",     // CPPTYPE_BOOL
800
    "enum",     // CPPTYPE_ENUM
801
    "string",   // CPPTYPE_STRING
802
    "message",  // CPPTYPE_MESSAGE
803
};
804
805
const char* const FieldDescriptor::kLabelToName[MAX_LABEL + 1] = {
806
    "ERROR",  // 0 is reserved for errors
807
808
    "optional",  // LABEL_OPTIONAL
809
    "required",  // LABEL_REQUIRED
810
    "repeated",  // LABEL_REPEATED
811
};
812
813
PROTOBUF_IGNORE_DEPRECATION_START
814
0
const char* FileDescriptor::SyntaxName(FileDescriptor::Syntax syntax) {
815
0
  switch (syntax) {
816
0
    case SYNTAX_PROTO2:
817
0
      return "proto2";
818
0
    case SYNTAX_PROTO3:
819
0
      return "proto3";
820
0
    case SYNTAX_EDITIONS:
821
0
      return "editions";
822
0
    case SYNTAX_UNKNOWN:
823
0
      return "unknown";
824
0
  }
825
0
  ABSL_LOG(FATAL) << "can't reach here.";
826
0
  return nullptr;
827
0
}
828
PROTOBUF_IGNORE_DEPRECATION_STOP
829
830
static const char* const kNonLinkedWeakMessageReplacementName = "google.protobuf.Empty";
831
832
#if !defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)
833
const int FieldDescriptor::kMaxNumber;
834
const int FieldDescriptor::kFirstReservedNumber;
835
const int FieldDescriptor::kLastReservedNumber;
836
#endif
837
838
namespace {
839
840
0
std::string EnumValueToPascalCase(const std::string& input) {
841
0
  bool next_upper = true;
842
0
  std::string result;
843
0
  result.reserve(input.size());
844
845
0
  for (char character : input) {
846
0
    if (character == '_') {
847
0
      next_upper = true;
848
0
    } else {
849
0
      if (next_upper) {
850
0
        result.push_back(absl::ascii_toupper(character));
851
0
      } else {
852
0
        result.push_back(absl::ascii_tolower(character));
853
0
      }
854
0
      next_upper = false;
855
0
    }
856
0
  }
857
858
0
  return result;
859
0
}
860
861
// Class to remove an enum prefix from enum values.
862
class PrefixRemover {
863
 public:
864
0
  PrefixRemover(absl::string_view prefix) {
865
    // Strip underscores and lower-case the prefix.
866
0
    for (char character : prefix) {
867
0
      if (character != '_') {
868
0
        prefix_ += absl::ascii_tolower(character);
869
0
      }
870
0
    }
871
0
  }
872
873
  // Tries to remove the enum prefix from this enum value.
874
  // If this is not possible, returns the input verbatim.
875
0
  std::string MaybeRemove(absl::string_view str) {
876
    // We can't just lowercase and strip str and look for a prefix.
877
    // We need to properly recognize the difference between:
878
    //
879
    //   enum Foo {
880
    //     FOO_BAR_BAZ = 0;
881
    //     FOO_BARBAZ = 1;
882
    //   }
883
    //
884
    // This is acceptable (though perhaps not advisable) because even when
885
    // we PascalCase, these two will still be distinct (BarBaz vs. Barbaz).
886
0
    size_t i, j;
887
888
    // Skip past prefix_ in str if we can.
889
0
    for (i = 0, j = 0; i < str.size() && j < prefix_.size(); i++) {
890
0
      if (str[i] == '_') {
891
0
        continue;
892
0
      }
893
894
0
      if (absl::ascii_tolower(str[i]) != prefix_[j++]) {
895
0
        return std::string(str);
896
0
      }
897
0
    }
898
899
    // If we didn't make it through the prefix, we've failed to strip the
900
    // prefix.
901
0
    if (j < prefix_.size()) {
902
0
      return std::string(str);
903
0
    }
904
905
    // Skip underscores between prefix and further characters.
906
0
    while (i < str.size() && str[i] == '_') {
907
0
      i++;
908
0
    }
909
910
    // Enum label can't be the empty string.
911
0
    if (i == str.size()) {
912
0
      return std::string(str);
913
0
    }
914
915
    // We successfully stripped the prefix.
916
0
    str.remove_prefix(i);
917
0
    return std::string(str);
918
0
  }
919
920
 private:
921
  std::string prefix_;
922
};
923
924
// A DescriptorPool contains a bunch of hash-maps to implement the
925
// various Find*By*() methods.  Since hashtable lookups are O(1), it's
926
// most efficient to construct a fixed set of large hash-maps used by
927
// all objects in the pool rather than construct one or more small
928
// hash-maps for each object.
929
//
930
// The keys to these hash-maps are (parent, name) or (parent, number) pairs.
931
struct FullNameQuery {
932
  absl::string_view query;
933
380
  absl::string_view full_name() const { return query; }
934
};
935
struct SymbolByFullNameHash {
936
  using is_transparent = void;
937
938
  template <typename T>
939
1.77k
  size_t operator()(const T& s) const {
940
1.77k
    return absl::HashOf(s.full_name());
941
1.77k
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::SymbolByFullNameHash::operator()<google::protobuf::(anonymous namespace)::FullNameQuery>(google::protobuf::(anonymous namespace)::FullNameQuery const&) const
Line
Count
Source
939
194
  size_t operator()(const T& s) const {
940
194
    return absl::HashOf(s.full_name());
941
194
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::SymbolByFullNameHash::operator()<google::protobuf::Symbol>(google::protobuf::Symbol const&) const
Line
Count
Source
939
1.58k
  size_t operator()(const T& s) const {
940
1.58k
    return absl::HashOf(s.full_name());
941
1.58k
  }
942
};
943
struct SymbolByFullNameEq {
944
  using is_transparent = void;
945
946
  template <typename T, typename U>
947
232
  bool operator()(const T& a, const U& b) const {
948
232
    return a.full_name() == b.full_name();
949
232
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::SymbolByFullNameEq::operator()<google::protobuf::Symbol, google::protobuf::(anonymous namespace)::FullNameQuery>(google::protobuf::Symbol const&, google::protobuf::(anonymous namespace)::FullNameQuery const&) const
Line
Count
Source
947
186
  bool operator()(const T& a, const U& b) const {
948
186
    return a.full_name() == b.full_name();
949
186
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::SymbolByFullNameEq::operator()<google::protobuf::Symbol, google::protobuf::Symbol>(google::protobuf::Symbol const&, google::protobuf::Symbol const&) const
Line
Count
Source
947
46
  bool operator()(const T& a, const U& b) const {
948
46
    return a.full_name() == b.full_name();
949
46
  }
950
};
951
using SymbolsByNameSet =
952
    absl::flat_hash_set<Symbol, SymbolByFullNameHash, SymbolByFullNameEq>;
953
954
struct ParentNameQuery {
955
  std::pair<const void*, absl::string_view> query;
956
307k
  std::pair<const void*, absl::string_view> parent_name_key() const {
957
307k
    return query;
958
307k
  }
959
};
960
struct SymbolByParentHash {
961
  using is_transparent = void;
962
963
  template <typename T>
964
155k
  size_t operator()(const T& s) const {
965
155k
    return absl::HashOf(s.parent_name_key());
966
155k
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::SymbolByParentHash::operator()<google::protobuf::(anonymous namespace)::ParentNameQuery>(google::protobuf::(anonymous namespace)::ParentNameQuery const&) const
Line
Count
Source
964
153k
  size_t operator()(const T& s) const {
965
153k
    return absl::HashOf(s.parent_name_key());
966
153k
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::SymbolByParentHash::operator()<google::protobuf::Symbol>(google::protobuf::Symbol const&) const
Line
Count
Source
964
1.83k
  size_t operator()(const T& s) const {
965
1.83k
    return absl::HashOf(s.parent_name_key());
966
1.83k
  }
967
};
968
struct SymbolByParentEq {
969
  using is_transparent = void;
970
971
  template <typename T, typename U>
972
153k
  bool operator()(const T& a, const U& b) const {
973
153k
    return a.parent_name_key() == b.parent_name_key();
974
153k
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::SymbolByParentEq::operator()<google::protobuf::Symbol, google::protobuf::(anonymous namespace)::ParentNameQuery>(google::protobuf::Symbol const&, google::protobuf::(anonymous namespace)::ParentNameQuery const&) const
Line
Count
Source
972
153k
  bool operator()(const T& a, const U& b) const {
973
153k
    return a.parent_name_key() == b.parent_name_key();
974
153k
  }
descriptor.cc:bool google::protobuf::(anonymous namespace)::SymbolByParentEq::operator()<google::protobuf::Symbol, google::protobuf::Symbol>(google::protobuf::Symbol const&, google::protobuf::Symbol const&) const
Line
Count
Source
972
60
  bool operator()(const T& a, const U& b) const {
973
60
    return a.parent_name_key() == b.parent_name_key();
974
60
  }
975
};
976
using SymbolsByParentSet =
977
    absl::flat_hash_set<Symbol, SymbolByParentHash, SymbolByParentEq>;
978
979
template <typename DescriptorT>
980
struct DescriptorsByNameHash {
981
  using is_transparent = void;
982
983
26
  size_t operator()(absl::string_view name) const { return absl::HashOf(name); }
descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameHash<google::protobuf::FileDescriptor>::operator()(absl::lts_20230802::string_view) const
Line
Count
Source
983
26
  size_t operator()(absl::string_view name) const { return absl::HashOf(name); }
Unexecuted instantiation: descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameHash<google::protobuf::Descriptor>::operator()(absl::lts_20230802::string_view) const
984
985
16
  size_t operator()(const DescriptorT* file) const {
986
16
    return absl::HashOf(file->name());
987
16
  }
descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameHash<google::protobuf::FileDescriptor>::operator()(google::protobuf::FileDescriptor const*) const
Line
Count
Source
985
16
  size_t operator()(const DescriptorT* file) const {
986
16
    return absl::HashOf(file->name());
987
16
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameHash<google::protobuf::Descriptor>::operator()(google::protobuf::Descriptor const*) const
988
};
989
990
template <typename DescriptorT>
991
struct DescriptorsByNameEq {
992
  using is_transparent = void;
993
994
  bool operator()(absl::string_view lhs, absl::string_view rhs) const {
995
    return lhs == rhs;
996
  }
997
  bool operator()(absl::string_view lhs, const DescriptorT* rhs) const {
998
    return lhs == rhs->name();
999
  }
1000
10
  bool operator()(const DescriptorT* lhs, absl::string_view rhs) const {
1001
10
    return lhs->name() == rhs;
1002
10
  }
descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameEq<google::protobuf::FileDescriptor>::operator()(google::protobuf::FileDescriptor const*, absl::lts_20230802::string_view) const
Line
Count
Source
1000
10
  bool operator()(const DescriptorT* lhs, absl::string_view rhs) const {
1001
10
    return lhs->name() == rhs;
1002
10
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameEq<google::protobuf::Descriptor>::operator()(google::protobuf::Descriptor const*, absl::lts_20230802::string_view) const
1003
0
  bool operator()(const DescriptorT* lhs, const DescriptorT* rhs) const {
1004
0
    return lhs == rhs || lhs->name() == rhs->name();
1005
0
  }
Unexecuted instantiation: descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameEq<google::protobuf::FileDescriptor>::operator()(google::protobuf::FileDescriptor const*, google::protobuf::FileDescriptor const*) const
Unexecuted instantiation: descriptor.cc:google::protobuf::(anonymous namespace)::DescriptorsByNameEq<google::protobuf::Descriptor>::operator()(google::protobuf::Descriptor const*, google::protobuf::Descriptor const*) const
1006
};
1007
1008
template <typename DescriptorT>
1009
using DescriptorsByNameSet =
1010
    absl::flat_hash_set<const DescriptorT*, DescriptorsByNameHash<DescriptorT>,
1011
                        DescriptorsByNameEq<DescriptorT>>;
1012
1013
using FieldsByNameMap =
1014
    absl::flat_hash_map<std::pair<const void*, absl::string_view>,
1015
                        const FieldDescriptor*>;
1016
1017
struct ParentNumberQuery {
1018
  std::pair<const void*, int> query;
1019
};
1020
440
std::pair<const void*, int> ObjectToParentNumber(const FieldDescriptor* field) {
1021
440
  return {field->containing_type(), field->number()};
1022
440
}
1023
std::pair<const void*, int> ObjectToParentNumber(
1024
42
    const EnumValueDescriptor* enum_value) {
1025
42
  return {enum_value->type(), enum_value->number()};
1026
42
}
1027
0
std::pair<const void*, int> ObjectToParentNumber(ParentNumberQuery query) {
1028
0
  return query.query;
1029
0
}
1030
struct ParentNumberHash {
1031
  using is_transparent = void;
1032
1033
  template <typename T>
1034
458
  size_t operator()(const T& t) const {
1035
458
    return absl::HashOf(ObjectToParentNumber(t));
1036
458
  }
Unexecuted instantiation: descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::ParentNumberHash::operator()<google::protobuf::(anonymous namespace)::ParentNumberQuery>(google::protobuf::(anonymous namespace)::ParentNumberQuery const&) const
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::ParentNumberHash::operator()<google::protobuf::EnumValueDescriptor*>(google::protobuf::EnumValueDescriptor* const&) const
Line
Count
Source
1034
20
  size_t operator()(const T& t) const {
1035
20
    return absl::HashOf(ObjectToParentNumber(t));
1036
20
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::ParentNumberHash::operator()<google::protobuf::EnumValueDescriptor const*>(google::protobuf::EnumValueDescriptor const* const&) const
Line
Count
Source
1034
22
  size_t operator()(const T& t) const {
1035
22
    return absl::HashOf(ObjectToParentNumber(t));
1036
22
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::ParentNumberHash::operator()<google::protobuf::FieldDescriptor*>(google::protobuf::FieldDescriptor* const&) const
Line
Count
Source
1034
198
  size_t operator()(const T& t) const {
1035
198
    return absl::HashOf(ObjectToParentNumber(t));
1036
198
  }
descriptor.cc:unsigned long google::protobuf::(anonymous namespace)::ParentNumberHash::operator()<google::protobuf::FieldDescriptor const*>(google::protobuf::FieldDescriptor const* const&) const
Line
Count
Source
1034
218
  size_t operator()(const T& t) const {
1035
218
    return absl::HashOf(ObjectToParentNumber(t));
1036
218
  }
1037
};
1038
struct ParentNumberEq {
1039
  using is_transparent = void;
1040
1041
  template <typename T, typename U>
1042
12
  bool operator()(const T& a, const U& b) const {
1043
12
    return ObjectToParentNumber(a) == ObjectToParentNumber(b);
1044
12
  }
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::ParentNumberEq::operator()<google::protobuf::FieldDescriptor const*, google::protobuf::(anonymous namespace)::ParentNumberQuery>(google::protobuf::FieldDescriptor const* const&, google::protobuf::(anonymous namespace)::ParentNumberQuery const&) const
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::ParentNumberEq::operator()<google::protobuf::EnumValueDescriptor const*, google::protobuf::(anonymous namespace)::ParentNumberQuery>(google::protobuf::EnumValueDescriptor const* const&, google::protobuf::(anonymous namespace)::ParentNumberQuery const&) const
Unexecuted instantiation: descriptor.cc:bool google::protobuf::(anonymous namespace)::ParentNumberEq::operator()<google::protobuf::EnumValueDescriptor const*, google::protobuf::EnumValueDescriptor*>(google::protobuf::EnumValueDescriptor const* const&, google::protobuf::EnumValueDescriptor* const&) const
descriptor.cc:bool google::protobuf::(anonymous namespace)::ParentNumberEq::operator()<google::protobuf::FieldDescriptor const*, google::protobuf::FieldDescriptor*>(google::protobuf::FieldDescriptor const* const&, google::protobuf::FieldDescriptor* const&) const
Line
Count
Source
1042
12
  bool operator()(const T& a, const U& b) const {
1043
12
    return ObjectToParentNumber(a) == ObjectToParentNumber(b);
1044
12
  }
1045
};
1046
using FieldsByNumberSet = absl::flat_hash_set<const FieldDescriptor*,
1047
                                              ParentNumberHash, ParentNumberEq>;
1048
using EnumValuesByNumberSet =
1049
    absl::flat_hash_set<const EnumValueDescriptor*, ParentNumberHash,
1050
                        ParentNumberEq>;
1051
1052
// This is a map rather than a hash-map, since we use it to iterate
1053
// through all the extensions that extend a given Descriptor, and an
1054
// ordered data structure that implements lower_bound is convenient
1055
// for that.
1056
using ExtensionsGroupedByDescriptorMap =
1057
    absl::btree_map<std::pair<const Descriptor*, int>, const FieldDescriptor*>;
1058
using LocationsByPathMap =
1059
    absl::flat_hash_map<std::string, const SourceCodeInfo_Location*>;
1060
1061
0
absl::flat_hash_set<std::string>* NewAllowedProto3Extendee() {
1062
0
  const char* kOptionNames[] = {
1063
0
      "FileOptions",   "MessageOptions",   "FieldOptions",
1064
0
      "EnumOptions",   "EnumValueOptions", "ServiceOptions",
1065
0
      "MethodOptions", "OneofOptions",     "ExtensionRangeOptions"};
1066
0
  auto allowed_proto3_extendees = new absl::flat_hash_set<std::string>();
1067
0
  allowed_proto3_extendees->reserve(sizeof(kOptionNames) /
1068
0
                                    sizeof(kOptionNames[0]));
1069
1070
0
  for (const char* option_name : kOptionNames) {
1071
    // descriptor.proto has a different package name in opensource. We allow
1072
    // both so the opensource protocol compiler can also compile internal
1073
    // proto3 files with custom options. See: b/27567912
1074
0
    allowed_proto3_extendees->insert(std::string("google.protobuf.") +
1075
0
                                     option_name);
1076
    // Split the word to trick the opensource processing scripts so they
1077
    // will keep the original package name.
1078
0
    allowed_proto3_extendees->insert(std::string("proto2.") + option_name);
1079
0
  }
1080
0
  return allowed_proto3_extendees;
1081
0
}
1082
1083
// Checks whether the extendee type is allowed in proto3.
1084
// Only extensions to descriptor options are allowed. We use name comparison
1085
// instead of comparing the descriptor directly because the extensions may be
1086
// defined in a different pool.
1087
0
bool AllowedExtendeeInProto3(const std::string& name) {
1088
0
  static auto allowed_proto3_extendees =
1089
0
      internal::OnShutdownDelete(NewAllowedProto3Extendee());
1090
0
  return allowed_proto3_extendees->find(name) !=
1091
0
         allowed_proto3_extendees->end();
1092
0
}
1093
1094
8
const FeatureSetDefaults& GetCppFeatureSetDefaults() {
1095
8
  static const FeatureSetDefaults* default_spec =
1096
8
      internal::OnShutdownDelete([] {
1097
2
        auto* defaults = new FeatureSetDefaults();
1098
2
        internal::ParseNoReflection(
1099
2
            absl::string_view{
1100
2
                PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
1101
2
                sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
1102
2
            *defaults);
1103
2
        return defaults;
1104
2
      }());
1105
8
  return *default_spec;
1106
8
}
1107
1108
template <typename ProtoT>
1109
0
void RestoreFeaturesToOptions(const FeatureSet* features, ProtoT* proto) {
1110
0
  if (features != &FeatureSet::default_instance()) {
1111
0
    *proto->mutable_options()->mutable_features() = *features;
1112
0
  }
1113
0
}
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::DescriptorProto_ExtensionRange>(google::protobuf::FeatureSet const*, google::protobuf::DescriptorProto_ExtensionRange*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::FileDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::FileDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::DescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::DescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::FieldDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::FieldDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::OneofDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::OneofDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::EnumDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::EnumDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::EnumValueDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::EnumValueDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::ServiceDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::ServiceDescriptorProto*)
Unexecuted instantiation: descriptor.cc:void google::protobuf::(anonymous namespace)::RestoreFeaturesToOptions<google::protobuf::MethodDescriptorProto>(google::protobuf::FeatureSet const*, google::protobuf::MethodDescriptorProto*)
1114
1115
template <typename OptionsT>
1116
bool HasFeatures(const OptionsT& options) {
1117
  if (options.has_features()) return true;
1118
1119
  for (const auto& opt : options.uninterpreted_option()) {
1120
    if (opt.name_size() > 0 && opt.name(0).name_part() == "features" &&
1121
        !opt.name(0).is_extension()) {
1122
      return true;
1123
    }
1124
  }
1125
  return false;
1126
}
1127
1128
8
const FeatureSet& GetParentFeatures(const FileDescriptor* file) {
1129
8
  return FeatureSet::default_instance();
1130
8
}
1131
1132
88
const FeatureSet& GetParentFeatures(const Descriptor* message) {
1133
88
  if (message->containing_type() == nullptr) {
1134
70
    return internal::InternalFeatureHelper::GetFeatures(*message->file());
1135
70
  }
1136
18
  return internal::InternalFeatureHelper::GetFeatures(
1137
18
      *message->containing_type());
1138
88
}
1139
1140
4
const FeatureSet& GetParentFeatures(const OneofDescriptor* oneof) {
1141
4
  return internal::InternalFeatureHelper::GetFeatures(
1142
4
      *oneof->containing_type());
1143
4
}
1144
1145
24
const FeatureSet& GetParentFeatures(const Descriptor::ExtensionRange* range) {
1146
24
  return internal::InternalFeatureHelper::GetFeatures(
1147
24
      *range->containing_type());
1148
24
}
1149
1150
396
const FeatureSet& GetParentFeatures(const FieldDescriptor* field) {
1151
396
  if (field->containing_oneof() != nullptr) {
1152
14
    return internal::InternalFeatureHelper::GetFeatures(
1153
14
        *field->containing_oneof());
1154
382
  } else if (field->is_extension()) {
1155
2
    if (field->extension_scope() == nullptr) {
1156
2
      return internal::InternalFeatureHelper::GetFeatures(*field->file());
1157
2
    }
1158
0
    return internal::InternalFeatureHelper::GetFeatures(
1159
0
        *field->extension_scope());
1160
2
  }
1161
380
  return internal::InternalFeatureHelper::GetFeatures(
1162
380
      *field->containing_type());
1163
396
}
1164
1165
34
const FeatureSet& GetParentFeatures(const EnumDescriptor* enm) {
1166
34
  if (enm->containing_type() == nullptr) {
1167
2
    return internal::InternalFeatureHelper::GetFeatures(*enm->file());
1168
2
  }
1169
32
  return internal::InternalFeatureHelper::GetFeatures(*enm->containing_type());
1170
34
}
1171
1172
158
const FeatureSet& GetParentFeatures(const EnumValueDescriptor* value) {
1173
158
  return internal::InternalFeatureHelper::GetFeatures(*value->type());
1174
158
}
1175
1176
0
const FeatureSet& GetParentFeatures(const ServiceDescriptor* service) {
1177
0
  return internal::InternalFeatureHelper::GetFeatures(*service->file());
1178
0
}
1179
1180
0
const FeatureSet& GetParentFeatures(const MethodDescriptor* method) {
1181
0
  return internal::InternalFeatureHelper::GetFeatures(*method->service());
1182
0
}
1183
}  // anonymous namespace
1184
1185
// Contains tables specific to a particular file.  These tables are not
1186
// modified once the file has been constructed, so they need not be
1187
// protected by a mutex.  This makes operations that depend only on the
1188
// contents of a single file -- e.g. Descriptor::FindFieldByName() --
1189
// lock-free.
1190
//
1191
// For historical reasons, the definitions of the methods of
1192
// FileDescriptorTables and DescriptorPool::Tables are interleaved below.
1193
// These used to be a single class.
1194
class FileDescriptorTables {
1195
 public:
1196
  FileDescriptorTables();
1197
  ~FileDescriptorTables();
1198
1199
  // Empty table, used with placeholder files.
1200
  inline static const FileDescriptorTables& GetEmptyInstance();
1201
1202
  // -----------------------------------------------------------------
1203
  // Finding items.
1204
1205
  // Returns a null Symbol (symbol.IsNull() is true) if not found.
1206
  // TODO: All callers to this function know the type they are looking
1207
  // for. If we propagate that information statically we can make the query
1208
  // faster.
1209
  inline Symbol FindNestedSymbol(const void* parent,
1210
                                 absl::string_view name) const;
1211
1212
  // These return nullptr if not found.
1213
  inline const FieldDescriptor* FindFieldByNumber(const Descriptor* parent,
1214
                                                  int number) const;
1215
  inline const FieldDescriptor* FindFieldByLowercaseName(
1216
      const void* parent, absl::string_view lowercase_name) const;
1217
  inline const FieldDescriptor* FindFieldByCamelcaseName(
1218
      const void* parent, absl::string_view camelcase_name) const;
1219
  inline const EnumValueDescriptor* FindEnumValueByNumber(
1220
      const EnumDescriptor* parent, int number) const;
1221
  // This creates a new EnumValueDescriptor if not found, in a thread-safe way.
1222
  inline const EnumValueDescriptor* FindEnumValueByNumberCreatingIfUnknown(
1223
      const EnumDescriptor* parent, int number) const;
1224
1225
  // -----------------------------------------------------------------
1226
  // Adding items.
1227
1228
  // These add items to the corresponding tables.  They return false if
1229
  // the key already exists in the table.
1230
  bool AddAliasUnderParent(const void* parent, absl::string_view name,
1231
                           Symbol symbol);
1232
  bool AddFieldByNumber(FieldDescriptor* field);
1233
  bool AddEnumValueByNumber(EnumValueDescriptor* value);
1234
1235
  // Populates p->first->locations_by_path_ from p->second.
1236
  // Unusual signature dictated by absl::call_once.
1237
  static void BuildLocationsByPath(
1238
      std::pair<const FileDescriptorTables*, const SourceCodeInfo*>* p);
1239
1240
  // Returns the location denoted by the specified path through info,
1241
  // or nullptr if not found.
1242
  // The value of info must be that of the corresponding FileDescriptor.
1243
  // (Conceptually a pure function, but stateful as an optimisation.)
1244
  const SourceCodeInfo_Location* GetSourceLocation(
1245
      const std::vector<int>& path, const SourceCodeInfo* info) const;
1246
1247
  // Must be called after BuildFileImpl(), even if the build failed and
1248
  // we are going to roll back to the last checkpoint.
1249
  void FinalizeTables();
1250
1251
 private:
1252
  const void* FindParentForFieldsByMap(const FieldDescriptor* field) const;
1253
  static void FieldsByLowercaseNamesLazyInitStatic(
1254
      const FileDescriptorTables* tables);
1255
  void FieldsByLowercaseNamesLazyInitInternal() const;
1256
  static void FieldsByCamelcaseNamesLazyInitStatic(
1257
      const FileDescriptorTables* tables);
1258
  void FieldsByCamelcaseNamesLazyInitInternal() const;
1259
1260
  SymbolsByParentSet symbols_by_parent_;
1261
  mutable absl::once_flag fields_by_lowercase_name_once_;
1262
  mutable absl::once_flag fields_by_camelcase_name_once_;
1263
  // Make these fields atomic to avoid race conditions with
1264
  // GetEstimatedOwnedMemoryBytesSize. Once the pointer is set the map won't
1265
  // change anymore.
1266
  mutable std::atomic<const FieldsByNameMap*> fields_by_lowercase_name_{};
1267
  mutable std::atomic<const FieldsByNameMap*> fields_by_camelcase_name_{};
1268
  FieldsByNumberSet fields_by_number_;  // Not including extensions.
1269
  EnumValuesByNumberSet enum_values_by_number_;
1270
  mutable EnumValuesByNumberSet unknown_enum_values_by_number_
1271
      PROTOBUF_GUARDED_BY(unknown_enum_values_mu_);
1272
1273
  // Populated on first request to save space, hence constness games.
1274
  mutable absl::once_flag locations_by_path_once_;
1275
  mutable LocationsByPathMap locations_by_path_;
1276
1277
  // Mutex to protect the unknown-enum-value map due to dynamic
1278
  // EnumValueDescriptor creation on unknown values.
1279
  mutable absl::Mutex unknown_enum_values_mu_;
1280
};
1281
1282
namespace internal {
1283
1284
// Small sequential allocator to be used within a single file.
1285
// Most of the memory for a single FileDescriptor and everything under it is
1286
// allocated in a single block of memory, with the FlatAllocator giving it out
1287
// in parts later.
1288
// The code first plans the total number of bytes needed by calling PlanArray
1289
// with all the allocations that will happen afterwards, then calls
1290
// FinalizePlanning passing the underlying allocator (the DescriptorPool::Tables
1291
// instance), and then proceeds to get the memory via
1292
// `AllocateArray`/`AllocateString` calls. The calls to PlanArray and
1293
// The calls have to match between planning and allocating, though not
1294
// necessarily in the same order.
1295
class FlatAllocator
1296
    : public decltype(ApplyTypeList<FlatAllocatorImpl>(
1297
          SortByAlignment<char, std::string, SourceCodeInfo,
1298
                          FileDescriptorTables, FeatureSet,
1299
                          // Option types
1300
                          MessageOptions, FieldOptions, EnumOptions,
1301
                          EnumValueOptions, ExtensionRangeOptions, OneofOptions,
1302
                          ServiceOptions, MethodOptions, FileOptions>())) {};
1303
1304
}  // namespace internal
1305
1306
// ===================================================================
1307
// DescriptorPool::Tables
1308
1309
class DescriptorPool::Tables {
1310
 public:
1311
  Tables();
1312
  ~Tables();
1313
1314
  // Record the current state of the tables to the stack of checkpoints.
1315
  // Each call to AddCheckpoint() must be paired with exactly one call to either
1316
  // ClearLastCheckpoint() or RollbackToLastCheckpoint().
1317
  //
1318
  // This is used when building files, since some kinds of validation errors
1319
  // cannot be detected until the file's descriptors have already been added to
1320
  // the tables.
1321
  //
1322
  // This supports recursive checkpoints, since building a file may trigger
1323
  // recursive building of other files. Note that recursive checkpoints are not
1324
  // normally necessary; explicit dependencies are built prior to checkpointing.
1325
  // So although we recursively build transitive imports, there is at most one
1326
  // checkpoint in the stack during dependency building.
1327
  //
1328
  // Recursive checkpoints only arise during cross-linking of the descriptors.
1329
  // Symbol references must be resolved, via DescriptorBuilder::FindSymbol and
1330
  // friends. If the pending file references an unknown symbol
1331
  // (e.g., it is not defined in the pending file's explicit dependencies), and
1332
  // the pool is using a fallback database, and that database contains a file
1333
  // defining that symbol, and that file has not yet been built by the pool,
1334
  // the pool builds the file during cross-linking, leading to another
1335
  // checkpoint.
1336
  void AddCheckpoint();
1337
1338
  // Mark the last checkpoint as having cleared successfully, removing it from
1339
  // the stack. If the stack is empty, all pending symbols will be committed.
1340
  //
1341
  // Note that this does not guarantee that the symbols added since the last
1342
  // checkpoint won't be rolled back: if a checkpoint gets rolled back,
1343
  // everything past that point gets rolled back, including symbols added after
1344
  // checkpoints that were pushed onto the stack after it and marked as cleared.
1345
  void ClearLastCheckpoint();
1346
1347
  // Roll back the Tables to the state of the checkpoint at the top of the
1348
  // stack, removing everything that was added after that point.
1349
  void RollbackToLastCheckpoint();
1350
1351
  // The stack of files which are currently being built.  Used to detect
1352
  // cyclic dependencies when loading files from a DescriptorDatabase.  Not
1353
  // used when fallback_database_ == nullptr.
1354
  std::vector<std::string> pending_files_;
1355
1356
  // A set of files which we have tried to load from the fallback database
1357
  // and encountered errors.  We will not attempt to load them again during
1358
  // execution of the current public API call, but for compatibility with
1359
  // legacy clients, this is cleared at the beginning of each public API call.
1360
  // Not used when fallback_database_ == nullptr.
1361
  absl::flat_hash_set<std::string> known_bad_files_;
1362
1363
  // A set of symbols which we have tried to load from the fallback database
1364
  // and encountered errors. We will not attempt to load them again during
1365
  // execution of the current public API call, but for compatibility with
1366
  // legacy clients, this is cleared at the beginning of each public API call.
1367
  absl::flat_hash_set<std::string> known_bad_symbols_;
1368
1369
  // The set of descriptors for which we've already loaded the full
1370
  // set of extensions numbers from fallback_database_.
1371
  absl::flat_hash_set<const Descriptor*> extensions_loaded_from_db_;
1372
1373
  // Maps type name to Descriptor::WellKnownType.  This is logically global
1374
  // and const, but we make it a member here to simplify its construction and
1375
  // destruction.  This only has 20-ish entries and is one per DescriptorPool,
1376
  // so the overhead is small.
1377
  absl::flat_hash_map<std::string, Descriptor::WellKnownType> well_known_types_;
1378
1379
  // -----------------------------------------------------------------
1380
  // Finding items.
1381
1382
  // Find symbols.  This returns a null Symbol (symbol.IsNull() is true)
1383
  // if not found.
1384
  inline Symbol FindSymbol(absl::string_view key) const;
1385
1386
  // This implements the body of DescriptorPool::Find*ByName().  It should
1387
  // really be a private method of DescriptorPool, but that would require
1388
  // declaring Symbol in descriptor.h, which would drag all kinds of other
1389
  // stuff into the header.  Yay C++.
1390
  Symbol FindByNameHelper(const DescriptorPool* pool, absl::string_view name);
1391
1392
  // These return nullptr if not found.
1393
  inline const FileDescriptor* FindFile(absl::string_view key) const;
1394
  inline const FieldDescriptor* FindExtension(const Descriptor* extendee,
1395
                                              int number) const;
1396
  inline void FindAllExtensions(const Descriptor* extendee,
1397
                                std::vector<const FieldDescriptor*>* out) const;
1398
1399
  // -----------------------------------------------------------------
1400
  // Adding items.
1401
1402
  // These add items to the corresponding tables.  They return false if
1403
  // the key already exists in the table.  For AddSymbol(), the string passed
1404
  // in must be one that was constructed using AllocateString(), as it will
1405
  // be used as a key in the symbols_by_name_ map without copying.
1406
  bool AddSymbol(absl::string_view full_name, Symbol symbol);
1407
  bool AddFile(const FileDescriptor* file);
1408
  bool AddExtension(const FieldDescriptor* field);
1409
1410
  // Caches a feature set and returns a stable reference to the cached
1411
  // allocation owned by the pool.
1412
  const FeatureSet* InternFeatureSet(FeatureSet&& features);
1413
1414
  // -----------------------------------------------------------------
1415
  // Allocating memory.
1416
1417
  // Allocate an object which will be reclaimed when the pool is
1418
  // destroyed.  Note that the object's destructor will never be called,
1419
  // so its fields must be plain old data (primitive data types and
1420
  // pointers).  All of the descriptor types are such objects.
1421
  template <typename Type>
1422
  Type* Allocate();
1423
1424
  // Allocate some bytes which will be reclaimed when the pool is
1425
  // destroyed. Memory is aligned to 8 bytes.
1426
  void* AllocateBytes(int size);
1427
1428
  // Create a FlatAllocation for the corresponding sizes.
1429
  // All objects within it will be default constructed.
1430
  // The whole allocation, including the non-trivial objects within, will be
1431
  // destroyed with the pool.
1432
  template <typename... T>
1433
  internal::FlatAllocator::Allocation* CreateFlatAlloc(
1434
      const TypeMap<IntT, T...>& sizes);
1435
1436
1437
 private:
1438
  // All memory allocated in the pool.  Must be first as other objects can
1439
  // point into these.
1440
  struct MiscDeleter {
1441
0
    void operator()(int* p) const { internal::SizedDelete(p, *p + 8); }
1442
  };
1443
  // Miscellaneous allocations are length prefixed. The paylaod is 8 bytes after
1444
  // the `int` that contains the size. This keeps the payload aligned.
1445
  std::vector<std::unique_ptr<int, MiscDeleter>> misc_allocs_;
1446
  struct FlatAllocDeleter {
1447
0
    void operator()(internal::FlatAllocator::Allocation* p) const {
1448
0
      p->Destroy();
1449
0
    }
1450
  };
1451
  std::vector<
1452
      std::unique_ptr<internal::FlatAllocator::Allocation, FlatAllocDeleter>>
1453
      flat_allocs_;
1454
1455
  SymbolsByNameSet symbols_by_name_;
1456
  DescriptorsByNameSet<FileDescriptor> files_by_name_;
1457
  ExtensionsGroupedByDescriptorMap extensions_;
1458
1459
  // A cache of all unique feature sets seen.  Since we expect this number to be
1460
  // relatively low compared to descriptors, it's significantly cheaper to share
1461
  // these within the pool than have each file create its own feature sets.
1462
  absl::flat_hash_map<std::string, std::unique_ptr<FeatureSet>>
1463
      feature_set_cache_;
1464
1465
  struct CheckPoint {
1466
    explicit CheckPoint(const Tables* tables)
1467
        : flat_allocations_before_checkpoint(
1468
              static_cast<int>(tables->flat_allocs_.size())),
1469
          misc_allocations_before_checkpoint(
1470
              static_cast<int>(tables->misc_allocs_.size())),
1471
          pending_symbols_before_checkpoint(
1472
              tables->symbols_after_checkpoint_.size()),
1473
          pending_files_before_checkpoint(
1474
              tables->files_after_checkpoint_.size()),
1475
          pending_extensions_before_checkpoint(
1476
8
              tables->extensions_after_checkpoint_.size()) {}
1477
    int flat_allocations_before_checkpoint;
1478
    int misc_allocations_before_checkpoint;
1479
    int pending_symbols_before_checkpoint;
1480
    int pending_files_before_checkpoint;
1481
    int pending_extensions_before_checkpoint;
1482
  };
1483
  std::vector<CheckPoint> checkpoints_;
1484
  std::vector<Symbol> symbols_after_checkpoint_;
1485
  std::vector<const FileDescriptor*> files_after_checkpoint_;
1486
  std::vector<std::pair<const Descriptor*, int>> extensions_after_checkpoint_;
1487
};
1488
1489
4
DescriptorPool::Tables::Tables() {
1490
4
  well_known_types_.insert({
1491
4
      {"google.protobuf.DoubleValue", Descriptor::WELLKNOWNTYPE_DOUBLEVALUE},
1492
4
      {"google.protobuf.FloatValue", Descriptor::WELLKNOWNTYPE_FLOATVALUE},
1493
4
      {"google.protobuf.Int64Value", Descriptor::WELLKNOWNTYPE_INT64VALUE},
1494
4
      {"google.protobuf.UInt64Value", Descriptor::WELLKNOWNTYPE_UINT64VALUE},
1495
4
      {"google.protobuf.Int32Value", Descriptor::WELLKNOWNTYPE_INT32VALUE},
1496
4
      {"google.protobuf.UInt32Value", Descriptor::WELLKNOWNTYPE_UINT32VALUE},
1497
4
      {"google.protobuf.StringValue", Descriptor::WELLKNOWNTYPE_STRINGVALUE},
1498
4
      {"google.protobuf.BytesValue", Descriptor::WELLKNOWNTYPE_BYTESVALUE},
1499
4
      {"google.protobuf.BoolValue", Descriptor::WELLKNOWNTYPE_BOOLVALUE},
1500
4
      {"google.protobuf.Any", Descriptor::WELLKNOWNTYPE_ANY},
1501
4
      {"google.protobuf.FieldMask", Descriptor::WELLKNOWNTYPE_FIELDMASK},
1502
4
      {"google.protobuf.Duration", Descriptor::WELLKNOWNTYPE_DURATION},
1503
4
      {"google.protobuf.Timestamp", Descriptor::WELLKNOWNTYPE_TIMESTAMP},
1504
4
      {"google.protobuf.Value", Descriptor::WELLKNOWNTYPE_VALUE},
1505
4
      {"google.protobuf.ListValue", Descriptor::WELLKNOWNTYPE_LISTVALUE},
1506
4
      {"google.protobuf.Struct", Descriptor::WELLKNOWNTYPE_STRUCT},
1507
4
  });
1508
4
}
1509
1510
0
DescriptorPool::Tables::~Tables() { ABSL_DCHECK(checkpoints_.empty()); }
1511
1512
8
FileDescriptorTables::FileDescriptorTables() {}
1513
1514
0
FileDescriptorTables::~FileDescriptorTables() {
1515
0
  delete fields_by_lowercase_name_.load(std::memory_order_acquire);
1516
0
  delete fields_by_camelcase_name_.load(std::memory_order_acquire);
1517
0
}
1518
1519
0
inline const FileDescriptorTables& FileDescriptorTables::GetEmptyInstance() {
1520
0
  static auto file_descriptor_tables =
1521
0
      internal::OnShutdownDelete(new FileDescriptorTables());
1522
0
  return *file_descriptor_tables;
1523
0
}
1524
1525
8
void DescriptorPool::Tables::AddCheckpoint() {
1526
8
  checkpoints_.emplace_back(this);
1527
8
}
1528
1529
8
void DescriptorPool::Tables::ClearLastCheckpoint() {
1530
8
  ABSL_DCHECK(!checkpoints_.empty());
1531
8
  checkpoints_.pop_back();
1532
8
  if (checkpoints_.empty()) {
1533
    // All checkpoints have been cleared: we can now commit all of the pending
1534
    // data.
1535
8
    symbols_after_checkpoint_.clear();
1536
8
    files_after_checkpoint_.clear();
1537
8
    extensions_after_checkpoint_.clear();
1538
8
  }
1539
8
}
1540
1541
0
void DescriptorPool::Tables::RollbackToLastCheckpoint() {
1542
0
  ABSL_DCHECK(!checkpoints_.empty());
1543
0
  const CheckPoint& checkpoint = checkpoints_.back();
1544
1545
0
  for (size_t i = checkpoint.pending_symbols_before_checkpoint;
1546
0
       i < symbols_after_checkpoint_.size(); i++) {
1547
0
    symbols_by_name_.erase(symbols_after_checkpoint_[i]);
1548
0
  }
1549
0
  for (size_t i = checkpoint.pending_files_before_checkpoint;
1550
0
       i < files_after_checkpoint_.size(); i++) {
1551
0
    files_by_name_.erase(files_after_checkpoint_[i]);
1552
0
  }
1553
0
  for (size_t i = checkpoint.pending_extensions_before_checkpoint;
1554
0
       i < extensions_after_checkpoint_.size(); i++) {
1555
0
    extensions_.erase(extensions_after_checkpoint_[i]);
1556
0
  }
1557
1558
0
  symbols_after_checkpoint_.resize(
1559
0
      checkpoint.pending_symbols_before_checkpoint);
1560
0
  files_after_checkpoint_.resize(checkpoint.pending_files_before_checkpoint);
1561
0
  extensions_after_checkpoint_.resize(
1562
0
      checkpoint.pending_extensions_before_checkpoint);
1563
1564
0
  flat_allocs_.resize(checkpoint.flat_allocations_before_checkpoint);
1565
0
  misc_allocs_.resize(checkpoint.misc_allocations_before_checkpoint);
1566
0
  checkpoints_.pop_back();
1567
0
}
1568
1569
// -------------------------------------------------------------------
1570
1571
194
inline Symbol DescriptorPool::Tables::FindSymbol(absl::string_view key) const {
1572
194
  auto it = symbols_by_name_.find(FullNameQuery{key});
1573
194
  return it == symbols_by_name_.end() ? Symbol() : *it;
1574
194
}
1575
1576
inline Symbol FileDescriptorTables::FindNestedSymbol(
1577
153k
    const void* parent, absl::string_view name) const {
1578
153k
  auto it = symbols_by_parent_.find(ParentNameQuery{{parent, name}});
1579
153k
  return it == symbols_by_parent_.end() ? Symbol() : *it;
1580
153k
}
1581
1582
Symbol DescriptorPool::Tables::FindByNameHelper(const DescriptorPool* pool,
1583
0
                                                absl::string_view name) {
1584
0
  if (pool->mutex_ != nullptr) {
1585
    // Fast path: the Symbol is already cached.  This is just a hash lookup.
1586
0
    absl::ReaderMutexLock lock(pool->mutex_);
1587
0
    if (known_bad_symbols_.empty() && known_bad_files_.empty()) {
1588
0
      Symbol result = FindSymbol(name);
1589
0
      if (!result.IsNull()) return result;
1590
0
    }
1591
0
  }
1592
0
  absl::MutexLockMaybe lock(pool->mutex_);
1593
0
  if (pool->fallback_database_ != nullptr) {
1594
0
    known_bad_symbols_.clear();
1595
0
    known_bad_files_.clear();
1596
0
  }
1597
0
  Symbol result = FindSymbol(name);
1598
1599
0
  if (result.IsNull() && pool->underlay_ != nullptr) {
1600
    // Symbol not found; check the underlay.
1601
0
    result = pool->underlay_->tables_->FindByNameHelper(pool->underlay_, name);
1602
0
  }
1603
1604
0
  if (result.IsNull()) {
1605
    // Symbol still not found, so check fallback database.
1606
0
    if (pool->TryFindSymbolInFallbackDatabase(name)) {
1607
0
      result = FindSymbol(name);
1608
0
    }
1609
0
  }
1610
1611
0
  return result;
1612
0
}
1613
1614
inline const FileDescriptor* DescriptorPool::Tables::FindFile(
1615
26
    absl::string_view key) const {
1616
26
  auto it = files_by_name_.find(key);
1617
26
  if (it == files_by_name_.end()) return nullptr;
1618
10
  return *it;
1619
26
}
1620
1621
inline const FieldDescriptor* FileDescriptorTables::FindFieldByNumber(
1622
0
    const Descriptor* parent, int number) const {
1623
  // If `number` is within the sequential range, just index into the parent
1624
  // without doing a table lookup.
1625
0
  if (parent != nullptr &&  //
1626
0
      1 <= number && number <= parent->sequential_field_limit_) {
1627
0
    return parent->field(number - 1);
1628
0
  }
1629
1630
0
  auto it = fields_by_number_.find(ParentNumberQuery{{parent, number}});
1631
0
  return it == fields_by_number_.end() ? nullptr : *it;
1632
0
}
1633
1634
const void* FileDescriptorTables::FindParentForFieldsByMap(
1635
0
    const FieldDescriptor* field) const {
1636
0
  if (field->is_extension()) {
1637
0
    if (field->extension_scope() == nullptr) {
1638
0
      return field->file();
1639
0
    } else {
1640
0
      return field->extension_scope();
1641
0
    }
1642
0
  } else {
1643
0
    return field->containing_type();
1644
0
  }
1645
0
}
1646
1647
void FileDescriptorTables::FieldsByLowercaseNamesLazyInitStatic(
1648
0
    const FileDescriptorTables* tables) {
1649
0
  tables->FieldsByLowercaseNamesLazyInitInternal();
1650
0
}
1651
1652
0
void FileDescriptorTables::FieldsByLowercaseNamesLazyInitInternal() const {
1653
0
  auto* map = new FieldsByNameMap;
1654
0
  for (Symbol symbol : symbols_by_parent_) {
1655
0
    const FieldDescriptor* field = symbol.field_descriptor();
1656
0
    if (!field) continue;
1657
0
    (*map)[{FindParentForFieldsByMap(field), field->lowercase_name().c_str()}] =
1658
0
        field;
1659
0
  }
1660
0
  fields_by_lowercase_name_.store(map, std::memory_order_release);
1661
0
}
1662
1663
inline const FieldDescriptor* FileDescriptorTables::FindFieldByLowercaseName(
1664
0
    const void* parent, absl::string_view lowercase_name) const {
1665
0
  absl::call_once(fields_by_lowercase_name_once_,
1666
0
                  &FileDescriptorTables::FieldsByLowercaseNamesLazyInitStatic,
1667
0
                  this);
1668
0
  const auto* fields =
1669
0
      fields_by_lowercase_name_.load(std::memory_order_acquire);
1670
0
  auto it = fields->find({parent, lowercase_name});
1671
0
  if (it == fields->end()) return nullptr;
1672
0
  return it->second;
1673
0
}
1674
1675
void FileDescriptorTables::FieldsByCamelcaseNamesLazyInitStatic(
1676
0
    const FileDescriptorTables* tables) {
1677
0
  tables->FieldsByCamelcaseNamesLazyInitInternal();
1678
0
}
1679
1680
0
void FileDescriptorTables::FieldsByCamelcaseNamesLazyInitInternal() const {
1681
0
  auto* map = new FieldsByNameMap;
1682
0
  for (Symbol symbol : symbols_by_parent_) {
1683
0
    const FieldDescriptor* field = symbol.field_descriptor();
1684
0
    if (!field) continue;
1685
0
    const void* parent = FindParentForFieldsByMap(field);
1686
    // If we already have a field with this camelCase name, keep the field with
1687
    // the smallest field number. This way we get a deterministic mapping.
1688
0
    const FieldDescriptor*& found =
1689
0
        (*map)[{parent, field->camelcase_name().c_str()}];
1690
0
    if (found == nullptr || found->number() > field->number()) {
1691
0
      found = field;
1692
0
    }
1693
0
  }
1694
0
  fields_by_camelcase_name_.store(map, std::memory_order_release);
1695
0
}
1696
1697
inline const FieldDescriptor* FileDescriptorTables::FindFieldByCamelcaseName(
1698
0
    const void* parent, absl::string_view camelcase_name) const {
1699
0
  absl::call_once(fields_by_camelcase_name_once_,
1700
0
                  FileDescriptorTables::FieldsByCamelcaseNamesLazyInitStatic,
1701
0
                  this);
1702
0
  auto* fields = fields_by_camelcase_name_.load(std::memory_order_acquire);
1703
0
  auto it = fields->find({parent, camelcase_name});
1704
0
  if (it == fields->end()) return nullptr;
1705
0
  return it->second;
1706
0
}
1707
1708
inline const EnumValueDescriptor* FileDescriptorTables::FindEnumValueByNumber(
1709
0
    const EnumDescriptor* parent, int number) const {
1710
  // If `number` is within the sequential range, just index into the parent
1711
  // without doing a table lookup.
1712
0
  const int base = parent->value(0)->number();
1713
0
  if (base <= number &&
1714
0
      number <= static_cast<int64_t>(base) + parent->sequential_value_limit_) {
1715
0
    return parent->value(number - base);
1716
0
  }
1717
1718
0
  auto it = enum_values_by_number_.find(ParentNumberQuery{{parent, number}});
1719
0
  return it == enum_values_by_number_.end() ? nullptr : *it;
1720
0
}
1721
1722
inline const EnumValueDescriptor*
1723
FileDescriptorTables::FindEnumValueByNumberCreatingIfUnknown(
1724
0
    const EnumDescriptor* parent, int number) const {
1725
  // First try, with map of compiled-in values.
1726
0
  {
1727
0
    const auto* value = FindEnumValueByNumber(parent, number);
1728
0
    if (value != nullptr) {
1729
0
      return value;
1730
0
    }
1731
0
  }
1732
1733
0
  const ParentNumberQuery query{{parent, number}};
1734
1735
  // Second try, with reader lock held on unknown enum values: common case.
1736
0
  {
1737
0
    absl::ReaderMutexLock l(&unknown_enum_values_mu_);
1738
0
    auto it = unknown_enum_values_by_number_.find(query);
1739
0
    if (it != unknown_enum_values_by_number_.end()) {
1740
0
      return *it;
1741
0
    }
1742
0
  }
1743
  // If not found, try again with writer lock held, and create new descriptor if
1744
  // necessary.
1745
0
  {
1746
0
    absl::WriterMutexLock l(&unknown_enum_values_mu_);
1747
0
    auto it = unknown_enum_values_by_number_.find(query);
1748
0
    if (it != unknown_enum_values_by_number_.end()) {
1749
0
      return *it;
1750
0
    }
1751
1752
    // Create an EnumValueDescriptor dynamically. We don't insert it into the
1753
    // EnumDescriptor (it's not a part of the enum as originally defined), but
1754
    // we do insert it into the table so that we can return the same pointer
1755
    // later.
1756
0
    std::string enum_value_name = absl::StrFormat(
1757
0
        "UNKNOWN_ENUM_VALUE_%s_%d", parent->name().c_str(), number);
1758
0
    auto* pool = DescriptorPool::generated_pool();
1759
0
    auto* tables = const_cast<DescriptorPool::Tables*>(pool->tables_.get());
1760
0
    internal::FlatAllocator alloc;
1761
0
    alloc.PlanArray<EnumValueDescriptor>(1);
1762
0
    alloc.PlanArray<std::string>(2);
1763
1764
0
    {
1765
      // Must lock the pool because we will do allocations in the shared arena.
1766
0
      absl::MutexLockMaybe l2(pool->mutex_);
1767
0
      alloc.FinalizePlanning(tables);
1768
0
    }
1769
0
    EnumValueDescriptor* result = alloc.AllocateArray<EnumValueDescriptor>(1);
1770
0
    result->all_names_ = alloc.AllocateStrings(
1771
0
        enum_value_name,
1772
0
        absl::StrCat(parent->full_name(), ".", enum_value_name));
1773
0
    result->number_ = number;
1774
0
    result->type_ = parent;
1775
0
    result->options_ = &EnumValueOptions::default_instance();
1776
0
    unknown_enum_values_by_number_.insert(result);
1777
0
    return result;
1778
0
  }
1779
0
}
1780
1781
inline const FieldDescriptor* DescriptorPool::Tables::FindExtension(
1782
0
    const Descriptor* extendee, int number) const {
1783
0
  auto it = extensions_.find({extendee, number});
1784
0
  if (it == extensions_.end()) return nullptr;
1785
0
  return it->second;
1786
0
}
1787
1788
inline void DescriptorPool::Tables::FindAllExtensions(
1789
    const Descriptor* extendee,
1790
0
    std::vector<const FieldDescriptor*>* out) const {
1791
0
  ExtensionsGroupedByDescriptorMap::const_iterator it =
1792
0
      extensions_.lower_bound(std::make_pair(extendee, 0));
1793
0
  for (; it != extensions_.end() && it->first.first == extendee; ++it) {
1794
0
    out->push_back(it->second);
1795
0
  }
1796
0
}
1797
1798
// -------------------------------------------------------------------
1799
1800
bool DescriptorPool::Tables::AddSymbol(absl::string_view full_name,
1801
690
                                       Symbol symbol) {
1802
690
  ABSL_DCHECK_EQ(full_name, symbol.full_name());
1803
690
  if (symbols_by_name_.insert(symbol).second) {
1804
690
    symbols_after_checkpoint_.push_back(symbol);
1805
690
    return true;
1806
690
  } else {
1807
0
    return false;
1808
0
  }
1809
690
}
1810
1811
bool FileDescriptorTables::AddAliasUnderParent(const void* parent,
1812
                                               absl::string_view name,
1813
838
                                               Symbol symbol) {
1814
838
  ABSL_DCHECK_EQ(name, symbol.parent_name_key().second);
1815
838
  ABSL_DCHECK_EQ(parent, symbol.parent_name_key().first);
1816
838
  return symbols_by_parent_.insert(symbol).second;
1817
838
}
1818
1819
8
bool DescriptorPool::Tables::AddFile(const FileDescriptor* file) {
1820
8
  if (files_by_name_.insert(file).second) {
1821
8
    files_after_checkpoint_.push_back(file);
1822
8
    return true;
1823
8
  } else {
1824
0
    return false;
1825
0
  }
1826
8
}
1827
1828
8
void FileDescriptorTables::FinalizeTables() {}
1829
1830
396
bool FileDescriptorTables::AddFieldByNumber(FieldDescriptor* field) {
1831
  // Skip fields that are at the start of the sequence.
1832
396
  if (field->containing_type() != nullptr && field->number() >= 1 &&
1833
396
      field->number() <= field->containing_type()->sequential_field_limit_) {
1834
198
    if (field->is_extension()) {
1835
      // Conflicts with the field that already exists in the sequential range.
1836
0
      return false;
1837
0
    }
1838
    // Only return true if the field at that index matches. Otherwise it
1839
    // conflicts with the existing field in the sequential range.
1840
198
    return field->containing_type()->field(field->number() - 1) == field;
1841
198
  }
1842
1843
198
  return fields_by_number_.insert(field).second;
1844
396
}
1845
1846
158
bool FileDescriptorTables::AddEnumValueByNumber(EnumValueDescriptor* value) {
1847
  // Skip values that are at the start of the sequence.
1848
158
  const int base = value->type()->value(0)->number();
1849
158
  if (base <= value->number() &&
1850
158
      value->number() <=
1851
158
          static_cast<int64_t>(base) + value->type()->sequential_value_limit_)
1852
138
    return true;
1853
20
  return enum_values_by_number_.insert(value).second;
1854
158
}
1855
1856
2
bool DescriptorPool::Tables::AddExtension(const FieldDescriptor* field) {
1857
2
  auto it_inserted =
1858
2
      extensions_.insert({{field->containing_type(), field->number()}, field});
1859
2
  if (it_inserted.second) {
1860
2
    extensions_after_checkpoint_.push_back(it_inserted.first->first);
1861
2
    return true;
1862
2
  } else {
1863
0
    return false;
1864
0
  }
1865
2
}
1866
1867
const FeatureSet* DescriptorPool::Tables::InternFeatureSet(
1868
18
    FeatureSet&& features) {
1869
  // Use the serialized feature set as the cache key.  If multiple equivalent
1870
  // feature sets serialize to different strings, that just bloats the cache a
1871
  // little.
1872
18
  auto& result = feature_set_cache_[features.SerializeAsString()];
1873
18
  if (result == nullptr) {
1874
8
    result = absl::make_unique<FeatureSet>(std::move(features));
1875
8
  }
1876
18
  return result.get();
1877
18
}
1878
1879
// -------------------------------------------------------------------
1880
1881
template <typename Type>
1882
4
Type* DescriptorPool::Tables::Allocate() {
1883
4
  static_assert(std::is_trivially_destructible<Type>::value, "");
1884
4
  static_assert(alignof(Type) <= 8, "");
1885
4
  return ::new (AllocateBytes(sizeof(Type))) Type{};
1886
4
}
1887
1888
4
void* DescriptorPool::Tables::AllocateBytes(int size) {
1889
4
  if (size == 0) return nullptr;
1890
4
  void* p = ::operator new(size + RoundUpTo<8>(sizeof(int)));
1891
4
  int* sizep = static_cast<int*>(p);
1892
4
  misc_allocs_.emplace_back(sizep);
1893
4
  *sizep = size;
1894
4
  return static_cast<char*>(p) + RoundUpTo<8>(sizeof(int));
1895
4
}
1896
1897
template <typename... T>
1898
internal::FlatAllocator::Allocation* DescriptorPool::Tables::CreateFlatAlloc(
1899
8
    const TypeMap<IntT, T...>& sizes) {
1900
8
  auto ends = CalculateEnds(sizes);
1901
8
  using FlatAlloc = internal::FlatAllocator::Allocation;
1902
1903
8
  int last_end = ends.template Get<
1904
8
      typename std::tuple_element<sizeof...(T) - 1, std::tuple<T...>>::type>();
1905
8
  size_t total_size =
1906
8
      last_end + RoundUpTo<FlatAlloc::kMaxAlign>(sizeof(FlatAlloc));
1907
8
  char* data = static_cast<char*>(::operator new(total_size));
1908
8
  auto* res = ::new (data) FlatAlloc(ends);
1909
8
  flat_allocs_.emplace_back(res);
1910
1911
8
  return res;
1912
8
}
1913
1914
void FileDescriptorTables::BuildLocationsByPath(
1915
0
    std::pair<const FileDescriptorTables*, const SourceCodeInfo*>* p) {
1916
0
  for (int i = 0, len = p->second->location_size(); i < len; ++i) {
1917
0
    const SourceCodeInfo_Location* loc = &p->second->location().Get(i);
1918
0
    p->first->locations_by_path_[absl::StrJoin(loc->path(), ",")] = loc;
1919
0
  }
1920
0
}
1921
1922
const SourceCodeInfo_Location* FileDescriptorTables::GetSourceLocation(
1923
0
    const std::vector<int>& path, const SourceCodeInfo* info) const {
1924
0
  std::pair<const FileDescriptorTables*, const SourceCodeInfo*> p(
1925
0
      std::make_pair(this, info));
1926
0
  absl::call_once(locations_by_path_once_,
1927
0
                  FileDescriptorTables::BuildLocationsByPath, &p);
1928
0
  auto it = locations_by_path_.find(absl::StrJoin(path, ","));
1929
0
  if (it == locations_by_path_.end()) return nullptr;
1930
0
  return it->second;
1931
0
}
1932
1933
// ===================================================================
1934
// DescriptorPool
1935
1936
1937
0
DescriptorPool::ErrorCollector::~ErrorCollector() {}
1938
1939
absl::string_view DescriptorPool::ErrorCollector::ErrorLocationName(
1940
0
    ErrorLocation location) {
1941
0
  switch (location) {
1942
0
    case NAME:
1943
0
      return "NAME";
1944
0
    case NUMBER:
1945
0
      return "NUMBER";
1946
0
    case TYPE:
1947
0
      return "TYPE";
1948
0
    case EXTENDEE:
1949
0
      return "EXTENDEE";
1950
0
    case DEFAULT_VALUE:
1951
0
      return "DEFAULT_VALUE";
1952
0
    case OPTION_NAME:
1953
0
      return "OPTION_NAME";
1954
0
    case OPTION_VALUE:
1955
0
      return "OPTION_VALUE";
1956
0
    case INPUT_TYPE:
1957
0
      return "INPUT_TYPE";
1958
0
    case OUTPUT_TYPE:
1959
0
      return "OUTPUT_TYPE";
1960
0
    case IMPORT:
1961
0
      return "IMPORT";
1962
0
    case EDITIONS:
1963
0
      return "EDITIONS";
1964
0
    case OTHER:
1965
0
      return "OTHER";
1966
0
  }
1967
0
  return "UNKNOWN";
1968
0
}
1969
1970
DescriptorPool::DescriptorPool()
1971
    : mutex_(nullptr),
1972
      fallback_database_(nullptr),
1973
      default_error_collector_(nullptr),
1974
      underlay_(nullptr),
1975
      tables_(new Tables),
1976
      enforce_dependencies_(true),
1977
      lazily_build_dependencies_(false),
1978
      allow_unknown_(false),
1979
      enforce_weak_(false),
1980
      enforce_extension_declarations_(false),
1981
      disallow_enforce_utf8_(false),
1982
0
      deprecated_legacy_json_field_conflicts_(false) {}
1983
1984
DescriptorPool::DescriptorPool(DescriptorDatabase* fallback_database,
1985
                               ErrorCollector* error_collector)
1986
    : mutex_(new absl::Mutex),
1987
      fallback_database_(fallback_database),
1988
      default_error_collector_(error_collector),
1989
      underlay_(nullptr),
1990
      tables_(new Tables),
1991
      enforce_dependencies_(true),
1992
      lazily_build_dependencies_(false),
1993
      allow_unknown_(false),
1994
      enforce_weak_(false),
1995
      enforce_extension_declarations_(false),
1996
      disallow_enforce_utf8_(false),
1997
4
      deprecated_legacy_json_field_conflicts_(false) {}
1998
1999
DescriptorPool::DescriptorPool(const DescriptorPool* underlay)
2000
    : mutex_(nullptr),
2001
      fallback_database_(nullptr),
2002
      default_error_collector_(nullptr),
2003
      underlay_(underlay),
2004
      tables_(new Tables),
2005
      enforce_dependencies_(true),
2006
      lazily_build_dependencies_(false),
2007
      allow_unknown_(false),
2008
      enforce_weak_(false),
2009
      enforce_extension_declarations_(false),
2010
      disallow_enforce_utf8_(false),
2011
0
      deprecated_legacy_json_field_conflicts_(false) {}
2012
2013
0
DescriptorPool::~DescriptorPool() {
2014
0
  if (mutex_ != nullptr) delete mutex_;
2015
0
}
2016
2017
// DescriptorPool::BuildFile() defined later.
2018
// DescriptorPool::BuildFileCollectingErrors() defined later.
2019
2020
4
void DescriptorPool::InternalDontEnforceDependencies() {
2021
4
  enforce_dependencies_ = false;
2022
4
}
2023
2024
void DescriptorPool::AddUnusedImportTrackFile(absl::string_view file_name,
2025
0
                                              bool is_error) {
2026
0
  unused_import_track_files_[file_name] = is_error;
2027
0
}
2028
2029
0
bool DescriptorPool::IsExtendingDescriptor(const FieldDescriptor& field) const {
2030
0
  static const auto& kDescriptorTypes = *new absl::flat_hash_set<std::string>({
2031
0
      "google.protobuf.EnumOptions",
2032
0
      "google.protobuf.EnumValueOptions",
2033
0
      "google.protobuf.ExtensionRangeOptions",
2034
0
      "google.protobuf.FieldOptions",
2035
0
      "google.protobuf.FileOptions",
2036
0
      "google.protobuf.MessageOptions",
2037
0
      "google.protobuf.MethodOptions",
2038
0
      "google.protobuf.OneofOptions",
2039
0
      "google.protobuf.ServiceOptions",
2040
0
      "google.protobuf.StreamOptions",
2041
0
  });
2042
0
  return kDescriptorTypes.contains(field.containing_type()->full_name());
2043
0
}
2044
2045
2046
0
void DescriptorPool::ClearUnusedImportTrackFiles() {
2047
0
  unused_import_track_files_.clear();
2048
0
}
2049
2050
0
bool DescriptorPool::InternalIsFileLoaded(absl::string_view filename) const {
2051
0
  absl::MutexLockMaybe lock(mutex_);
2052
0
  return tables_->FindFile(filename) != nullptr;
2053
0
}
2054
2055
// generated_pool ====================================================
2056
2057
namespace {
2058
2059
2060
16
EncodedDescriptorDatabase* GeneratedDatabase() {
2061
16
  static auto generated_database =
2062
16
      internal::OnShutdownDelete(new EncodedDescriptorDatabase());
2063
16
  return generated_database;
2064
16
}
2065
2066
4
DescriptorPool* NewGeneratedPool() {
2067
4
  auto generated_pool = new DescriptorPool(GeneratedDatabase());
2068
4
  generated_pool->InternalSetLazilyBuildDependencies();
2069
4
  return generated_pool;
2070
4
}
2071
2072
}  // anonymous namespace
2073
2074
0
DescriptorDatabase* DescriptorPool::internal_generated_database() {
2075
0
  return GeneratedDatabase();
2076
0
}
2077
2078
116
DescriptorPool* DescriptorPool::internal_generated_pool() {
2079
116
  static DescriptorPool* generated_pool =
2080
116
      internal::OnShutdownDelete(NewGeneratedPool());
2081
116
  return generated_pool;
2082
116
}
2083
2084
8
const DescriptorPool* DescriptorPool::generated_pool() {
2085
8
  const DescriptorPool* pool = internal_generated_pool();
2086
  // Ensure that descriptor.proto and cpp_features.proto get registered in the
2087
  // generated pool. They're special cases because they're included in the full
2088
  // runtime. We have to avoid registering it pre-main, because we need to
2089
  // ensure that the linker --gc-sections step can strip out the full runtime if
2090
  // it is unused.
2091
8
  DescriptorProto::descriptor();
2092
8
  pb::CppFeatures::descriptor();
2093
8
  return pool;
2094
8
}
2095
2096
2097
void DescriptorPool::InternalAddGeneratedFile(
2098
12
    const void* encoded_file_descriptor, int size) {
2099
  // So, this function is called in the process of initializing the
2100
  // descriptors for generated proto classes.  Each generated .pb.cc file
2101
  // has an internal procedure called AddDescriptors() which is called at
2102
  // process startup, and that function calls this one in order to register
2103
  // the raw bytes of the FileDescriptorProto representing the file.
2104
  //
2105
  // We do not actually construct the descriptor objects right away.  We just
2106
  // hang on to the bytes until they are actually needed.  We actually construct
2107
  // the descriptor the first time one of the following things happens:
2108
  // * Someone calls a method like descriptor(), GetDescriptor(), or
2109
  //   GetReflection() on the generated types, which requires returning the
2110
  //   descriptor or an object based on it.
2111
  // * Someone looks up the descriptor in DescriptorPool::generated_pool().
2112
  //
2113
  // Once one of these happens, the DescriptorPool actually parses the
2114
  // FileDescriptorProto and generates a FileDescriptor (and all its children)
2115
  // based on it.
2116
  //
2117
  // Note that FileDescriptorProto is itself a generated protocol message.
2118
  // Therefore, when we parse one, we have to be very careful to avoid using
2119
  // any descriptor-based operations, since this might cause infinite recursion
2120
  // or deadlock.
2121
12
  absl::MutexLockMaybe lock(internal_generated_pool()->mutex_);
2122
12
  ABSL_CHECK(GeneratedDatabase()->Add(encoded_file_descriptor, size));
2123
12
}
2124
2125
2126
// Find*By* methods ==================================================
2127
2128
// TODO:  There's a lot of repeated code here, but I'm not sure if
2129
//   there's any good way to factor it out.  Think about this some time when
2130
//   there's nothing more important to do (read: never).
2131
2132
const FileDescriptor* DescriptorPool::FindFileByName(
2133
8
    absl::string_view name) const {
2134
8
  absl::MutexLockMaybe lock(mutex_);
2135
8
  if (fallback_database_ != nullptr) {
2136
8
    tables_->known_bad_symbols_.clear();
2137
8
    tables_->known_bad_files_.clear();
2138
8
  }
2139
8
  const FileDescriptor* result = tables_->FindFile(name);
2140
8
  if (result != nullptr) return result;
2141
8
  if (underlay_ != nullptr) {
2142
0
    result = underlay_->FindFileByName(name);
2143
0
    if (result != nullptr) return result;
2144
0
  }
2145
8
  if (TryFindFileInFallbackDatabase(name)) {
2146
8
    result = tables_->FindFile(name);
2147
8
    if (result != nullptr) return result;
2148
8
  }
2149
0
  return nullptr;
2150
8
}
2151
2152
const FileDescriptor* DescriptorPool::FindFileContainingSymbol(
2153
0
    absl::string_view symbol_name) const {
2154
0
  absl::MutexLockMaybe lock(mutex_);
2155
0
  if (fallback_database_ != nullptr) {
2156
0
    tables_->known_bad_symbols_.clear();
2157
0
    tables_->known_bad_files_.clear();
2158
0
  }
2159
0
  Symbol result = tables_->FindSymbol(symbol_name);
2160
0
  if (!result.IsNull()) return result.GetFile();
2161
0
  if (underlay_ != nullptr) {
2162
0
    const FileDescriptor* file_result =
2163
0
        underlay_->FindFileContainingSymbol(symbol_name);
2164
0
    if (file_result != nullptr) return file_result;
2165
0
  }
2166
0
  if (TryFindSymbolInFallbackDatabase(symbol_name)) {
2167
0
    result = tables_->FindSymbol(symbol_name);
2168
0
    if (!result.IsNull()) return result.GetFile();
2169
0
  }
2170
0
  return nullptr;
2171
0
}
2172
2173
const Descriptor* DescriptorPool::FindMessageTypeByName(
2174
0
    absl::string_view name) const {
2175
0
  return tables_->FindByNameHelper(this, name).descriptor();
2176
0
}
2177
2178
const FieldDescriptor* DescriptorPool::FindFieldByName(
2179
0
    absl::string_view name) const {
2180
0
  if (const FieldDescriptor* field =
2181
0
          tables_->FindByNameHelper(this, name).field_descriptor()) {
2182
0
    if (!field->is_extension()) {
2183
0
      return field;
2184
0
    }
2185
0
  }
2186
0
  return nullptr;
2187
0
}
2188
2189
const FieldDescriptor* DescriptorPool::FindExtensionByName(
2190
0
    absl::string_view name) const {
2191
0
  if (const FieldDescriptor* field =
2192
0
          tables_->FindByNameHelper(this, name).field_descriptor()) {
2193
0
    if (field->is_extension()) {
2194
0
      return field;
2195
0
    }
2196
0
  }
2197
0
  return nullptr;
2198
0
}
2199
2200
const OneofDescriptor* DescriptorPool::FindOneofByName(
2201
0
    absl::string_view name) const {
2202
0
  return tables_->FindByNameHelper(this, name).oneof_descriptor();
2203
0
}
2204
2205
const EnumDescriptor* DescriptorPool::FindEnumTypeByName(
2206
0
    absl::string_view name) const {
2207
0
  return tables_->FindByNameHelper(this, name).enum_descriptor();
2208
0
}
2209
2210
const EnumValueDescriptor* DescriptorPool::FindEnumValueByName(
2211
0
    absl::string_view name) const {
2212
0
  return tables_->FindByNameHelper(this, name).enum_value_descriptor();
2213
0
}
2214
2215
const ServiceDescriptor* DescriptorPool::FindServiceByName(
2216
0
    absl::string_view name) const {
2217
0
  return tables_->FindByNameHelper(this, name).service_descriptor();
2218
0
}
2219
2220
const MethodDescriptor* DescriptorPool::FindMethodByName(
2221
0
    absl::string_view name) const {
2222
0
  return tables_->FindByNameHelper(this, name).method_descriptor();
2223
0
}
2224
2225
const FieldDescriptor* DescriptorPool::FindExtensionByNumber(
2226
0
    const Descriptor* extendee, int number) const {
2227
0
  if (extendee->extension_range_count() == 0) return nullptr;
2228
  // A faster path to reduce lock contention in finding extensions, assuming
2229
  // most extensions will be cache hit.
2230
0
  if (mutex_ != nullptr) {
2231
0
    absl::ReaderMutexLock lock(mutex_);
2232
0
    const FieldDescriptor* result = tables_->FindExtension(extendee, number);
2233
0
    if (result != nullptr) {
2234
0
      return result;
2235
0
    }
2236
0
  }
2237
0
  absl::MutexLockMaybe lock(mutex_);
2238
0
  if (fallback_database_ != nullptr) {
2239
0
    tables_->known_bad_symbols_.clear();
2240
0
    tables_->known_bad_files_.clear();
2241
0
  }
2242
0
  const FieldDescriptor* result = tables_->FindExtension(extendee, number);
2243
0
  if (result != nullptr) {
2244
0
    return result;
2245
0
  }
2246
0
  if (underlay_ != nullptr) {
2247
0
    result = underlay_->FindExtensionByNumber(extendee, number);
2248
0
    if (result != nullptr) return result;
2249
0
  }
2250
0
  if (TryFindExtensionInFallbackDatabase(extendee, number)) {
2251
0
    result = tables_->FindExtension(extendee, number);
2252
0
    if (result != nullptr) {
2253
0
      return result;
2254
0
    }
2255
0
  }
2256
0
  return nullptr;
2257
0
}
2258
2259
const FieldDescriptor* DescriptorPool::InternalFindExtensionByNumberNoLock(
2260
0
    const Descriptor* extendee, int number) const {
2261
0
  if (extendee->extension_range_count() == 0) return nullptr;
2262
2263
0
  const FieldDescriptor* result = tables_->FindExtension(extendee, number);
2264
0
  if (result != nullptr) {
2265
0
    return result;
2266
0
  }
2267
2268
0
  if (underlay_ != nullptr) {
2269
0
    result = underlay_->InternalFindExtensionByNumberNoLock(extendee, number);
2270
0
    if (result != nullptr) return result;
2271
0
  }
2272
2273
0
  return nullptr;
2274
0
}
2275
2276
const FieldDescriptor* DescriptorPool::FindExtensionByPrintableName(
2277
0
    const Descriptor* extendee, absl::string_view printable_name) const {
2278
0
  if (extendee->extension_range_count() == 0) return nullptr;
2279
0
  const FieldDescriptor* result = FindExtensionByName(printable_name);
2280
0
  if (result != nullptr && result->containing_type() == extendee) {
2281
0
    return result;
2282
0
  }
2283
0
  if (extendee->options().message_set_wire_format()) {
2284
    // MessageSet extensions may be identified by type name.
2285
0
    const Descriptor* type = FindMessageTypeByName(printable_name);
2286
0
    if (type != nullptr) {
2287
      // Look for a matching extension in the foreign type's scope.
2288
0
      const int type_extension_count = type->extension_count();
2289
0
      for (int i = 0; i < type_extension_count; i++) {
2290
0
        const FieldDescriptor* extension = type->extension(i);
2291
0
        if (extension->containing_type() == extendee &&
2292
0
            extension->type() == FieldDescriptor::TYPE_MESSAGE &&
2293
0
            extension->is_optional() && extension->message_type() == type) {
2294
          // Found it.
2295
0
          return extension;
2296
0
        }
2297
0
      }
2298
0
    }
2299
0
  }
2300
0
  return nullptr;
2301
0
}
2302
2303
void DescriptorPool::FindAllExtensions(
2304
    const Descriptor* extendee,
2305
0
    std::vector<const FieldDescriptor*>* out) const {
2306
0
  absl::MutexLockMaybe lock(mutex_);
2307
0
  if (fallback_database_ != nullptr) {
2308
0
    tables_->known_bad_symbols_.clear();
2309
0
    tables_->known_bad_files_.clear();
2310
0
  }
2311
2312
  // Initialize tables_->extensions_ from the fallback database first
2313
  // (but do this only once per descriptor).
2314
0
  if (fallback_database_ != nullptr &&
2315
0
      tables_->extensions_loaded_from_db_.count(extendee) == 0) {
2316
0
    std::vector<int> numbers;
2317
0
    if (fallback_database_->FindAllExtensionNumbers(extendee->full_name(),
2318
0
                                                    &numbers)) {
2319
0
      for (int number : numbers) {
2320
0
        if (tables_->FindExtension(extendee, number) == nullptr) {
2321
0
          TryFindExtensionInFallbackDatabase(extendee, number);
2322
0
        }
2323
0
      }
2324
0
      tables_->extensions_loaded_from_db_.insert(extendee);
2325
0
    }
2326
0
  }
2327
2328
0
  tables_->FindAllExtensions(extendee, out);
2329
0
  if (underlay_ != nullptr) {
2330
0
    underlay_->FindAllExtensions(extendee, out);
2331
0
  }
2332
0
}
2333
2334
2335
// -------------------------------------------------------------------
2336
2337
0
const FieldDescriptor* Descriptor::FindFieldByNumber(int key) const {
2338
0
  const FieldDescriptor* result = file()->tables_->FindFieldByNumber(this, key);
2339
0
  if (result == nullptr || result->is_extension()) {
2340
0
    return nullptr;
2341
0
  } else {
2342
0
    return result;
2343
0
  }
2344
0
}
2345
2346
const FieldDescriptor* Descriptor::FindFieldByLowercaseName(
2347
0
    absl::string_view key) const {
2348
0
  const FieldDescriptor* result =
2349
0
      file()->tables_->FindFieldByLowercaseName(this, key);
2350
0
  if (result == nullptr || result->is_extension()) {
2351
0
    return nullptr;
2352
0
  } else {
2353
0
    return result;
2354
0
  }
2355
0
}
2356
2357
const FieldDescriptor* Descriptor::FindFieldByCamelcaseName(
2358
0
    absl::string_view key) const {
2359