- if (qualifiers != TYPE_QUALIFIER_NONE) {
- type_t *const copy = duplicate_type(type);
- copy->base.qualifiers |= qualifiers;
+ if (qualifiers != TYPE_QUALIFIER_NONE || modifiers != TYPE_MODIFIER_NONE) {
+ type_t *const copy = duplicate_type(type);
+
+ /* for const with typedefed array type the element type has to be
+ * adjusted */
+ if (is_type_array(copy)) {
+ type_t *element_type = copy->array.element_type;
+ element_type = duplicate_type(element_type);
+ element_type->base.qualifiers |= qualifiers;
+ element_type->base.modifiers |= modifiers;
+ copy->array.element_type = element_type;
+ } else {
+ copy->base.qualifiers |= qualifiers;
+ copy->base.modifiers |= modifiers;
+ }