diff options
author | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-12-30 21:03:40 +0000 |
---|---|---|
committer | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-12-30 21:03:40 +0000 |
commit | 059103198a5730cc3ec589a541ce373773b028b9 (patch) | |
tree | 62f52de3e3e5cd9efd558e4adb41a23b685b37da /gcc/cp/decl.c | |
parent | 66a1f2748aa37d578cfbe315f534fb21c0191de5 (diff) | |
download | ppe42-gcc-059103198a5730cc3ec589a541ce373773b028b9.tar.gz ppe42-gcc-059103198a5730cc3ec589a541ce373773b028b9.zip |
52th Cygnus<->FSF merge
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@8714 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r-- | gcc/cp/decl.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5d3c2f2c264..f57399421e9 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -552,7 +552,7 @@ struct binding_level /* Number of decls in `names' that have incomplete structure or union types. */ - unsigned short n_incomplete; + unsigned int n_incomplete; /* 1 for the level that holds the parameters of a function. 2 for the level that holds a class declaration. @@ -2979,6 +2979,16 @@ pushdecl (x) if (++b->n_incomplete == 0) error ("too many incomplete variables at this point"); } + + /* Keep count of variables in this level with incomplete type. */ + /* RTTI TD entries are created while defining the type_info. */ + if (TREE_CODE (x) == VAR_DECL + && TYPE_LANG_SPECIFIC (TREE_TYPE (x)) + && TYPE_BEING_DEFINED (TREE_TYPE (x))) + { + if (++b->n_incomplete == 0) + error ("too many incomplete variables at this point"); + } } if (TREE_CODE (x) == TYPE_DECL && name != NULL_TREE) @@ -8603,6 +8613,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, raises) declarator, type); else set_nested_typename (d, TYPE_NESTED_NAME (c), declarator, type); + + DECL_ASSEMBLER_NAME (d) = DECL_NAME (d); + DECL_ASSEMBLER_NAME (d) + = get_identifier (build_overload_name (type, 1, 1)); } } |