162 } else {
163 arg = get_argument_from_call_expr(call->args, param);
164 if (!arg)
165 return;
166 name = get_variable_from_key(arg, key, &sym);
167 }
168 if (!name || !sym)
169 goto free;
170
171 set_state(my_id, name, sym, &nospec);
172 free:
173 free_string(name);
174 }
175
176 static int is_nospec_asm(struct statement *stmt)
177 {
178 char *macro;
179
180 if (!stmt || stmt->type != STMT_ASM)
181 return 0;
182 macro = get_macro_name(stmt->asm_string->pos);
183 if (!macro || strcmp(macro, "CALL_NOSPEC") != 0)
184 return 0;
185 return 1;
186 }
187
188 static void match_asm(struct statement *stmt)
189 {
190 if (is_nospec_asm(stmt))
191 in_nospec_stmt = true;
192 }
193
194 static void match_after_nospec_asm(struct statement *stmt)
195 {
196 in_nospec_stmt = false;
197 }
198
199 static void mark_user_data_as_nospec(void)
200 {
201 struct stree *stree;
|
162 } else {
163 arg = get_argument_from_call_expr(call->args, param);
164 if (!arg)
165 return;
166 name = get_variable_from_key(arg, key, &sym);
167 }
168 if (!name || !sym)
169 goto free;
170
171 set_state(my_id, name, sym, &nospec);
172 free:
173 free_string(name);
174 }
175
176 static int is_nospec_asm(struct statement *stmt)
177 {
178 char *macro;
179
180 if (!stmt || stmt->type != STMT_ASM)
181 return 0;
182 if (!stmt->asm_string)
183 return 0;
184 macro = get_macro_name(stmt->asm_string->pos);
185 if (!macro || strcmp(macro, "CALL_NOSPEC") != 0)
186 return 0;
187 return 1;
188 }
189
190 static void match_asm(struct statement *stmt)
191 {
192 if (is_nospec_asm(stmt))
193 in_nospec_stmt = true;
194 }
195
196 static void match_after_nospec_asm(struct statement *stmt)
197 {
198 in_nospec_stmt = false;
199 }
200
201 static void mark_user_data_as_nospec(void)
202 {
203 struct stree *stree;
|