ASTCommon.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. //===--- ASTCommon.cpp - Common stuff for ASTReader/ASTWriter----*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file defines common functions that both ASTReader and ASTWriter use.
  10. //
  11. //===----------------------------------------------------------------------===//
  12. #include "ASTCommon.h"
  13. #include "clang/AST/DeclCXX.h"
  14. #include "clang/AST/DeclObjC.h"
  15. #include "clang/Basic/IdentifierTable.h"
  16. #include "clang/Serialization/ASTDeserializationListener.h"
  17. #include "llvm/Support/DJB.h"
  18. using namespace clang;
  19. // Give ASTDeserializationListener's VTable a home.
  20. ASTDeserializationListener::~ASTDeserializationListener() { }
  21. serialization::TypeIdx
  22. serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
  23. unsigned ID = 0;
  24. switch (BT->getKind()) {
  25. case BuiltinType::Void:
  26. ID = PREDEF_TYPE_VOID_ID;
  27. break;
  28. case BuiltinType::Bool:
  29. ID = PREDEF_TYPE_BOOL_ID;
  30. break;
  31. case BuiltinType::Char_U:
  32. ID = PREDEF_TYPE_CHAR_U_ID;
  33. break;
  34. case BuiltinType::UChar:
  35. ID = PREDEF_TYPE_UCHAR_ID;
  36. break;
  37. case BuiltinType::UShort:
  38. ID = PREDEF_TYPE_USHORT_ID;
  39. break;
  40. case BuiltinType::UInt:
  41. ID = PREDEF_TYPE_UINT_ID;
  42. break;
  43. case BuiltinType::ULong:
  44. ID = PREDEF_TYPE_ULONG_ID;
  45. break;
  46. case BuiltinType::ULongLong:
  47. ID = PREDEF_TYPE_ULONGLONG_ID;
  48. break;
  49. case BuiltinType::UInt128:
  50. ID = PREDEF_TYPE_UINT128_ID;
  51. break;
  52. case BuiltinType::Char_S:
  53. ID = PREDEF_TYPE_CHAR_S_ID;
  54. break;
  55. case BuiltinType::SChar:
  56. ID = PREDEF_TYPE_SCHAR_ID;
  57. break;
  58. case BuiltinType::WChar_S:
  59. case BuiltinType::WChar_U:
  60. ID = PREDEF_TYPE_WCHAR_ID;
  61. break;
  62. case BuiltinType::Short:
  63. ID = PREDEF_TYPE_SHORT_ID;
  64. break;
  65. case BuiltinType::Int:
  66. ID = PREDEF_TYPE_INT_ID;
  67. break;
  68. case BuiltinType::Long:
  69. ID = PREDEF_TYPE_LONG_ID;
  70. break;
  71. case BuiltinType::LongLong:
  72. ID = PREDEF_TYPE_LONGLONG_ID;
  73. break;
  74. case BuiltinType::Int128:
  75. ID = PREDEF_TYPE_INT128_ID;
  76. break;
  77. case BuiltinType::Half:
  78. ID = PREDEF_TYPE_HALF_ID;
  79. break;
  80. case BuiltinType::Float:
  81. ID = PREDEF_TYPE_FLOAT_ID;
  82. break;
  83. case BuiltinType::Double:
  84. ID = PREDEF_TYPE_DOUBLE_ID;
  85. break;
  86. case BuiltinType::LongDouble:
  87. ID = PREDEF_TYPE_LONGDOUBLE_ID;
  88. break;
  89. case BuiltinType::ShortAccum:
  90. ID = PREDEF_TYPE_SHORT_ACCUM_ID;
  91. break;
  92. case BuiltinType::Accum:
  93. ID = PREDEF_TYPE_ACCUM_ID;
  94. break;
  95. case BuiltinType::LongAccum:
  96. ID = PREDEF_TYPE_LONG_ACCUM_ID;
  97. break;
  98. case BuiltinType::UShortAccum:
  99. ID = PREDEF_TYPE_USHORT_ACCUM_ID;
  100. break;
  101. case BuiltinType::UAccum:
  102. ID = PREDEF_TYPE_UACCUM_ID;
  103. break;
  104. case BuiltinType::ULongAccum:
  105. ID = PREDEF_TYPE_ULONG_ACCUM_ID;
  106. break;
  107. case BuiltinType::ShortFract:
  108. ID = PREDEF_TYPE_SHORT_FRACT_ID;
  109. break;
  110. case BuiltinType::Fract:
  111. ID = PREDEF_TYPE_FRACT_ID;
  112. break;
  113. case BuiltinType::LongFract:
  114. ID = PREDEF_TYPE_LONG_FRACT_ID;
  115. break;
  116. case BuiltinType::UShortFract:
  117. ID = PREDEF_TYPE_USHORT_FRACT_ID;
  118. break;
  119. case BuiltinType::UFract:
  120. ID = PREDEF_TYPE_UFRACT_ID;
  121. break;
  122. case BuiltinType::ULongFract:
  123. ID = PREDEF_TYPE_ULONG_FRACT_ID;
  124. break;
  125. case BuiltinType::SatShortAccum:
  126. ID = PREDEF_TYPE_SAT_SHORT_ACCUM_ID;
  127. break;
  128. case BuiltinType::SatAccum:
  129. ID = PREDEF_TYPE_SAT_ACCUM_ID;
  130. break;
  131. case BuiltinType::SatLongAccum:
  132. ID = PREDEF_TYPE_SAT_LONG_ACCUM_ID;
  133. break;
  134. case BuiltinType::SatUShortAccum:
  135. ID = PREDEF_TYPE_SAT_USHORT_ACCUM_ID;
  136. break;
  137. case BuiltinType::SatUAccum:
  138. ID = PREDEF_TYPE_SAT_UACCUM_ID;
  139. break;
  140. case BuiltinType::SatULongAccum:
  141. ID = PREDEF_TYPE_SAT_ULONG_ACCUM_ID;
  142. break;
  143. case BuiltinType::SatShortFract:
  144. ID = PREDEF_TYPE_SAT_SHORT_FRACT_ID;
  145. break;
  146. case BuiltinType::SatFract:
  147. ID = PREDEF_TYPE_SAT_FRACT_ID;
  148. break;
  149. case BuiltinType::SatLongFract:
  150. ID = PREDEF_TYPE_SAT_LONG_FRACT_ID;
  151. break;
  152. case BuiltinType::SatUShortFract:
  153. ID = PREDEF_TYPE_SAT_USHORT_FRACT_ID;
  154. break;
  155. case BuiltinType::SatUFract:
  156. ID = PREDEF_TYPE_SAT_UFRACT_ID;
  157. break;
  158. case BuiltinType::SatULongFract:
  159. ID = PREDEF_TYPE_SAT_ULONG_FRACT_ID;
  160. break;
  161. case BuiltinType::Float16:
  162. ID = PREDEF_TYPE_FLOAT16_ID;
  163. break;
  164. case BuiltinType::Float128:
  165. ID = PREDEF_TYPE_FLOAT128_ID;
  166. break;
  167. case BuiltinType::NullPtr:
  168. ID = PREDEF_TYPE_NULLPTR_ID;
  169. break;
  170. case BuiltinType::Char8:
  171. ID = PREDEF_TYPE_CHAR8_ID;
  172. break;
  173. case BuiltinType::Char16:
  174. ID = PREDEF_TYPE_CHAR16_ID;
  175. break;
  176. case BuiltinType::Char32:
  177. ID = PREDEF_TYPE_CHAR32_ID;
  178. break;
  179. case BuiltinType::Overload:
  180. ID = PREDEF_TYPE_OVERLOAD_ID;
  181. break;
  182. case BuiltinType::BoundMember:
  183. ID = PREDEF_TYPE_BOUND_MEMBER;
  184. break;
  185. case BuiltinType::PseudoObject:
  186. ID = PREDEF_TYPE_PSEUDO_OBJECT;
  187. break;
  188. case BuiltinType::Dependent:
  189. ID = PREDEF_TYPE_DEPENDENT_ID;
  190. break;
  191. case BuiltinType::UnknownAny:
  192. ID = PREDEF_TYPE_UNKNOWN_ANY;
  193. break;
  194. case BuiltinType::ARCUnbridgedCast:
  195. ID = PREDEF_TYPE_ARC_UNBRIDGED_CAST;
  196. break;
  197. case BuiltinType::ObjCId:
  198. ID = PREDEF_TYPE_OBJC_ID;
  199. break;
  200. case BuiltinType::ObjCClass:
  201. ID = PREDEF_TYPE_OBJC_CLASS;
  202. break;
  203. case BuiltinType::ObjCSel:
  204. ID = PREDEF_TYPE_OBJC_SEL;
  205. break;
  206. #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
  207. case BuiltinType::Id: \
  208. ID = PREDEF_TYPE_##Id##_ID; \
  209. break;
  210. #include "clang/Basic/OpenCLImageTypes.def"
  211. #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
  212. case BuiltinType::Id: \
  213. ID = PREDEF_TYPE_##Id##_ID; \
  214. break;
  215. #include "clang/Basic/OpenCLExtensionTypes.def"
  216. case BuiltinType::OCLSampler:
  217. ID = PREDEF_TYPE_SAMPLER_ID;
  218. break;
  219. case BuiltinType::OCLEvent:
  220. ID = PREDEF_TYPE_EVENT_ID;
  221. break;
  222. case BuiltinType::OCLClkEvent:
  223. ID = PREDEF_TYPE_CLK_EVENT_ID;
  224. break;
  225. case BuiltinType::OCLQueue:
  226. ID = PREDEF_TYPE_QUEUE_ID;
  227. break;
  228. case BuiltinType::OCLReserveID:
  229. ID = PREDEF_TYPE_RESERVE_ID_ID;
  230. break;
  231. case BuiltinType::BuiltinFn:
  232. ID = PREDEF_TYPE_BUILTIN_FN;
  233. break;
  234. case BuiltinType::OMPArraySection:
  235. ID = PREDEF_TYPE_OMP_ARRAY_SECTION;
  236. break;
  237. }
  238. return TypeIdx(ID);
  239. }
  240. unsigned serialization::ComputeHash(Selector Sel) {
  241. unsigned N = Sel.getNumArgs();
  242. if (N == 0)
  243. ++N;
  244. unsigned R = 5381;
  245. for (unsigned I = 0; I != N; ++I)
  246. if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(I))
  247. R = llvm::djbHash(II->getName(), R);
  248. return R;
  249. }
  250. const DeclContext *
  251. serialization::getDefinitiveDeclContext(const DeclContext *DC) {
  252. switch (DC->getDeclKind()) {
  253. // These entities may have multiple definitions.
  254. case Decl::TranslationUnit:
  255. case Decl::ExternCContext:
  256. case Decl::Namespace:
  257. case Decl::LinkageSpec:
  258. case Decl::Export:
  259. return nullptr;
  260. // C/C++ tag types can only be defined in one place.
  261. case Decl::Enum:
  262. case Decl::Record:
  263. if (const TagDecl *Def = cast<TagDecl>(DC)->getDefinition())
  264. return Def;
  265. return nullptr;
  266. // FIXME: These can be defined in one place... except special member
  267. // functions and out-of-line definitions.
  268. case Decl::CXXRecord:
  269. case Decl::ClassTemplateSpecialization:
  270. case Decl::ClassTemplatePartialSpecialization:
  271. return nullptr;
  272. // Each function, method, and block declaration is its own DeclContext.
  273. case Decl::Function:
  274. case Decl::CXXMethod:
  275. case Decl::CXXConstructor:
  276. case Decl::CXXDestructor:
  277. case Decl::CXXConversion:
  278. case Decl::ObjCMethod:
  279. case Decl::Block:
  280. case Decl::Captured:
  281. // Objective C categories, category implementations, and class
  282. // implementations can only be defined in one place.
  283. case Decl::ObjCCategory:
  284. case Decl::ObjCCategoryImpl:
  285. case Decl::ObjCImplementation:
  286. return DC;
  287. case Decl::ObjCProtocol:
  288. if (const ObjCProtocolDecl *Def
  289. = cast<ObjCProtocolDecl>(DC)->getDefinition())
  290. return Def;
  291. return nullptr;
  292. // FIXME: These are defined in one place, but properties in class extensions
  293. // end up being back-patched into the main interface. See
  294. // Sema::HandlePropertyInClassExtension for the offending code.
  295. case Decl::ObjCInterface:
  296. return nullptr;
  297. default:
  298. llvm_unreachable("Unhandled DeclContext in AST reader");
  299. }
  300. llvm_unreachable("Unhandled decl kind");
  301. }
  302. bool serialization::isRedeclarableDeclKind(unsigned Kind) {
  303. switch (static_cast<Decl::Kind>(Kind)) {
  304. case Decl::TranslationUnit:
  305. case Decl::ExternCContext:
  306. // Special case of a "merged" declaration.
  307. return true;
  308. case Decl::Namespace:
  309. case Decl::NamespaceAlias:
  310. case Decl::Typedef:
  311. case Decl::TypeAlias:
  312. case Decl::Enum:
  313. case Decl::Record:
  314. case Decl::CXXRecord:
  315. case Decl::ClassTemplateSpecialization:
  316. case Decl::ClassTemplatePartialSpecialization:
  317. case Decl::VarTemplateSpecialization:
  318. case Decl::VarTemplatePartialSpecialization:
  319. case Decl::Function:
  320. case Decl::CXXDeductionGuide:
  321. case Decl::CXXMethod:
  322. case Decl::CXXConstructor:
  323. case Decl::CXXDestructor:
  324. case Decl::CXXConversion:
  325. case Decl::UsingShadow:
  326. case Decl::ConstructorUsingShadow:
  327. case Decl::Var:
  328. case Decl::FunctionTemplate:
  329. case Decl::ClassTemplate:
  330. case Decl::VarTemplate:
  331. case Decl::TypeAliasTemplate:
  332. case Decl::ObjCProtocol:
  333. case Decl::ObjCInterface:
  334. case Decl::Empty:
  335. return true;
  336. // Never redeclarable.
  337. case Decl::UsingDirective:
  338. case Decl::Label:
  339. case Decl::UnresolvedUsingTypename:
  340. case Decl::TemplateTypeParm:
  341. case Decl::EnumConstant:
  342. case Decl::UnresolvedUsingValue:
  343. case Decl::IndirectField:
  344. case Decl::Field:
  345. case Decl::MSProperty:
  346. case Decl::ObjCIvar:
  347. case Decl::ObjCAtDefsField:
  348. case Decl::NonTypeTemplateParm:
  349. case Decl::TemplateTemplateParm:
  350. case Decl::Using:
  351. case Decl::UsingPack:
  352. case Decl::ObjCMethod:
  353. case Decl::ObjCCategory:
  354. case Decl::ObjCCategoryImpl:
  355. case Decl::ObjCImplementation:
  356. case Decl::ObjCProperty:
  357. case Decl::ObjCCompatibleAlias:
  358. case Decl::LinkageSpec:
  359. case Decl::Export:
  360. case Decl::ObjCPropertyImpl:
  361. case Decl::PragmaComment:
  362. case Decl::PragmaDetectMismatch:
  363. case Decl::FileScopeAsm:
  364. case Decl::AccessSpec:
  365. case Decl::Friend:
  366. case Decl::FriendTemplate:
  367. case Decl::StaticAssert:
  368. case Decl::Block:
  369. case Decl::Captured:
  370. case Decl::ClassScopeFunctionSpecialization:
  371. case Decl::Import:
  372. case Decl::OMPThreadPrivate:
  373. case Decl::OMPRequires:
  374. case Decl::OMPCapturedExpr:
  375. case Decl::OMPDeclareReduction:
  376. case Decl::OMPDeclareMapper:
  377. case Decl::BuiltinTemplate:
  378. case Decl::Decomposition:
  379. case Decl::Binding:
  380. return false;
  381. // These indirectly derive from Redeclarable<T> but are not actually
  382. // redeclarable.
  383. case Decl::ImplicitParam:
  384. case Decl::ParmVar:
  385. case Decl::ObjCTypeParam:
  386. return false;
  387. }
  388. llvm_unreachable("Unhandled declaration kind");
  389. }
  390. bool serialization::needsAnonymousDeclarationNumber(const NamedDecl *D) {
  391. // Friend declarations in dependent contexts aren't anonymous in the usual
  392. // sense, but they cannot be found by name lookup in their semantic context
  393. // (or indeed in any context), so we treat them as anonymous.
  394. //
  395. // This doesn't apply to friend tag decls; Sema makes those available to name
  396. // lookup in the surrounding context.
  397. if (D->getFriendObjectKind() &&
  398. D->getLexicalDeclContext()->isDependentContext() && !isa<TagDecl>(D)) {
  399. // For function templates and class templates, the template is numbered and
  400. // not its pattern.
  401. if (auto *FD = dyn_cast<FunctionDecl>(D))
  402. return !FD->getDescribedFunctionTemplate();
  403. if (auto *RD = dyn_cast<CXXRecordDecl>(D))
  404. return !RD->getDescribedClassTemplate();
  405. return true;
  406. }
  407. // At block scope, we number everything that we need to deduplicate, since we
  408. // can't just use name matching to keep things lined up.
  409. // FIXME: This is only necessary for an inline function or a template or
  410. // similar.
  411. if (D->getLexicalDeclContext()->isFunctionOrMethod()) {
  412. if (auto *VD = dyn_cast<VarDecl>(D))
  413. return VD->isStaticLocal();
  414. // FIXME: What about CapturedDecls (and declarations nested within them)?
  415. return isa<TagDecl>(D) || isa<BlockDecl>(D);
  416. }
  417. // Otherwise, we only care about anonymous class members / block-scope decls.
  418. // FIXME: We need to handle lambdas and blocks within inline / templated
  419. // variables too.
  420. if (D->getDeclName() || !isa<CXXRecordDecl>(D->getLexicalDeclContext()))
  421. return false;
  422. return isa<TagDecl>(D) || isa<FieldDecl>(D);
  423. }