Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
thradams committed Apr 23, 2024
1 parent 6eb39c4 commit 34396c4
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 10 deletions.
26 changes: 19 additions & 7 deletions src/file.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
#pragma ownership enable
#pragma nullable enable

struct X {
char *_Owner name;
void free(void* _Owner _Opt ptr);
char* _Owner _Opt strdup(char const* _String);

struct user
{
int id;
char* _Owner name;
};

struct X * _Owner f();
int main(){
struct X * _Owner p = f();
void * _Owner p2 = p;
}
void set_id(struct user* p, int id){}

int main()
{
_Opt struct user user = {};
user.name = strdup("a");
char* _Owner _Opt name = user.name;
static_debug(user);
free(name);
//if (user.name)
set_id(&user, 1); //warning: object 'user.name' was moved
}
9 changes: 6 additions & 3 deletions src/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,18 @@ bool is_moved(enum object_state e)

bool is_not_null(enum object_state e)
{
return (!(e & OBJECT_STATE_NULL) &&
(e & OBJECT_STATE_NOT_NULL));
return (
!(e & OBJECT_STATE_NULL) &&
((e & OBJECT_STATE_NOT_NULL) || (e & OBJECT_STATE_MOVED))
);
}


bool is_null(enum object_state e)
{
return ((e & OBJECT_STATE_NULL) &&
!(e & OBJECT_STATE_NOT_NULL));
!(e & OBJECT_STATE_NOT_NULL) &&
!(e & OBJECT_STATE_MOVED));
}

bool is_zero(enum object_state e)
Expand Down
23 changes: 23 additions & 0 deletions tests/unit-tests/test_17900.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma ownership enable
#pragma nullable enable

void free(void* _Owner _Opt ptr);
char* _Owner _Opt strdup(char const* _String);

struct user
{
int id;
char* _Owner name;
};

void set_id(struct user* p, int id){}

int main()
{
_Opt struct user user = {};
user.name = strdup("a");
char* _Owner _Opt name = user.name;
free(name);
if (user.name)
set_id(&user, 1); //warning: object 'user.name' was moved
}

0 comments on commit 34396c4

Please sign in to comment.