diff --git a/source/compiler/sc2.c b/source/compiler/sc2.c index 7e87a49..866d622 100644 --- a/source/compiler/sc2.c +++ b/source/compiler/sc2.c @@ -1238,9 +1238,13 @@ static int command(void) sc_tabsize=(int)val; } else if (strcmp(str,"align")==0) { sc_alignnext=TRUE; - } else if (strcmp(str,"unused")==0) { + } else if (strcmp(str,"unused")==0 || strcmp(str,"unread")==0 || strcmp(str,"unwritten")==0) { char name[sNAMEMAX+1]; int i,comma; + /* mark as read if the pragma wasn't `unwritten` */ + int read = str[2] == 'w' ? 0 : uREAD; + /* mark as written if the pragma wasn't `unread` */ + int write = str[2] == 'r' ? 0 : uWRITTEN; symbol *sym; do { /* get the name */ @@ -1254,10 +1258,11 @@ static int command(void) if (sym==NULL) sym=findglb(name,sSTATEVAR); if (sym!=NULL) { - sym->usage |= uREAD; + /* mark as read if the pragma wasn't `unwritten` */ + sym->usage |= read; if (sym->ident==iVARIABLE || sym->ident==iREFERENCE || sym->ident==iARRAY || sym->ident==iREFARRAY) - sym->usage |= uWRITTEN; + sym->usage |= write; } else { error(17,name); /* undefined symbol */ } /* if */ diff --git a/source/compiler/tests/gh_373.meta b/source/compiler/tests/gh_373.meta new file mode 100644 index 0000000..bfdf252 --- /dev/null +++ b/source/compiler/tests/gh_373.meta @@ -0,0 +1,5 @@ +{ + 'test_type': 'output_check', + 'errors': """ + """ +} diff --git a/source/compiler/tests/gh_373.pwn b/source/compiler/tests/gh_373.pwn new file mode 100644 index 0000000..3c54e5c --- /dev/null +++ b/source/compiler/tests/gh_373.pwn @@ -0,0 +1,11 @@ +Func(a[]) +{ + #pragma unwritten a + return a[0]; +} + +main() { + new a[2]; + Func(a); +} +