mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[LLVM-C] Miscellaneous Cleanups in DIBuilder Bindings
Summary: * rL328953 does not include bindings for LLVMDIBuilderCreateClassType and LLVMDIBuilderCreateBitFieldMemberType despite declaring their prototypes. Provide these bindings now. * Switch to more precise types with specific numeric limits matching the DIBuilder's C++ API. Reviewers: harlanhaskins, whitequark, deadalnix Reviewed By: whitequark Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D46168 llvm-svn: 331114
This commit is contained in:
parent
4f96d992a3
commit
4a25b275bb
@ -362,7 +362,7 @@ LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMMetadataRef *Elements,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
|
||||
unsigned NumElements, LLVMMetadataRef ClassTy);
|
||||
|
||||
/**
|
||||
@ -385,7 +385,7 @@ LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
|
||||
LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
|
||||
const char *UniqueId, size_t UniqueIdLen);
|
||||
|
||||
@ -400,8 +400,8 @@ LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
* \param NumSubscripts Number of subscripts.
|
||||
*/
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
unsigned AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
|
||||
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMMetadataRef *Subscripts,
|
||||
unsigned NumSubscripts);
|
||||
|
||||
@ -415,8 +415,8 @@ LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
* \param NumSubscripts Number of subscripts.
|
||||
*/
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
unsigned AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
|
||||
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMMetadataRef *Subscripts,
|
||||
unsigned NumSubscripts);
|
||||
|
||||
@ -441,7 +441,7 @@ LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name,
|
||||
*/
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
|
||||
size_t NameLen, unsigned SizeInBits,
|
||||
size_t NameLen, uint64_t SizeInBits,
|
||||
LLVMDWARFTypeEncoding Encoding);
|
||||
|
||||
/**
|
||||
@ -456,7 +456,7 @@ LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
|
||||
*/
|
||||
LLVMMetadataRef LLVMDIBuilderCreatePointerType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
|
||||
unsigned SizeInBits, unsigned AlignInBits, unsigned AddressSpace,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
|
||||
const char *Name, size_t NameLen);
|
||||
|
||||
/**
|
||||
@ -480,7 +480,7 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType(
|
||||
LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
|
||||
unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
|
||||
const char *UniqueId, size_t UniqueIdLen);
|
||||
@ -502,7 +502,7 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
LLVMMetadataRef LLVMDIBuilderCreateMemberType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNo,
|
||||
unsigned SizeInBits, unsigned AlignInBits, unsigned OffsetInBits,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
|
||||
LLVMDIFlags Flags, LLVMMetadataRef Ty);
|
||||
|
||||
/**
|
||||
@ -524,7 +524,7 @@ LLVMDIBuilderCreateStaticMemberType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
|
||||
unsigned AlignInBits);
|
||||
uint32_t AlignInBits);
|
||||
|
||||
/**
|
||||
* Create debugging information entry for a pointer to member.
|
||||
@ -539,8 +539,8 @@ LLVMMetadataRef
|
||||
LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef PointeeType,
|
||||
LLVMMetadataRef ClassType,
|
||||
unsigned SizeInBits,
|
||||
unsigned AlignInBits,
|
||||
uint64_t SizeInBits,
|
||||
uint32_t AlignInBits,
|
||||
LLVMDIFlags Flags);
|
||||
|
||||
/**
|
||||
@ -602,7 +602,7 @@ LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
|
||||
LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(
|
||||
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
||||
unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits,
|
||||
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
||||
const char *UniqueIdentifier, size_t UniqueIdentifierLen);
|
||||
|
||||
/**
|
||||
@ -626,7 +626,7 @@ LLVMMetadataRef
|
||||
LLVMDIBuilderCreateReplaceableCompositeType(
|
||||
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
||||
unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits,
|
||||
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
||||
LLVMDIFlags Flags, const char *UniqueIdentifier,
|
||||
size_t UniqueIdentifierLen);
|
||||
|
||||
@ -649,32 +649,41 @@ LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef Scope,
|
||||
const char *Name, size_t NameLen,
|
||||
LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits,
|
||||
unsigned OffsetInBits,
|
||||
unsigned StorageOffsetInBits,
|
||||
uint64_t SizeInBits,
|
||||
uint64_t OffsetInBits,
|
||||
uint64_t StorageOffsetInBits,
|
||||
LLVMDIFlags Flags, LLVMMetadataRef Type);
|
||||
|
||||
/**
|
||||
* Create debugging information entry for a class.
|
||||
* \param Scope Scope in which this class is defined.
|
||||
* \param Name class name.
|
||||
* \param File File where this member is defined.
|
||||
* \param LineNumber Line number.
|
||||
* \param SizeInBits Member size.
|
||||
* \param AlignInBits Member alignment.
|
||||
* \param OffsetInBits Member offset.
|
||||
* \param Flags Flags to encode member attribute, e.g. private
|
||||
* \param Elements class members.
|
||||
* \param NumElements Number of class elements.
|
||||
* \param DerivedFrom Debug info of the base class of this type.
|
||||
* \param TemplateParamsNode Template type parameters.
|
||||
* \param Scope Scope in which this class is defined.
|
||||
* \param Name Class name.
|
||||
* \param NameLen The length of the C string passed to \c Name.
|
||||
* \param File File where this member is defined.
|
||||
* \param LineNumber Line number.
|
||||
* \param SizeInBits Member size.
|
||||
* \param AlignInBits Member alignment.
|
||||
* \param OffsetInBits Member offset.
|
||||
* \param Flags Flags to encode member attribute, e.g. private.
|
||||
* \param DerivedFrom Debug info of the base class of this type.
|
||||
* \param Elements Class members.
|
||||
* \param NumElements Number of class elements.
|
||||
* \param VTableHolder Debug info of the base class that contains vtable
|
||||
* for this type. This is used in
|
||||
* DW_AT_containing_type. See DWARF documentation
|
||||
* for more info.
|
||||
* \param TemplateParamsNode Template type parameters.
|
||||
* \param UniqueIdentifier A unique identifier for the type.
|
||||
* \param UniqueIdentifierLen Length of the unique identifier.
|
||||
*/
|
||||
LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef Scope, const char *Name, size_t NameLen,
|
||||
LLVMMetadataRef File, unsigned LineNumber, unsigned SizeInBits,
|
||||
unsigned AlignInBits, unsigned OffsetInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
|
||||
uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef DerivedFrom,
|
||||
LLVMMetadataRef *Elements, unsigned NumElements,
|
||||
LLVMMetadataRef DerivedFrom, LLVMMetadataRef TemplateParamsNode);
|
||||
LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
|
||||
const char *UniqueIdentifier, size_t UniqueIdentifierLen);
|
||||
|
||||
/**
|
||||
* Create a new DIType* with "artificial" flag set.
|
||||
|
@ -839,7 +839,7 @@ LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
|
||||
LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMMetadataRef *Elements,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
|
||||
unsigned NumElements, LLVMMetadataRef ClassTy) {
|
||||
auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements),
|
||||
NumElements});
|
||||
@ -851,7 +851,7 @@ return wrap(unwrap(Builder)->createEnumerationType(
|
||||
LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
|
||||
const char *UniqueId, size_t UniqueIdLen) {
|
||||
auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements),
|
||||
@ -864,8 +864,8 @@ LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
unsigned AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
|
||||
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMMetadataRef *Subscripts,
|
||||
unsigned NumSubscripts) {
|
||||
auto Subs = unwrap(Builder)->getOrCreateArray({unwrap(Subscripts),
|
||||
@ -875,8 +875,8 @@ LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
}
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
unsigned AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
|
||||
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
||||
LLVMMetadataRef *Subscripts,
|
||||
unsigned NumSubscripts) {
|
||||
auto Subs = unwrap(Builder)->getOrCreateArray({unwrap(Subscripts),
|
||||
@ -887,7 +887,7 @@ LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size,
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
|
||||
size_t NameLen, unsigned SizeInBits,
|
||||
size_t NameLen, uint64_t SizeInBits,
|
||||
LLVMDWARFTypeEncoding Encoding) {
|
||||
return wrap(unwrap(Builder)->createBasicType({Name, NameLen},
|
||||
SizeInBits, Encoding));
|
||||
@ -895,7 +895,7 @@ LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
|
||||
|
||||
LLVMMetadataRef LLVMDIBuilderCreatePointerType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
|
||||
unsigned SizeInBits, unsigned AlignInBits, unsigned AddressSpace,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
|
||||
const char *Name, size_t NameLen) {
|
||||
return wrap(unwrap(Builder)->createPointerType(unwrapDI<DIType>(PointeeTy),
|
||||
SizeInBits, AlignInBits,
|
||||
@ -905,7 +905,7 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType(
|
||||
LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
|
||||
unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
|
||||
const char *UniqueId, size_t UniqueIdLen) {
|
||||
@ -920,8 +920,8 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
|
||||
LLVMMetadataRef LLVMDIBuilderCreateMemberType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNo, unsigned SizeInBits,
|
||||
unsigned AlignInBits, unsigned OffsetInBits, LLVMDIFlags Flags,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNo, uint64_t SizeInBits,
|
||||
uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef Ty) {
|
||||
return wrap(unwrap(Builder)->createMemberType(unwrapDI<DIScope>(Scope),
|
||||
{Name, NameLen}, unwrapDI<DIFile>(File), LineNo, SizeInBits, AlignInBits,
|
||||
@ -939,7 +939,7 @@ LLVMDIBuilderCreateStaticMemberType(
|
||||
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
||||
LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
|
||||
unsigned AlignInBits) {
|
||||
uint32_t AlignInBits) {
|
||||
return wrap(unwrap(Builder)->createStaticMemberType(
|
||||
unwrapDI<DIScope>(Scope), {Name, NameLen},
|
||||
unwrapDI<DIFile>(File), LineNumber, unwrapDI<DIType>(Type),
|
||||
@ -957,7 +957,7 @@ LLVMMetadataRef
|
||||
LLVMDIBuilderCreateForwardDecl(
|
||||
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
||||
unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits,
|
||||
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
||||
const char *UniqueIdentifier, size_t UniqueIdentifierLen) {
|
||||
return wrap(unwrap(Builder)->createForwardDecl(
|
||||
Tag, {Name, NameLen}, unwrapDI<DIScope>(Scope),
|
||||
@ -969,7 +969,7 @@ LLVMMetadataRef
|
||||
LLVMDIBuilderCreateReplaceableCompositeType(
|
||||
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
||||
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
||||
unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits,
|
||||
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
||||
LLVMDIFlags Flags, const char *UniqueIdentifier,
|
||||
size_t UniqueIdentifierLen) {
|
||||
return wrap(unwrap(Builder)->createReplaceableCompositeType(
|
||||
@ -1002,8 +1002,8 @@ LLVMMetadataRef
|
||||
LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef PointeeType,
|
||||
LLVMMetadataRef ClassType,
|
||||
unsigned SizeInBits,
|
||||
unsigned AlignInBits,
|
||||
uint64_t SizeInBits,
|
||||
uint32_t AlignInBits,
|
||||
LLVMDIFlags Flags) {
|
||||
return wrap(unwrap(Builder)->createMemberPointerType(
|
||||
unwrapDI<DIType>(PointeeType),
|
||||
@ -1011,6 +1011,42 @@ LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
|
||||
map_from_llvmDIFlags(Flags)));
|
||||
}
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef Scope,
|
||||
const char *Name, size_t NameLen,
|
||||
LLVMMetadataRef File, unsigned LineNumber,
|
||||
uint64_t SizeInBits,
|
||||
uint64_t OffsetInBits,
|
||||
uint64_t StorageOffsetInBits,
|
||||
LLVMDIFlags Flags, LLVMMetadataRef Type) {
|
||||
return wrap(unwrap(Builder)->createBitFieldMemberType(
|
||||
unwrapDI<DIScope>(Scope), {Name, NameLen},
|
||||
unwrapDI<DIFile>(File), LineNumber,
|
||||
SizeInBits, OffsetInBits, StorageOffsetInBits,
|
||||
map_from_llvmDIFlags(Flags), unwrapDI<DIType>(Type)));
|
||||
}
|
||||
|
||||
LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef Scope, const char *Name, size_t NameLen,
|
||||
LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
|
||||
uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
|
||||
LLVMMetadataRef DerivedFrom,
|
||||
LLVMMetadataRef *Elements, unsigned NumElements,
|
||||
LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
|
||||
const char *UniqueIdentifier, size_t UniqueIdentifierLen) {
|
||||
auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements),
|
||||
NumElements});
|
||||
return wrap(unwrap(Builder)->createClassType(
|
||||
unwrapDI<DIScope>(Scope), {Name, NameLen},
|
||||
unwrapDI<DIFile>(File), LineNumber,
|
||||
SizeInBits, AlignInBits, OffsetInBits,
|
||||
map_from_llvmDIFlags(Flags), unwrapDI<DIType>(DerivedFrom),
|
||||
Elts, unwrapDI<DIType>(VTableHolder),
|
||||
unwrapDI<MDNode>(TemplateParamsNode),
|
||||
{UniqueIdentifier, UniqueIdentifierLen}));
|
||||
}
|
||||
|
||||
LLVMMetadataRef
|
||||
LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
|
||||
LLVMMetadataRef Type) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user