annotate gcc/testsuite/jit.dg/test-long-names.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Test of using the API with very long names. */
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 #include <stdlib.h>
kono
parents:
diff changeset
4 #include <stdio.h>
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #include "libgccjit.h"
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 #include "harness.h"
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 /* 65KB */
kono
parents:
diff changeset
11 #define NAME_LENGTH (65 * 1024)
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 static struct long_names
kono
parents:
diff changeset
14 {
kono
parents:
diff changeset
15 char struct_name[NAME_LENGTH];
kono
parents:
diff changeset
16 char fn_name[NAME_LENGTH];
kono
parents:
diff changeset
17 char local_name[NAME_LENGTH];
kono
parents:
diff changeset
18 char block_name[NAME_LENGTH];
kono
parents:
diff changeset
19 } long_names;
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 static void
kono
parents:
diff changeset
22 populate_name (const char *prefix, char *buffer)
kono
parents:
diff changeset
23 {
kono
parents:
diff changeset
24 int i;
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 /* Begin with the given prefix: */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
27 sprintf (buffer, "%s", prefix);
111
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 /* Populate the rest of the buffer with 0123456789 repeatedly: */
kono
parents:
diff changeset
30 for (i = strlen (prefix); i < NAME_LENGTH - 1; i++)
kono
parents:
diff changeset
31 buffer[i] = '0' + (i % 10);
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 /* NIL-terminate the buffer: */
kono
parents:
diff changeset
34 buffer[NAME_LENGTH - 1] = '\0';
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 static void
kono
parents:
diff changeset
38 populate_names (void)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 populate_name ("struct_", long_names.struct_name);
kono
parents:
diff changeset
41 populate_name ("test_fn_", long_names.fn_name);
kono
parents:
diff changeset
42 populate_name ("local_", long_names.local_name);
kono
parents:
diff changeset
43 populate_name ("block_", long_names.block_name);
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 void
kono
parents:
diff changeset
47 create_code (gcc_jit_context *ctxt, void *user_data)
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 /* Where "ETC" is a very long suffix, let's try to inject the
kono
parents:
diff changeset
50 equivalent of:
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 struct struct_ETC;
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 int
kono
parents:
diff changeset
55 test_fn_ETC ()
kono
parents:
diff changeset
56 {
kono
parents:
diff changeset
57 int local_ETC;
kono
parents:
diff changeset
58 local_ETC = 42;
kono
parents:
diff changeset
59 return local_ETC;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 to verify that the API copes with such long names. */
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 populate_names ();
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 gcc_jit_type *int_type =
kono
parents:
diff changeset
67 gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 /* We don't yet use this struct. */
kono
parents:
diff changeset
70 (void)gcc_jit_context_new_opaque_struct (ctxt, NULL,
kono
parents:
diff changeset
71 long_names.struct_name);
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 gcc_jit_function *test_fn =
kono
parents:
diff changeset
74 gcc_jit_context_new_function (ctxt, NULL,
kono
parents:
diff changeset
75 GCC_JIT_FUNCTION_EXPORTED,
kono
parents:
diff changeset
76 int_type,
kono
parents:
diff changeset
77 long_names.fn_name,
kono
parents:
diff changeset
78 0, NULL,
kono
parents:
diff changeset
79 0);
kono
parents:
diff changeset
80 gcc_jit_lvalue *local =
kono
parents:
diff changeset
81 gcc_jit_function_new_local (test_fn,
kono
parents:
diff changeset
82 NULL,
kono
parents:
diff changeset
83 int_type,
kono
parents:
diff changeset
84 long_names.local_name);
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 gcc_jit_block *block =
kono
parents:
diff changeset
87 gcc_jit_function_new_block (test_fn, long_names.block_name);
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 gcc_jit_block_add_assignment (
kono
parents:
diff changeset
90 block,
kono
parents:
diff changeset
91 NULL,
kono
parents:
diff changeset
92 local,
kono
parents:
diff changeset
93 gcc_jit_context_new_rvalue_from_int (ctxt, int_type, 42));
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 gcc_jit_block_end_with_return (
kono
parents:
diff changeset
96 block, NULL,
kono
parents:
diff changeset
97 gcc_jit_lvalue_as_rvalue (local));
kono
parents:
diff changeset
98 }
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 void
kono
parents:
diff changeset
101 verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
kono
parents:
diff changeset
102 {
kono
parents:
diff changeset
103 CHECK_NON_NULL (result);
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 typedef int (*my_fn_type) (void);
kono
parents:
diff changeset
106 CHECK_NON_NULL (result);
kono
parents:
diff changeset
107 my_fn_type my_fn =
kono
parents:
diff changeset
108 (my_fn_type)gcc_jit_result_get_code (result, long_names.fn_name);
kono
parents:
diff changeset
109 CHECK_NON_NULL (my_fn);
kono
parents:
diff changeset
110 int val = my_fn ();
kono
parents:
diff changeset
111 CHECK_VALUE (val, 42);
kono
parents:
diff changeset
112 }