decl2.c (build_anon_union_vars): Copy attributes from the base addr.
* decl2.c (build_anon_union_vars): Copy attributes from the base addr. * pt.c (tsubst_decl): Substitute in DECL_VALUE_EXPR. * g++.dg/other/error8.C: Update expected diagnostic text. From-SVN: r104160
This commit is contained in:
parent
f489aff87a
commit
56b4ea3de8
|
@ -1,3 +1,8 @@
|
|||
2005-09-11 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* decl2.c (build_anon_union_vars): Copy attributes from the base addr.
|
||||
* pt.c (tsubst_decl): Substitute in DECL_VALUE_EXPR.
|
||||
|
||||
2005-09-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
* parser.c (cp_parser_translation_unit): Simplify. The while-block
|
||||
|
|
|
@ -1101,12 +1101,18 @@ build_anon_union_vars (tree type, tree object)
|
|||
|
||||
if (DECL_NAME (field))
|
||||
{
|
||||
tree base;
|
||||
|
||||
decl = build_decl (VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
|
||||
TREE_PUBLIC (decl) = TREE_PUBLIC (object);
|
||||
TREE_STATIC (decl) = TREE_PUBLIC (object);
|
||||
DECL_EXTERNAL (decl) = DECL_EXTERNAL (object);
|
||||
|
||||
base = get_base_address (object);
|
||||
TREE_PUBLIC (decl) = TREE_PUBLIC (base);
|
||||
TREE_STATIC (decl) = TREE_STATIC (base);
|
||||
DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
|
||||
|
||||
SET_DECL_VALUE_EXPR (decl, ref);
|
||||
DECL_HAS_VALUE_EXPR_P (decl) = 1;
|
||||
|
||||
decl = pushdecl (decl);
|
||||
}
|
||||
else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
|
||||
|
|
|
@ -6674,6 +6674,13 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
|
|||
DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
|
||||
= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
|
||||
type = check_var_type (DECL_NAME (r), type);
|
||||
|
||||
if (DECL_HAS_VALUE_EXPR_P (t))
|
||||
{
|
||||
tree ve = DECL_VALUE_EXPR (t);
|
||||
ve = tsubst_expr (ve, args, complain, in_decl);
|
||||
SET_DECL_VALUE_EXPR (r, ve);
|
||||
}
|
||||
}
|
||||
else if (DECL_SELF_REFERENCE_P (t))
|
||||
SET_DECL_SELF_REFERENCE_P (r);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2005-09-11 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* g++.dg/other/error8.C: Update expected diagnostic text.
|
||||
|
||||
2005-09-11 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR libfortran/19872
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
void foo(void)
|
||||
{
|
||||
union { int alpha; int beta; }; // { dg-error "previous declaration of 'int alpha'" }
|
||||
double alpha; // { dg-error "redeclared" }
|
||||
union { int alpha; int beta; }; // { dg-error "previous declaration" }
|
||||
double alpha; // { dg-error "conflicting declaration" }
|
||||
}
|
||||
|
||||
// This checks both the templated version, and the position of the diagnostic
|
||||
|
@ -20,7 +20,3 @@ void tfoo(void)
|
|||
}; // { dg-bogus "" "misplaced position of the declaration" { xfail *-*-* } }
|
||||
double alpha; // { dg-error "" "" }
|
||||
}
|
||||
|
||||
// The duplicated error messages are xfailed for now (tracked in the PR)
|
||||
// { dg-bogus "" "duplicate error messages" { target *-*-* } 8 }
|
||||
// { dg-bogus "" "duplicate error messages" { target *-*-* } 9 }
|
||||
|
|
Loading…
Reference in New Issue