/* Essentially this test checks that debug info are generated for globals locals and functions, including type info. The comment bellow is used as fake code (does not affect the test, use for manual debugging). */ /* int a_global_for_test_debuginfo; int main (int argc, char **argv) { int a_local_for_test_debuginfo = 2; return a_global_for_test_debuginfo + a_local_for_test_debuginfo; } */ #include "libgccjit.h" /* We don't want set_options() in harness.h to set -O3 so our little local is optimized away. */ #define TEST_ESCHEWS_SET_OPTIONS static void set_options (gcc_jit_context *ctxt, const char *argv0) { gcc_jit_context_set_bool_option(ctxt, GCC_JIT_BOOL_OPTION_DEBUGINFO, 1); } #define TEST_COMPILING_TO_FILE #define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_EXECUTABLE #define OUTPUT_FILENAME "jit-debuginfo.o" #include "harness.h" #define LOC(row, col) gcc_jit_context_new_location(ctxt, "test-debuginfo.c", row, col) void create_code (gcc_jit_context *ctxt, void* p) { gcc_jit_type *int_type = gcc_jit_context_get_type(ctxt, GCC_JIT_TYPE_INT); gcc_jit_lvalue *bar = gcc_jit_context_new_global(ctxt, LOC(5,1), GCC_JIT_GLOBAL_EXPORTED, int_type, "a_global_for_test_debuginfo"); gcc_jit_param *argc_para = gcc_jit_context_new_param(ctxt, LOC(6,15), int_type, "argc"); gcc_jit_param *argv_para = gcc_jit_context_new_param(ctxt, LOC(6,28), gcc_jit_type_get_pointer( gcc_jit_type_get_pointer( gcc_jit_context_get_type(ctxt, GCC_JIT_TYPE_CHAR))), "argc"); gcc_jit_param *params[] = {argc_para, argv_para}; gcc_jit_function *foo_fn = gcc_jit_context_new_function(ctxt, LOC(6,5), GCC_JIT_FUNCTION_EXPORTED, int_type, "main", 2, params, 0); gcc_jit_block *start_block = gcc_jit_function_new_block(foo_fn, "start_block"); gcc_jit_lvalue *a = gcc_jit_function_new_local(foo_fn, LOC(8,5), int_type, "a_local_for_test_debuginfo"); gcc_jit_block_add_assignment(start_block, LOC(8,36), a, gcc_jit_context_new_rvalue_from_int(ctxt, int_type, 2)); gcc_jit_rvalue *add = gcc_jit_context_new_binary_op(ctxt, LOC(9,40), GCC_JIT_BINARY_OP_PLUS, int_type, gcc_jit_lvalue_as_rvalue(a), gcc_jit_lvalue_as_rvalue(bar)); gcc_jit_block_end_with_return(start_block, LOC(9,5), add); } #undef LOC /* jit-check-debug-info fires up gdb and checks that the variables have debug info */ /* { dg-final { jit-check-debug-info "jit-debuginfo.o" {"info variables\n"} "int\\s+a_global_for_test_debuginfo;" } } */ /* { dg-final { jit-check-debug-info "jit-debuginfo.o" {"pt main\n"} "int\\s*\\(\\s*int\\s*,\\s*char\\s*\\*\\*\\s*\\)"} } */ /* { dg-final { jit-check-debug-info "jit-debuginfo.o" {"start\n" "info locals\n"} "a_local_for_test_debuginfo"} } */ /* { dg-final { jit-check-debug-info "jit-debuginfo.o" {"start\n" "pt a_local_for_test_debuginfo\n"} "int"} } */