annotate gcc/testsuite/gcc.dg/torture/pr55888.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
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
kono
parents:
diff changeset
3 typedef unsigned _GCC_ATTR_ALIGN_u32t;
kono
parents:
diff changeset
4 typedef _GCC_ATTR_ALIGN_u32t _Uint32t __attribute__ ((__aligned__ (4)));
kono
parents:
diff changeset
5 typedef unsigned int _GCC_ATTR_ALIGN_u8t __attribute__ ((__mode__ (__QI__)));
kono
parents:
diff changeset
6 typedef _GCC_ATTR_ALIGN_u8t _Uint8t __attribute__ ((__aligned__ (1)));
kono
parents:
diff changeset
7 typedef unsigned _Sizet;
kono
parents:
diff changeset
8 typedef _Sizet size_t;
kono
parents:
diff changeset
9 typedef _Uint8t uint8_t;
kono
parents:
diff changeset
10 typedef _Uint32t uint32_t;
kono
parents:
diff changeset
11 typedef enum
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 PROTOBUF_C_LABEL_REQUIRED, PROTOBUF_C_LABEL_OPTIONAL,
kono
parents:
diff changeset
14 PROTOBUF_C_LABEL_REPEATED
kono
parents:
diff changeset
15 }
kono
parents:
diff changeset
16 ProtobufCLabel;
kono
parents:
diff changeset
17 typedef enum
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 PROTOBUF_C_TYPE_INT32, PROTOBUF_C_TYPE_SINT32, PROTOBUF_C_TYPE_SFIXED32,
kono
parents:
diff changeset
20 PROTOBUF_C_TYPE_INT64, PROTOBUF_C_TYPE_SINT64, PROTOBUF_C_TYPE_SFIXED64,
kono
parents:
diff changeset
21 PROTOBUF_C_TYPE_UINT32, PROTOBUF_C_TYPE_FIXED32, PROTOBUF_C_TYPE_UINT64,
kono
parents:
diff changeset
22 PROTOBUF_C_TYPE_FIXED64, PROTOBUF_C_TYPE_FLOAT, PROTOBUF_C_TYPE_DOUBLE,
kono
parents:
diff changeset
23 PROTOBUF_C_TYPE_BOOL, PROTOBUF_C_TYPE_ENUM, PROTOBUF_C_TYPE_STRING,
kono
parents:
diff changeset
24 PROTOBUF_C_TYPE_BYTES, PROTOBUF_C_TYPE_MESSAGE,
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26 ProtobufCType;
kono
parents:
diff changeset
27 typedef struct _ProtobufCBinaryData ProtobufCBinaryData;
kono
parents:
diff changeset
28 struct _ProtobufCBinaryData
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 size_t len;
kono
parents:
diff changeset
31 };
kono
parents:
diff changeset
32 typedef struct _ProtobufCMessageDescriptor ProtobufCMessageDescriptor;
kono
parents:
diff changeset
33 typedef struct _ProtobufCFieldDescriptor ProtobufCFieldDescriptor;
kono
parents:
diff changeset
34 typedef struct _ProtobufCMessage ProtobufCMessage;
kono
parents:
diff changeset
35 struct _ProtobufCFieldDescriptor
kono
parents:
diff changeset
36 {
kono
parents:
diff changeset
37 uint32_t id;
kono
parents:
diff changeset
38 ProtobufCLabel label;
kono
parents:
diff changeset
39 ProtobufCType type;
kono
parents:
diff changeset
40 unsigned offset;
kono
parents:
diff changeset
41 };
kono
parents:
diff changeset
42 struct _ProtobufCMessageDescriptor
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 unsigned n_fields;
kono
parents:
diff changeset
45 const ProtobufCFieldDescriptor *fields;
kono
parents:
diff changeset
46 };
kono
parents:
diff changeset
47 struct _ProtobufCMessage
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 const ProtobufCMessageDescriptor *descriptor;
kono
parents:
diff changeset
50 };
kono
parents:
diff changeset
51 typedef enum
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 PROTOBUF_C_WIRE_TYPE_VARINT, PROTOBUF_C_WIRE_TYPE_64BIT,
kono
parents:
diff changeset
54 PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED, PROTOBUF_C_WIRE_TYPE_START_GROUP,
kono
parents:
diff changeset
55 PROTOBUF_C_WIRE_TYPE_END_GROUP, PROTOBUF_C_WIRE_TYPE_32BIT
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57 ProtobufCWireType;
kono
parents:
diff changeset
58 size_t tag_pack (uint32_t, uint8_t *);
kono
parents:
diff changeset
59 size_t prefixed_message_pack (ProtobufCMessage *, uint8_t *);
kono
parents:
diff changeset
60 static inline size_t
kono
parents:
diff changeset
61 uint32_pack (uint32_t value, uint8_t * out)
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 unsigned rv = 0;
kono
parents:
diff changeset
64 if (value >= 0x80)
kono
parents:
diff changeset
65 {
kono
parents:
diff changeset
66 if (value >= 0x80)
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 value >>= 7;
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70 }
kono
parents:
diff changeset
71 out[rv++] = value;
kono
parents:
diff changeset
72 }
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 static inline size_t
kono
parents:
diff changeset
75 binary_data_pack (const ProtobufCBinaryData * bd, uint8_t * out)
kono
parents:
diff changeset
76 {
kono
parents:
diff changeset
77 size_t len = bd->len;
kono
parents:
diff changeset
78 size_t rv = uint32_pack (len, out);
kono
parents:
diff changeset
79 return rv + len;
kono
parents:
diff changeset
80 }
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 static size_t
kono
parents:
diff changeset
83 required_field_pack (const ProtobufCFieldDescriptor * field,
kono
parents:
diff changeset
84 const void *member, uint8_t * out)
kono
parents:
diff changeset
85 {
kono
parents:
diff changeset
86 size_t rv = tag_pack (field->id, out);
kono
parents:
diff changeset
87 switch (field->type)
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 case PROTOBUF_C_TYPE_BYTES:
kono
parents:
diff changeset
90 {
kono
parents:
diff changeset
91 const ProtobufCBinaryData *bd =
kono
parents:
diff changeset
92 ((const ProtobufCBinaryData *) member);
kono
parents:
diff changeset
93 out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED;
kono
parents:
diff changeset
94 return rv + binary_data_pack (bd, out + rv);
kono
parents:
diff changeset
95 }
kono
parents:
diff changeset
96 case PROTOBUF_C_TYPE_MESSAGE:
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED;
kono
parents:
diff changeset
99 return rv +
kono
parents:
diff changeset
100 prefixed_message_pack (*(ProtobufCMessage * const *) member,
kono
parents:
diff changeset
101 out + rv);
kono
parents:
diff changeset
102 }
kono
parents:
diff changeset
103 }
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 size_t
kono
parents:
diff changeset
107 protobuf_c_message_pack (const ProtobufCMessage * message, uint8_t * out)
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 unsigned i;
kono
parents:
diff changeset
110 size_t rv = 0;
kono
parents:
diff changeset
111 for (i = 0; i < message->descriptor->n_fields; i++)
kono
parents:
diff changeset
112 {
kono
parents:
diff changeset
113 const ProtobufCFieldDescriptor *field = message->descriptor->fields + i;
kono
parents:
diff changeset
114 const void *member = ((const char *) message) + field->offset;
kono
parents:
diff changeset
115 if (field->label == PROTOBUF_C_LABEL_REQUIRED)
kono
parents:
diff changeset
116 rv += required_field_pack (field, member, out + rv);
kono
parents:
diff changeset
117 }
kono
parents:
diff changeset
118 }