Export (0) Print
Expand All

C6507

warning C6507: annotation conflict: Null property at Deref=0 on a post condition must be a subset of the Null property on the precondition

This warning indicates that conflicting values for the Null property were used in Pre- and Post- conditions at default dereference level 0. In this case the Pre condition specifies Null=No, and the Post condition specifies Null=Yes. Because the parameter is not passed by reference it cannot be changed; therefore, the Post condition cannot use Null=Yes.

The following code generates this warning because Deref=0 applies to the pointer and not the pointer to character:

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ([SA_Pre(Null=SA_No)] [SA_Post(Null=SA_Yes)] char *pc); 

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f([Pre(Null=No)] [Post(Null=Yes)] char *pc); 

To correct this warning, either modify the Pre attribute or use double indirection if you want to change the pointer that points to the characters, as shown in the following code:

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f1 ([SA_Pre(Null=SA_Maybe)] [SA_Post(Null=SA_Yes)] char *pc); 
// or
void f2 ([SA_Pre(Deref=1, Null=SA_No)] [SA_Post(Null=SA_Yes)] char **pc);

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f1([Pre(Null=Maybe)] [Post(Null=Yes)] char *pc);
// or 
void f2 ([Pre(Deref=1, Null=No)] [Post(Null=Yes)] char **pc);

It is valid to specify Pre ( Null=Maybe ) and Post( Null=No ). This is useful for functions that might throw exceptions if the pointer is null:

Community Additions

ADD
Show:
© 2014 Microsoft