(root)/
gcc-13.2.0/
gcc/
testsuite/
jit.dg/
test-error-ctor-struct-wrong-field-obj.c
       1  /*
       2  
       3    Test that the proper error is triggered when we build a ctor
       4    for an struct type, but try to use a field object that was not
       5    used to create the struct type.
       6  
       7  */
       8  
       9  #include <stdlib.h>
      10  #include <stdio.h>
      11  
      12  #include "libgccjit.h"
      13  #include "harness.h"
      14  
      15  void
      16  create_code (gcc_jit_context *ctxt, void *user_data)
      17  {
      18    gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt,
      19      GCC_JIT_TYPE_INT);
      20  
      21    gcc_jit_field *b1 = gcc_jit_context_new_field (ctxt,
      22  						 0,
      23  						 int_type,
      24  						 "a");
      25    gcc_jit_field *b2 = gcc_jit_context_new_field (ctxt,
      26  						 0,
      27  						 int_type,
      28  						 "b");
      29    gcc_jit_field *b3 = gcc_jit_context_new_field (ctxt,
      30  						 0,
      31  						 int_type,
      32  						 "c");
      33    gcc_jit_field *b4 = gcc_jit_context_new_field (ctxt,
      34  						 0,
      35  						 int_type,
      36  						 "d");
      37    gcc_jit_field *b5 = gcc_jit_context_new_field (ctxt,
      38  						 0,
      39  						 int_type,
      40  						 "d");
      41    gcc_jit_field *fields_b[] = {b1, b2, b3, b4, b5};
      42  
      43    gcc_jit_type *struct_bar_type =
      44      gcc_jit_struct_as_type (
      45        gcc_jit_context_new_struct_type (ctxt,
      46  				       0,
      47  				       "bar",
      48  				       5,
      49  				       fields_b));
      50  
      51  
      52    gcc_jit_field *b44 = gcc_jit_context_new_field (ctxt,
      53  						  0,
      54  						  int_type,
      55  						  "c");
      56  
      57    gcc_jit_field *fields_ctor[] = {b1, b2, b44, b5};
      58    gcc_jit_rvalue *values[] = {0,0,0,0};
      59  
      60    gcc_jit_rvalue *ctor = gcc_jit_context_new_struct_constructor
      61      (ctxt, 0,
      62       struct_bar_type,
      63       4,
      64       fields_ctor,
      65       values);
      66  
      67    CHECK_VALUE (ctor, NULL);
      68  }
      69  
      70  void
      71  verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
      72  {
      73    /* Ensure that the bad API usage prevents the API giving a bogus
      74       result back.  */
      75    CHECK_VALUE (result, NULL);
      76  
      77    /* Verify that the correct error message was emitted. */
      78    CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt),
      79  		      "gcc_jit_context_new_struct_constructor: field object "
      80  		      "at index 2 (c), was not used when creating the "
      81  		      "struct bar");
      82    CHECK_STRING_VALUE (gcc_jit_context_get_last_error (ctxt),
      83  		      "gcc_jit_context_new_struct_constructor: field object "
      84  		      "at index 2 (c), was not used when creating the "
      85  		      "struct bar");
      86  }