File tree Expand file tree Collapse file tree 3 files changed +42
-0
lines changed Expand file tree Collapse file tree 3 files changed +42
-0
lines changed Original file line number Diff line number Diff line change @@ -77,6 +77,9 @@ ofc_sema_dummy_arg_t* ofc_sema_dummy_arg_wrap_expr(
77
77
const ofc_sema_type_t * ofc_sema_dummy_arg_type (
78
78
const ofc_sema_dummy_arg_t * dummy_arg );
79
79
80
+ bool ofc_sema_dummy_arg_mark_used (
81
+ ofc_sema_dummy_arg_t * dummy_arg );
82
+
80
83
ofc_sema_dummy_arg_t * ofc_sema_dummy_arg_copy_replace (
81
84
const ofc_sema_dummy_arg_t * dummy_arg ,
82
85
const ofc_sema_decl_t * replace ,
Original file line number Diff line number Diff line change @@ -365,6 +365,37 @@ bool ofc_sema_dummy_arg_compare(
365
365
return false;
366
366
}
367
367
368
+ bool ofc_sema_dummy_arg_mark_used (
369
+ ofc_sema_dummy_arg_t * dummy_arg )
370
+ {
371
+ if (!dummy_arg )
372
+ return false;
373
+
374
+ switch (dummy_arg -> type )
375
+ {
376
+ case OFC_SEMA_DUMMY_ARG_EXPR :
377
+ if (dummy_arg -> expr -> type == OFC_SEMA_EXPR_LHS )
378
+ {
379
+ if (!ofc_sema_lhs_mark_used (
380
+ dummy_arg -> expr -> lhs , true, true))
381
+ return false;
382
+ }
383
+ break ;
384
+ case OFC_SEMA_DUMMY_ARG_EXTERNAL :
385
+ if (dummy_arg -> external -> decl )
386
+ {
387
+ if (!ofc_sema_decl_mark_used (
388
+ dummy_arg -> external -> decl , true, true))
389
+ return false;
390
+ }
391
+ break ;
392
+ default :
393
+ break ;
394
+ }
395
+
396
+ return true;
397
+ }
398
+
368
399
ofc_sema_dummy_arg_list_t * ofc_sema_dummy_arg_list_copy_replace (
369
400
const ofc_sema_dummy_arg_list_t * list ,
370
401
const ofc_sema_decl_t * replace ,
Original file line number Diff line number Diff line change @@ -98,6 +98,14 @@ ofc_sema_stmt_t* ofc_sema_stmt_call(
98
98
return NULL ;
99
99
}
100
100
101
+ /* We mark all dummy_arg as used, as we can't know if
102
+ they have been read or written to in the call */
103
+ if (!ofc_sema_dummy_arg_mark_used (dummy_arg ))
104
+ {
105
+ ofc_sema_dummy_arg_list_delete (args );
106
+ return NULL ;
107
+ }
108
+
101
109
if (!ofc_sema_dummy_arg_list_add (
102
110
args , dummy_arg ))
103
111
{
You can’t perform that action at this time.
0 commit comments