Add clang_CXXMethod_isDeleted function
Adds a function to check if a method has been deleted by copy-pasting the existing implementation of clang_CXXMethod_isDefaulted and changing it to call CXXMethod::isDeleted() instead. Differential Revision: https://reviews.llvm.org/D133924
This commit is contained in:
parent
9f13b9346b
commit
bc14ed7de0
@ -1473,6 +1473,12 @@ class Cursor(Structure):
|
||||
"""
|
||||
return conf.lib.clang_CXXMethod_isDefaulted(self)
|
||||
|
||||
def is_deleted_method(self):
|
||||
"""Returns True if the cursor refers to a C++ member function or member
|
||||
function template that is declared '= delete'.
|
||||
"""
|
||||
return conf.lib.clang_CXXMethod_isDeleted(self)
|
||||
|
||||
def is_mutable_field(self):
|
||||
"""Returns True if the cursor refers to a C++ field that is declared
|
||||
'mutable'.
|
||||
@ -3426,6 +3432,10 @@ functionList = [
|
||||
[Cursor],
|
||||
bool),
|
||||
|
||||
("clang_CXXMethod_isDeleted",
|
||||
[Cursor],
|
||||
bool),
|
||||
|
||||
("clang_CXXMethod_isPureVirtual",
|
||||
[Cursor],
|
||||
bool),
|
||||
|
@ -398,6 +398,8 @@ libclang
|
||||
the behavior of ``QualType::getUnqualifiedType`` for ``CXType``.
|
||||
- Introduced the new function ``clang_getNonReferenceType``, which mimics
|
||||
the behavior of ``QualType::getNonReferenceType`` for ``CXType``.
|
||||
- Introduced the new function ``clang_CXXMethod_isDeleted``, which queries
|
||||
whether the method is declared ``= delete``.
|
||||
|
||||
Static Analyzer
|
||||
---------------
|
||||
|
@ -4924,6 +4924,11 @@ CINDEX_LINKAGE unsigned clang_CXXField_isMutable(CXCursor C);
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_CXXMethod_isDefaulted(CXCursor C);
|
||||
|
||||
/**
|
||||
* Determine if a C++ method is declared '= delete'.
|
||||
*/
|
||||
CINDEX_LINKAGE unsigned clang_CXXMethod_isDeleted(CXCursor C);
|
||||
|
||||
/**
|
||||
* Determine if a C++ member function or member function template is
|
||||
* pure virtual.
|
||||
|
@ -9,5 +9,5 @@ struct Foo {
|
||||
// RUN: c-index-test -test-print-type --std=c++11 %s | FileCheck %s
|
||||
// CHECK: FunctionDecl=foo:1:6 (unavailable) [type=void ()] [typekind=FunctionProto] [resulttype=void] [resulttypekind=Void] [isPOD=0]
|
||||
// CHECK: StructDecl=Foo:3:8 (Definition) [type=Foo] [typekind=Record] [isPOD=1]
|
||||
// CHECK: CXXMethod=foo:4:7 (unavailable) [type=int (){{.*}}] [typekind=FunctionProto] [resulttype=int] [resulttypekind=Int] [isPOD=0]
|
||||
// CHECK: CXXConstructor=Foo:5:3 (unavailable) (default constructor) [type=void (){{.*}}] [typekind=FunctionProto] [resulttype=void] [resulttypekind=Void] [isPOD=0]
|
||||
// CHECK: CXXMethod=foo:4:7 (unavailable) (deleted) [type=int (){{.*}}] [typekind=FunctionProto] [resulttype=int] [resulttypekind=Int] [isPOD=0]
|
||||
// CHECK: CXXConstructor=Foo:5:3 (unavailable) (default constructor) (deleted) [type=void (){{.*}}] [typekind=FunctionProto] [resulttype=void] [resulttypekind=Void] [isPOD=0]
|
||||
|
14
clang/test/Index/deletion.cpp
Normal file
14
clang/test/Index/deletion.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
struct Foo {
|
||||
int foo() = delete;
|
||||
int bar();
|
||||
Foo() = delete;
|
||||
Foo(int);
|
||||
};
|
||||
|
||||
|
||||
// RUN: c-index-test -test-print-type --std=c++11 %s | FileCheck %s
|
||||
// CHECK: StructDecl=Foo:1:8 (Definition) [type=Foo] [typekind=Record] [isPOD=1]
|
||||
// CHECK: CXXMethod=foo:2:7 (unavailable) (deleted) [type=int (){{.*}}] [typekind=FunctionProto] [resulttype=int] [resulttypekind=Int] [isPOD=0]
|
||||
// CHECK: CXXMethod=bar:3:7 [type=int (){{.*}}] [typekind=FunctionProto] [resulttype=int] [resulttypekind=Int] [isPOD=0]
|
||||
// CHECK: CXXConstructor=Foo:4:3 (unavailable) (default constructor) (deleted) [type=void (){{.*}}] [typekind=FunctionProto] [resulttype=void] [resulttypekind=Void] [isPOD=0]
|
||||
// CHECK: CXXConstructor=Foo:5:3 (converting constructor) [type=void (int){{.*}}] [typekind=FunctionProto] [resulttype=void] [resulttypekind=Void] [args= [int] [Int]] [isPOD=0]
|
@ -900,6 +900,8 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {
|
||||
printf(" (mutable)");
|
||||
if (clang_CXXMethod_isDefaulted(Cursor))
|
||||
printf(" (defaulted)");
|
||||
if (clang_CXXMethod_isDeleted(Cursor))
|
||||
printf(" (deleted)");
|
||||
if (clang_CXXMethod_isStatic(Cursor))
|
||||
printf(" (static)");
|
||||
if (clang_CXXMethod_isVirtual(Cursor))
|
||||
|
@ -8861,6 +8861,16 @@ unsigned clang_CXXMethod_isDefaulted(CXCursor C) {
|
||||
return (Method && Method->isDefaulted()) ? 1 : 0;
|
||||
}
|
||||
|
||||
unsigned clang_CXXMethod_isDeleted(CXCursor C) {
|
||||
if (!clang_isDeclaration(C.kind))
|
||||
return 0;
|
||||
|
||||
const Decl *D = cxcursor::getCursorDecl(C);
|
||||
const CXXMethodDecl *Method =
|
||||
D ? dyn_cast_if_present<CXXMethodDecl>(D->getAsFunction()) : nullptr;
|
||||
return (Method && Method->isDeleted()) ? 1 : 0;
|
||||
}
|
||||
|
||||
unsigned clang_CXXMethod_isStatic(CXCursor C) {
|
||||
if (!clang_isDeclaration(C.kind))
|
||||
return 0;
|
||||
|
@ -409,6 +409,7 @@ LLVM_16 {
|
||||
global:
|
||||
clang_getUnqualifiedType;
|
||||
clang_getNonReferenceType;
|
||||
clang_CXXMethod_isDeleted;
|
||||
};
|
||||
|
||||
# Example of how to add a new symbol version entry. If you do add a new symbol
|
||||
|
Loading…
x
Reference in New Issue
Block a user