/* Test that the proper error is triggered when we build a ctor for an struct type, but has the type wrong on a field. */ #include #include #include "libgccjit.h" #include "harness.h" void create_code (gcc_jit_context *ctxt, void *user_data) { gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); gcc_jit_type *float_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT); gcc_jit_field *b1 = gcc_jit_context_new_field (ctxt, 0, int_type, "a"); gcc_jit_field *b2 = gcc_jit_context_new_field (ctxt, 0, int_type, "b"); gcc_jit_field *b3 = gcc_jit_context_new_field (ctxt, 0, int_type, "c"); gcc_jit_field *fields_b[] = {b1, b2, b3}; gcc_jit_type *struct_bar_type = gcc_jit_struct_as_type ( gcc_jit_context_new_struct_type (ctxt, 0, "bar", 3, fields_b)); gcc_jit_rvalue *frv = gcc_jit_context_new_rvalue_from_double (ctxt, float_type, 12); gcc_jit_field *fields_ctor[] = {b2}; gcc_jit_rvalue *values[] = {frv}; gcc_jit_rvalue *ctor = gcc_jit_context_new_struct_constructor (ctxt, 0, struct_bar_type, 1, fields_ctor, values); CHECK_VALUE (ctor, NULL); } void verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) { /* Ensure that the bad API usage prevents the API giving a bogus result back. */ CHECK_VALUE (result, NULL); /* Verify that the correct error message was emitted. */ CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt), "gcc_jit_context_new_struct_constructor: value and " "field not the same unqualified type, at index 0 " "(struct bar.b: int)(value type: float)"); CHECK_STRING_VALUE (gcc_jit_context_get_last_error (ctxt), "gcc_jit_context_new_struct_constructor: value and " "field not the same unqualified type, at index 0 " "(struct bar.b: int)(value type: float)"); }