diff options
Diffstat (limited to 'include/clang/Basic/Attr.td')
-rw-r--r-- | include/clang/Basic/Attr.td | 90 |
1 files changed, 72 insertions, 18 deletions
diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 7da1efe5ff40..107a3bdffa65 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -198,6 +198,7 @@ class Spelling<string name, string variety> { class GNU<string name> : Spelling<name, "GNU">; class Declspec<string name> : Spelling<name, "Declspec">; +class Microsoft<string name> : Spelling<name, "Microsoft">; class CXX11<string namespace, string name, int version = 1> : Spelling<name, "CXX11"> { string Namespace = namespace; @@ -241,6 +242,7 @@ def MicrosoftExt : LangOpt<"MicrosoftExt">; def Borland : LangOpt<"Borland">; def CUDA : LangOpt<"CUDA">; def COnly : LangOpt<"CPlusPlus", 1>; +def CPlusPlus : LangOpt<"CPlusPlus">; def OpenCL : LangOpt<"OpenCL">; def RenderScript : LangOpt<"RenderScript">; @@ -252,7 +254,7 @@ class TargetArch<list<string> arches> { list<string> OSes; list<string> CXXABIs; } -def TargetARM : TargetArch<["arm", "thumb"]>; +def TargetARM : TargetArch<["arm", "thumb", "armeb", "thumbeb"]>; def TargetMips : TargetArch<["mips", "mipsel"]>; def TargetMSP430 : TargetArch<["msp430"]>; def TargetX86 : TargetArch<["x86"]>; @@ -380,7 +382,7 @@ def Alias : Attr { let Spellings = [GCC<"alias">]; let Args = [StringArgument<"Aliasee">]; let Subjects = SubjectList<[Function, GlobalVar], ErrorDiag, - "ExpectedFunctionGlobalVarMethodOrProperty">; + "ExpectedFunctionOrGlobalVar">; let Documentation = [Undocumented]; } @@ -778,6 +780,14 @@ def EmptyBases : InheritableAttr, TargetSpecificAttr<TargetMicrosoftCXXABI> { let Documentation = [EmptyBasesDocs]; } +def AllocSize : InheritableAttr { + let Spellings = [GCC<"alloc_size">]; + let Subjects = SubjectList<[Function]>; + let Args = [IntArgument<"ElemSizeParam">, IntArgument<"NumElemsParam", 1>]; + let TemplateDependent = 1; + let Documentation = [AllocSizeDocs]; +} + def EnableIf : InheritableAttr { let Spellings = [GNU<"enable_if">]; let Subjects = SubjectList<[Function]>; @@ -808,6 +818,11 @@ def FastCall : InheritableAttr { let Documentation = [FastCallDocs]; } +def RegCall : InheritableAttr { + let Spellings = [GCC<"regcall">, Keyword<"__regcall">]; + let Documentation = [RegCallDocs]; +} + def Final : InheritableAttr { let Spellings = [Keyword<"final">, Keyword<"sealed">]; let Accessors = [Accessor<"isSpelledAsSealed", [Keyword<"sealed">]>]; @@ -1024,6 +1039,12 @@ def NoDuplicate : InheritableAttr { let Documentation = [NoDuplicateDocs]; } +def Convergent : InheritableAttr { + let Spellings = [GNU<"convergent">, CXX11<"clang", "convergent">]; + let Subjects = SubjectList<[Function]>; + let Documentation = [ConvergentDocs]; +} + def NoInline : InheritableAttr { let Spellings = [GCC<"noinline">, Declspec<"noinline">]; let Subjects = SubjectList<[Function]>; @@ -1048,24 +1069,37 @@ def NoMips16 : InheritableAttr, TargetSpecificAttr<TargetMips> { // // FIXME: This provides a sub-optimal error message if you attempt to // use this in CUDA, since CUDA does not use the same terminology. -def AMDGPUNumVGPR : InheritableAttr { - let Spellings = [GNU<"amdgpu_num_vgpr">]; - let Args = [UnsignedArgument<"NumVGPR">]; - let Documentation = [AMDGPUNumVGPRDocs]; - -// FIXME: This should be for OpenCLKernelFunction, but is not to +// +// FIXME: SubjectList should be for OpenCLKernelFunction, but is not to // workaround needing to see kernel attribute before others to know if // this should be rejected on non-kernels. - let Subjects = SubjectList<[Function], ErrorDiag, - "ExpectedKernelFunction">; + +def AMDGPUFlatWorkGroupSize : InheritableAttr { + let Spellings = [GNU<"amdgpu_flat_work_group_size">]; + let Args = [UnsignedArgument<"Min">, UnsignedArgument<"Max">]; + let Documentation = [AMDGPUFlatWorkGroupSizeDocs]; + let Subjects = SubjectList<[Function], ErrorDiag, "ExpectedKernelFunction">; +} + +def AMDGPUWavesPerEU : InheritableAttr { + let Spellings = [GNU<"amdgpu_waves_per_eu">]; + let Args = [UnsignedArgument<"Min">, UnsignedArgument<"Max", 1>]; + let Documentation = [AMDGPUWavesPerEUDocs]; + let Subjects = SubjectList<[Function], ErrorDiag, "ExpectedKernelFunction">; } def AMDGPUNumSGPR : InheritableAttr { let Spellings = [GNU<"amdgpu_num_sgpr">]; let Args = [UnsignedArgument<"NumSGPR">]; - let Documentation = [AMDGPUNumSGPRDocs]; - let Subjects = SubjectList<[Function], ErrorDiag, - "ExpectedKernelFunction">; + let Documentation = [AMDGPUNumSGPRNumVGPRDocs]; + let Subjects = SubjectList<[Function], ErrorDiag, "ExpectedKernelFunction">; +} + +def AMDGPUNumVGPR : InheritableAttr { + let Spellings = [GNU<"amdgpu_num_vgpr">]; + let Args = [UnsignedArgument<"NumVGPR">]; + let Documentation = [AMDGPUNumSGPRNumVGPRDocs]; + let Subjects = SubjectList<[Function], ErrorDiag, "ExpectedKernelFunction">; } def NoSplitStack : InheritableAttr { @@ -1270,6 +1304,12 @@ def ObjCRootClass : InheritableAttr { let Documentation = [Undocumented]; } +def ObjCSubclassingRestricted : InheritableAttr { + let Spellings = [GNU<"objc_subclassing_restricted">]; + let Subjects = SubjectList<[ObjCInterface], ErrorDiag>; + let Documentation = [ObjCSubclassingRestrictedDocs]; +} + def ObjCExplicitProtocolImpl : InheritableAttr { let Spellings = [GNU<"objc_protocol_requires_explicit_implementation">]; let Subjects = SubjectList<[ObjCProtocol], ErrorDiag>; @@ -1380,6 +1420,15 @@ def ReqdWorkGroupSize : InheritableAttr { let Documentation = [Undocumented]; } +def RequireConstantInit : InheritableAttr { + let Spellings = [GNU<"require_constant_initialization">, + CXX11<"clang", "require_constant_initialization">]; + let Subjects = SubjectList<[GlobalVar], ErrorDiag, + "ExpectedStaticOrTLSVar">; + let Documentation = [RequireConstantInitDocs]; + let LangOpts = [CPlusPlus]; +} + def WorkGroupSizeHint : InheritableAttr { let Spellings = [GNU<"work_group_size_hint">]; let Args = [UnsignedArgument<"XDim">, @@ -1518,7 +1567,8 @@ def Target : InheritableAttr { def TransparentUnion : InheritableAttr { let Spellings = [GCC<"transparent_union">]; // let Subjects = SubjectList<[Record, TypedefName]>; - let Documentation = [Undocumented]; + let Documentation = [TransparentUnionDocs]; + let LangOpts = [COnly]; } def Unavailable : InheritableAttr { @@ -1574,9 +1624,11 @@ def Used : InheritableAttr { } def Uuid : InheritableAttr { - let Spellings = [Declspec<"uuid">]; + let Spellings = [Declspec<"uuid">, Microsoft<"uuid">]; let Args = [StringArgument<"Guid">]; -// let Subjects = SubjectList<[CXXRecord]>; + let Subjects = SubjectList<[Record, Enum], WarnDiag, "ExpectedEnumOrClass">; + // FIXME: Allow expressing logical AND for LangOpts. Our condition should be: + // CPlusPlus && (MicrosoftExt || Borland) let LangOpts = [MicrosoftExt, Borland]; let Documentation = [Undocumented]; } @@ -1680,7 +1732,8 @@ def X86ForceAlignArgPointer : InheritableAttr, TargetSpecificAttr<TargetX86> { def NoSanitize : InheritableAttr { let Spellings = [GNU<"no_sanitize">, CXX11<"clang", "no_sanitize">]; let Args = [VariadicStringArgument<"Sanitizers">]; - let Subjects = SubjectList<[Function, ObjCMethod], ErrorDiag>; + let Subjects = SubjectList<[Function, ObjCMethod, GlobalVar], ErrorDiag, + "ExpectedFunctionMethodOrGlobalVar">; let Documentation = [NoSanitizeDocs]; let AdditionalMembers = [{ SanitizerMask getMask() const { @@ -1702,7 +1755,8 @@ def NoSanitizeSpecific : InheritableAttr { GCC<"no_sanitize_address">, GCC<"no_sanitize_thread">, GNU<"no_sanitize_memory">]; - let Subjects = SubjectList<[Function], ErrorDiag>; + let Subjects = SubjectList<[Function, GlobalVar], ErrorDiag, + "ExpectedFunctionOrGlobalVar">; let Documentation = [NoSanitizeAddressDocs, NoSanitizeThreadDocs, NoSanitizeMemoryDocs]; let ASTNode = 0; |