diff options
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r-- | gcc/cp/init.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 54bb076..f159f44 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1840,8 +1840,18 @@ resolve_offset_ref (exp) if (expr == error_mark_node) return error_mark_node; - expr = build (COMPONENT_REF, TREE_TYPE (member), - expr, member); + type = TREE_TYPE (member); + if (TREE_CODE (type) != REFERENCE_TYPE) + { + int quals = cp_type_quals (type) | cp_type_quals (TREE_TYPE (expr)); + + if (DECL_MUTABLE_P (member)) + quals &= ~TYPE_QUAL_CONST; + + type = cp_build_qualified_type (type, quals); + } + + expr = build (COMPONENT_REF, type, expr, member); return convert_from_reference (expr); } |