X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=testprograms%2Fcall_str_example.c;h=57e677e9dcb5f2f74f536c3d2514a7666e811ed5;hb=80fadd53d5cf0feddf63f34d6306e45f8d5de717;hp=7c8f5e2d478d4cb6c4ab96cb7f04a590375a4548;hpb=a3a4f27fa76972a5aa4773b34ad83796eaf1fcfc;p=libfirm diff --git a/testprograms/call_str_example.c b/testprograms/call_str_example.c index 7c8f5e2d4..57e677e9d 100644 --- a/testprograms/call_str_example.c +++ b/testprograms/call_str_example.c @@ -27,6 +27,7 @@ int main(int argc, char **argv) type *owner; /* the class in which this method is defined */ type *proc_main; /* type information for the method main */ type *proc_called; /* type information for called method f */ + type *string_ptr; /* type for pointers to strings. */ entity *ent; /* represents this method as entity of owner */ ir_node *x, *const_str, *proc_ptr, *call; @@ -35,6 +36,10 @@ int main(int argc, char **argv) /* init library */ init_firm (); + string_ptr = new_type_pointer ( + id_from_str ("ptr_to_string", 13), + new_type_array (id_from_str ("char_arr", 8), 1, + new_type_primitive (id_from_str("char", 4), mode_c))); /* FIRM was designed for oo languages where all methods belong to a class. * For imperative languages like C we view a program as a large class containing * all functions of the program as methods in this class. This class is @@ -56,6 +61,7 @@ int main(int argc, char **argv) owner = get_glob_type(); proc_called = new_type_method(id_from_str(F_METHODNAME, strlen(F_METHODNAME)), F_NRARGS, F_NRES); + set_method_param_type(proc_called, 0, string_ptr); /* Make the entity for main needed for a correct ir_graph. */ #define ENTITYNAME "main" @@ -103,6 +109,8 @@ int main(int argc, char **argv) /* Now we can mature the end block as all it's predecessors are known. */ mature_block (get_irg_end_block(irg)); + finalize_cons (irg); + printf("Optimizing ...\n"); dead_node_elimination(irg);