annotate gcc/testsuite/gcc.dg/pr44699.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile } */
kono
parents:
diff changeset
2 /* { dg-options "-O2" } */
kono
parents:
diff changeset
3 typedef long unsigned int size_t;
kono
parents:
diff changeset
4 typedef long int intmax_t;
kono
parents:
diff changeset
5 typedef long unsigned int uintmax_t;
kono
parents:
diff changeset
6 extern void *xmalloc (size_t) __attribute__ ((__malloc__));
kono
parents:
diff changeset
7 extern const char *trim_filename (const char *);
kono
parents:
diff changeset
8 extern void error (const char *, ...);
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 static __inline void *
kono
parents:
diff changeset
11 __inline_memcpy_chk (void *__dest, const void *__src, size_t __len)
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
kono
parents:
diff changeset
14 }
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 typedef unsigned int hashval_t;
kono
parents:
diff changeset
17 typedef hashval_t (*htab_hash) (const void *);
kono
parents:
diff changeset
18 typedef int (*htab_eq) (const void *, const void *);
kono
parents:
diff changeset
19 typedef void (*htab_del) (void *);
kono
parents:
diff changeset
20 typedef int (*htab_trav) (void **, void *);
kono
parents:
diff changeset
21 typedef void *(*htab_alloc) (size_t, size_t);
kono
parents:
diff changeset
22 typedef void (*htab_free) (void *);
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
kono
parents:
diff changeset
25 typedef void (*htab_free_with_arg) (void *, void *);
kono
parents:
diff changeset
26 struct htab {
kono
parents:
diff changeset
27 htab_hash hash_f;
kono
parents:
diff changeset
28 htab_eq eq_f;
kono
parents:
diff changeset
29 htab_del del_f;
kono
parents:
diff changeset
30 void ** entries;
kono
parents:
diff changeset
31 size_t size;
kono
parents:
diff changeset
32 size_t n_elements;
kono
parents:
diff changeset
33 size_t n_deleted;
kono
parents:
diff changeset
34 unsigned int searches;
kono
parents:
diff changeset
35 unsigned int collisions;
kono
parents:
diff changeset
36 htab_alloc alloc_f;
kono
parents:
diff changeset
37 htab_free free_f;
kono
parents:
diff changeset
38 void * alloc_arg;
kono
parents:
diff changeset
39 htab_alloc_with_arg alloc_with_arg_f;
kono
parents:
diff changeset
40 htab_free_with_arg free_with_arg_f;
kono
parents:
diff changeset
41 unsigned int size_prime_index;
kono
parents:
diff changeset
42 };
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 typedef struct htab *htab_t;
kono
parents:
diff changeset
45 enum insert_option {NO_INSERT, INSERT};
kono
parents:
diff changeset
46 extern void * htab_find (htab_t, const void *);
kono
parents:
diff changeset
47 extern void ** htab_find_slot (htab_t, const void *, enum insert_option);
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 enum mode_class { MODE_RANDOM, MODE_CC, MODE_INT, MODE_PARTIAL_INT, MODE_FRACT, MODE_UFRACT, MODE_ACCUM, MODE_UACCUM, MODE_FLOAT, MODE_DECIMAL_FLOAT, MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MODE_VECTOR_INT, MODE_VECTOR_FRACT, MODE_VECTOR_UFRACT, MODE_VECTOR_ACCUM, MODE_VECTOR_UACCUM, MODE_VECTOR_FLOAT, MAX_MODE_CLASS };
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 static const char *const mode_class_names[MAX_MODE_CLASS] =
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 "MODE_RANDOM", "MODE_CC", "MODE_INT", "MODE_PARTIAL_INT", "MODE_FRACT", "MODE_UFRACT", "MODE_ACCUM", "MODE_UACCUM", "MODE_FLOAT", "MODE_DECIMAL_FLOAT", "MODE_COMPLEX_INT", "MODE_COMPLEX_FLOAT", "MODE_VECTOR_INT", "MODE_VECTOR_FRACT", "MODE_VECTOR_UFRACT", "MODE_VECTOR_ACCUM", "MODE_VECTOR_UACCUM", "MODE_VECTOR_FLOAT"
kono
parents:
diff changeset
54 };
kono
parents:
diff changeset
55 struct mode_data
kono
parents:
diff changeset
56 {
kono
parents:
diff changeset
57 struct mode_data *next;
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 const char *name;
kono
parents:
diff changeset
60 enum mode_class cl;
kono
parents:
diff changeset
61 unsigned int precision;
kono
parents:
diff changeset
62 unsigned int bytesize;
kono
parents:
diff changeset
63 unsigned int ncomponents;
kono
parents:
diff changeset
64 unsigned int alignment;
kono
parents:
diff changeset
65 const char *format;
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 struct mode_data *component;
kono
parents:
diff changeset
68 struct mode_data *wider;
kono
parents:
diff changeset
69 struct mode_data *wider_2x;
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 struct mode_data *contained;
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 struct mode_data *next_cont;
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 const char *file;
kono
parents:
diff changeset
76 unsigned int line;
kono
parents:
diff changeset
77 unsigned int counter;
kono
parents:
diff changeset
78 unsigned int ibit;
kono
parents:
diff changeset
79 unsigned int fbit;
kono
parents:
diff changeset
80 };
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 static struct mode_data *modes[MAX_MODE_CLASS];
kono
parents:
diff changeset
83 static unsigned int n_modes[MAX_MODE_CLASS];
kono
parents:
diff changeset
84 static struct mode_data *void_mode;
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 static const struct mode_data blank_mode = {
kono
parents:
diff changeset
87 0, "<unknown>", MAX_MODE_CLASS,
kono
parents:
diff changeset
88 -1U, -1U, -1U, -1U,
kono
parents:
diff changeset
89 0, 0, 0, 0, 0, 0,
kono
parents:
diff changeset
90 "<unknown>", 0, 0, 0, 0
kono
parents:
diff changeset
91 };
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 static htab_t modes_by_name;
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 static __inline__ struct mode_data *
kono
parents:
diff changeset
96 find_mode (const char *name)
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 struct mode_data key;
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 key.name = name;
kono
parents:
diff changeset
101 return (struct mode_data *) htab_find (modes_by_name, &key);
kono
parents:
diff changeset
102 }
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 static struct mode_data *
kono
parents:
diff changeset
105 new_mode (enum mode_class cl, const char *name,
kono
parents:
diff changeset
106 const char *file, unsigned int line)
kono
parents:
diff changeset
107 {
kono
parents:
diff changeset
108 struct mode_data *m;
kono
parents:
diff changeset
109 static unsigned int count = 0;
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 m = find_mode (name);
kono
parents:
diff changeset
112 if (m)
kono
parents:
diff changeset
113 {
kono
parents:
diff changeset
114 error ("%s:%d: duplicate definition of mode \"%s\"",
kono
parents:
diff changeset
115 trim_filename (file), line, name);
kono
parents:
diff changeset
116 error ("%s:%d: previous definition here", m->file, m->line);
kono
parents:
diff changeset
117 return m;
kono
parents:
diff changeset
118 }
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 m = ((struct mode_data *) xmalloc (sizeof (struct mode_data)));
kono
parents:
diff changeset
121 ((__builtin_object_size (m, 0) != (size_t) -1) ? __builtin___memcpy_chk (m, &blank_mode, sizeof (struct mode_data), __builtin_object_size (m, 0)) : __inline_memcpy_chk (m, &blank_mode, sizeof (struct mode_data)));
kono
parents:
diff changeset
122 m->cl = cl;
kono
parents:
diff changeset
123 m->name = name;
kono
parents:
diff changeset
124 if (file)
kono
parents:
diff changeset
125 m->file = trim_filename (file);
kono
parents:
diff changeset
126 m->line = line;
kono
parents:
diff changeset
127 m->counter = count++;
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129 m->next = modes[cl];
kono
parents:
diff changeset
130 modes[cl] = m;
kono
parents:
diff changeset
131 n_modes[cl]++;
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 *htab_find_slot (modes_by_name, m, INSERT) = m;
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 return m;
kono
parents:
diff changeset
136 }
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 static void
kono
parents:
diff changeset
139 make_int_mode (const char *name,
kono
parents:
diff changeset
140 unsigned int precision, unsigned int bytesize,
kono
parents:
diff changeset
141 const char *file, unsigned int line)
kono
parents:
diff changeset
142 {
kono
parents:
diff changeset
143 struct mode_data *m = new_mode (MODE_INT, name, file, line);
kono
parents:
diff changeset
144 m->bytesize = bytesize;
kono
parents:
diff changeset
145 m->precision = precision;
kono
parents:
diff changeset
146 }
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 static void
kono
parents:
diff changeset
149 create_modes (void)
kono
parents:
diff changeset
150 {
kono
parents:
diff changeset
151 make_int_mode ("HI", -1U, 2, "../../work/gcc/machmode.def", 182);
kono
parents:
diff changeset
152 }
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 int
kono
parents:
diff changeset
155 main (int argc, char **argv)
kono
parents:
diff changeset
156 {
kono
parents:
diff changeset
157 create_modes ();
kono
parents:
diff changeset
158 }