Attributes.inc 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #ifdef GET_ATTR_NAMES
  2. #undef GET_ATTR_NAMES
  3. #ifndef ATTRIBUTE_ALL
  4. #define ATTRIBUTE_ALL(FIRST, SECOND)
  5. #endif
  6. #ifndef ATTRIBUTE_ENUM
  7. #define ATTRIBUTE_ENUM(FIRST, SECOND) ATTRIBUTE_ALL(FIRST, SECOND)
  8. #endif
  9. ATTRIBUTE_ENUM(AlwaysInline,alwaysinline)
  10. ATTRIBUTE_ENUM(ArgMemOnly,argmemonly)
  11. ATTRIBUTE_ENUM(Builtin,builtin)
  12. ATTRIBUTE_ENUM(Cold,cold)
  13. ATTRIBUTE_ENUM(Convergent,convergent)
  14. ATTRIBUTE_ENUM(Hot,hot)
  15. ATTRIBUTE_ENUM(ImmArg,immarg)
  16. ATTRIBUTE_ENUM(InReg,inreg)
  17. ATTRIBUTE_ENUM(InaccessibleMemOnly,inaccessiblememonly)
  18. ATTRIBUTE_ENUM(InaccessibleMemOrArgMemOnly,inaccessiblemem_or_argmemonly)
  19. ATTRIBUTE_ENUM(InlineHint,inlinehint)
  20. ATTRIBUTE_ENUM(JumpTable,jumptable)
  21. ATTRIBUTE_ENUM(MinSize,minsize)
  22. ATTRIBUTE_ENUM(Naked,naked)
  23. ATTRIBUTE_ENUM(Nest,nest)
  24. ATTRIBUTE_ENUM(NoAlias,noalias)
  25. ATTRIBUTE_ENUM(NoBuiltin,nobuiltin)
  26. ATTRIBUTE_ENUM(NoCallback,nocallback)
  27. ATTRIBUTE_ENUM(NoCapture,nocapture)
  28. ATTRIBUTE_ENUM(NoCfCheck,nocf_check)
  29. ATTRIBUTE_ENUM(NoDuplicate,noduplicate)
  30. ATTRIBUTE_ENUM(NoFree,nofree)
  31. ATTRIBUTE_ENUM(NoImplicitFloat,noimplicitfloat)
  32. ATTRIBUTE_ENUM(NoInline,noinline)
  33. ATTRIBUTE_ENUM(NoMerge,nomerge)
  34. ATTRIBUTE_ENUM(NoProfile,noprofile)
  35. ATTRIBUTE_ENUM(NoRecurse,norecurse)
  36. ATTRIBUTE_ENUM(NoRedZone,noredzone)
  37. ATTRIBUTE_ENUM(NoReturn,noreturn)
  38. ATTRIBUTE_ENUM(NoSanitizeCoverage,nosanitize_coverage)
  39. ATTRIBUTE_ENUM(NoSync,nosync)
  40. ATTRIBUTE_ENUM(NoUndef,noundef)
  41. ATTRIBUTE_ENUM(NoUnwind,nounwind)
  42. ATTRIBUTE_ENUM(NonLazyBind,nonlazybind)
  43. ATTRIBUTE_ENUM(NonNull,nonnull)
  44. ATTRIBUTE_ENUM(NullPointerIsValid,null_pointer_is_valid)
  45. ATTRIBUTE_ENUM(OptForFuzzing,optforfuzzing)
  46. ATTRIBUTE_ENUM(OptimizeForSize,optsize)
  47. ATTRIBUTE_ENUM(OptimizeNone,optnone)
  48. ATTRIBUTE_ENUM(ReadNone,readnone)
  49. ATTRIBUTE_ENUM(ReadOnly,readonly)
  50. ATTRIBUTE_ENUM(Returned,returned)
  51. ATTRIBUTE_ENUM(ReturnsTwice,returns_twice)
  52. ATTRIBUTE_ENUM(SExt,signext)
  53. ATTRIBUTE_ENUM(SafeStack,safestack)
  54. ATTRIBUTE_ENUM(SanitizeAddress,sanitize_address)
  55. ATTRIBUTE_ENUM(SanitizeHWAddress,sanitize_hwaddress)
  56. ATTRIBUTE_ENUM(SanitizeMemTag,sanitize_memtag)
  57. ATTRIBUTE_ENUM(SanitizeMemory,sanitize_memory)
  58. ATTRIBUTE_ENUM(SanitizeThread,sanitize_thread)
  59. ATTRIBUTE_ENUM(ShadowCallStack,shadowcallstack)
  60. ATTRIBUTE_ENUM(Speculatable,speculatable)
  61. ATTRIBUTE_ENUM(SpeculativeLoadHardening,speculative_load_hardening)
  62. ATTRIBUTE_ENUM(StackProtect,ssp)
  63. ATTRIBUTE_ENUM(StackProtectReq,sspreq)
  64. ATTRIBUTE_ENUM(StackProtectStrong,sspstrong)
  65. ATTRIBUTE_ENUM(StrictFP,strictfp)
  66. ATTRIBUTE_ENUM(SwiftAsync,swiftasync)
  67. ATTRIBUTE_ENUM(SwiftError,swifterror)
  68. ATTRIBUTE_ENUM(SwiftSelf,swiftself)
  69. ATTRIBUTE_ENUM(UWTable,uwtable)
  70. ATTRIBUTE_ENUM(WillReturn,willreturn)
  71. ATTRIBUTE_ENUM(WriteOnly,writeonly)
  72. ATTRIBUTE_ENUM(ZExt,zeroext)
  73. ATTRIBUTE_ENUM(ByRef,byref)
  74. ATTRIBUTE_ENUM(ByVal,byval)
  75. ATTRIBUTE_ENUM(InAlloca,inalloca)
  76. ATTRIBUTE_ENUM(MustProgress,mustprogress)
  77. ATTRIBUTE_ENUM(Preallocated,preallocated)
  78. ATTRIBUTE_ENUM(StructRet,sret)
  79. ATTRIBUTE_ENUM(Alignment,align)
  80. ATTRIBUTE_ENUM(AllocSize,allocsize)
  81. ATTRIBUTE_ENUM(Dereferenceable,dereferenceable)
  82. ATTRIBUTE_ENUM(DereferenceableOrNull,dereferenceable_or_null)
  83. ATTRIBUTE_ENUM(StackAlignment,alignstack)
  84. ATTRIBUTE_ENUM(VScaleRange,vscale_range)
  85. #undef ATTRIBUTE_ENUM
  86. #ifndef ATTRIBUTE_STRBOOL
  87. #define ATTRIBUTE_STRBOOL(FIRST, SECOND) ATTRIBUTE_ALL(FIRST, SECOND)
  88. #endif
  89. ATTRIBUTE_STRBOOL(LessPreciseFPMAD,less-precise-fpmad)
  90. ATTRIBUTE_STRBOOL(NoInfsFPMath,no-infs-fp-math)
  91. ATTRIBUTE_STRBOOL(NoInlineLineTables,no-inline-line-tables)
  92. ATTRIBUTE_STRBOOL(NoJumpTables,no-jump-tables)
  93. ATTRIBUTE_STRBOOL(NoNansFPMath,no-nans-fp-math)
  94. ATTRIBUTE_STRBOOL(NoSignedZerosFPMath,no-signed-zeros-fp-math)
  95. ATTRIBUTE_STRBOOL(ProfileSampleAccurate,profile-sample-accurate)
  96. ATTRIBUTE_STRBOOL(UnsafeFPMath,unsafe-fp-math)
  97. ATTRIBUTE_STRBOOL(UseSampleProfile,use-sample-profile)
  98. #undef ATTRIBUTE_STRBOOL
  99. #undef ATTRIBUTE_ALL
  100. #endif
  101. #ifdef GET_ATTR_COMPAT_FUNC
  102. #undef GET_ATTR_COMPAT_FUNC
  103. static inline bool hasCompatibleFnAttrs(const Function &Caller,
  104. const Function &Callee) {
  105. bool Ret = true;
  106. Ret &= isEqual<SanitizeAddressAttr>(Caller, Callee);
  107. Ret &= isEqual<SanitizeThreadAttr>(Caller, Callee);
  108. Ret &= isEqual<SanitizeMemoryAttr>(Caller, Callee);
  109. Ret &= isEqual<SanitizeHWAddressAttr>(Caller, Callee);
  110. Ret &= isEqual<SanitizeMemTagAttr>(Caller, Callee);
  111. Ret &= isEqual<SafeStackAttr>(Caller, Callee);
  112. Ret &= isEqual<ShadowCallStackAttr>(Caller, Callee);
  113. Ret &= isEqual<UseSampleProfileAttr>(Caller, Callee);
  114. return Ret;
  115. }
  116. static inline void mergeFnAttrs(Function &Caller,
  117. const Function &Callee) {
  118. setAND<NoNansFPMathAttr>(Caller, Callee);
  119. setAND<NoSignedZerosFPMathAttr>(Caller, Callee);
  120. setAND<UnsafeFPMathAttr>(Caller, Callee);
  121. setOR<NoImplicitFloatAttr>(Caller, Callee);
  122. setOR<NoJumpTablesAttr>(Caller, Callee);
  123. setOR<ProfileSampleAccurateAttr>(Caller, Callee);
  124. setOR<SpeculativeLoadHardeningAttr>(Caller, Callee);
  125. adjustCallerSSPLevel(Caller, Callee);
  126. adjustCallerStackProbes(Caller, Callee);
  127. adjustCallerStackProbeSize(Caller, Callee);
  128. adjustMinLegalVectorWidth(Caller, Callee);
  129. adjustNullPointerValidAttr(Caller, Callee);
  130. setAND<MustProgressAttr>(Caller, Callee);
  131. setAND<LessPreciseFPMADAttr>(Caller, Callee);
  132. setAND<NoInfsFPMathAttr>(Caller, Callee);
  133. }
  134. #endif