From f4469e5aa2771ed14ffaa478b9b593503dfd732f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 4 Aug 2015 18:43:41 +0300 Subject: Ignore variables if FIELD_DECL have attribute nonnullpointer. --- src/analysis/expression.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index fbb86d8..e64026c 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -152,6 +152,12 @@ std::string getComponentRefVariable(Node *node) FieldDeclNode *fieldDecl = static_cast(field); if (fieldDecl->fieldType != POINTER_TYPE) return str; + if (findTreeListPurpose(static_cast( + skipNop(fieldDecl->attribute)), + "nonnullpointer")) + { + return str; + } IndirectRefNode *indirect = static_cast(object); Node *ref = skipNop(indirect->ref); if (ref && !isValidVar(ref->label)) @@ -204,6 +210,12 @@ std::vector getComponentRefParts(Node *node) { FieldDeclNode *fieldDecl = static_cast(field); IndirectRefNode *indirect = static_cast(object); + if (findTreeListPurpose(static_cast( + skipNop(fieldDecl->attribute)), + "nonnullpointer")) + { + return str; + } Node *ref = skipNop(indirect->ref); if (ref && !isValidVar(ref->label)) return str; @@ -254,9 +266,15 @@ std::vector getComponentRefLeftParts(Node *node) if (object == INDIRECT_REF && field == FIELD_DECL) { -// FieldDeclNode *fieldDecl = static_cast(field); + FieldDeclNode *fieldDecl = static_cast(field); // if (fieldDecl->fieldType != POINTER_TYPE) // return str; + if (findTreeListPurpose(static_cast( + skipNop(fieldDecl->attribute)), + "nonnullpointer")) + { + return str; + } IndirectRefNode *indirect = static_cast(object); Node *ref = skipNop(indirect->ref); if (ref && !isValidVar(ref->label)) -- cgit v1.2.3-70-g09d2