symbol->declaration = declaration->symbol_next;
} else {
symbol->declaration = old_declaration;
- assert(old_declaration->symbol_next ==
- declaration->symbol_next);
}
} else {
declaration_t *iter_last = declaration;
- declaration_t *iter = declaration->next;
+ declaration_t *iter = declaration->symbol_next;
for( ; iter != NULL; iter_last = iter, iter = iter->symbol_next) {
/* replace an entry? */
if(iter->namespace == namespace) {
assert(iter_last != NULL);
iter_last->symbol_next = old_declaration;
- assert(old_declaration->symbol_next ==
- declaration->symbol_next);
+ old_declaration->symbol_next = iter->symbol_next;
break;
}
}
if(orig_type == NULL)
return;
+ expression_t *value = expression->value;
+ if(value->type == EXPR_REFERENCE) {
+ reference_expression_t *reference = (reference_expression_t*) value;
+ declaration_t *declaration = reference->declaration;
+ if(declaration != NULL) {
+ declaration->address_taken = 1;
+ }
+ }
+
expression->expression.datatype = make_pointer_type(orig_type, 0);
}