ASTCommon.cpp 12 KB

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