1 /* This code is shared by various test-compile-to-*.c test cases
2 that ultimately generate a standalone executable
3 (all of them apart from test-compile-to-dynamic-library.c). */
6 create_code (gcc_jit_context
*ctxt
, void *user_data
)
8 /* Let's try to inject the equivalent of:
10 hello_world (const char *name)
13 printf ("hello from %s\n", name);
17 main (int argc, char **argv)
19 hello_world (argv[0]);
23 gcc_jit_type
*void_type
=
24 gcc_jit_context_get_type (ctxt
, GCC_JIT_TYPE_VOID
);
25 gcc_jit_type
*const_char_ptr_type
=
26 gcc_jit_context_get_type (ctxt
, GCC_JIT_TYPE_CONST_CHAR_PTR
);
27 gcc_jit_param
*param_name
=
28 gcc_jit_context_new_param (ctxt
, NULL
, const_char_ptr_type
, "name");
29 gcc_jit_function
*func
=
30 gcc_jit_context_new_function (ctxt
, NULL
,
31 GCC_JIT_FUNCTION_INTERNAL
,
37 gcc_jit_param
*param_format
=
38 gcc_jit_context_new_param (ctxt
, NULL
, const_char_ptr_type
, "format");
39 gcc_jit_function
*printf_func
=
40 gcc_jit_context_new_function (ctxt
, NULL
,
41 GCC_JIT_FUNCTION_IMPORTED
,
42 gcc_jit_context_get_type (
43 ctxt
, GCC_JIT_TYPE_INT
),
47 gcc_jit_rvalue
*args
[2];
48 args
[0] = gcc_jit_context_new_string_literal (ctxt
, "hello from %s\n");
49 args
[1] = gcc_jit_param_as_rvalue (param_name
);
51 gcc_jit_block
*block
= gcc_jit_function_new_block (func
, NULL
);
53 gcc_jit_block_add_comment (
57 gcc_jit_block_add_eval (
59 gcc_jit_context_new_call (ctxt
,
63 gcc_jit_block_end_with_void_return (block
, NULL
);
65 gcc_jit_type
*int_type
= gcc_jit_context_get_type (ctxt
, GCC_JIT_TYPE_INT
);
66 gcc_jit_param
*param_argc
=
67 gcc_jit_context_new_param (ctxt
, NULL
, int_type
, "argc");
68 gcc_jit_type
*char_ptr_ptr_type
=
69 gcc_jit_type_get_pointer (
70 gcc_jit_type_get_pointer (
71 gcc_jit_context_get_type (ctxt
, GCC_JIT_TYPE_CHAR
)));
72 gcc_jit_param
*param_argv
=
73 gcc_jit_context_new_param (ctxt
, NULL
, char_ptr_ptr_type
, "argv");
74 gcc_jit_param
*params
[2] = {param_argc
, param_argv
};
75 gcc_jit_function
*func_main
=
76 gcc_jit_context_new_function (ctxt
, NULL
,
77 GCC_JIT_FUNCTION_EXPORTED
,
82 block
= gcc_jit_function_new_block (func_main
, NULL
);
83 gcc_jit_rvalue
*zero
= gcc_jit_context_zero (ctxt
, int_type
);
84 args
[0] = gcc_jit_context_new_cast (
87 gcc_jit_lvalue_as_rvalue (
88 gcc_jit_context_new_array_access (
91 gcc_jit_param_as_rvalue (param_argv
),
94 gcc_jit_block_add_eval (
96 gcc_jit_context_new_call (ctxt
,
100 gcc_jit_block_end_with_return (block
, NULL
, zero
);