diff options
author | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-09-19 00:33:09 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-09-19 00:33:09 +0000 |
commit | 88848bdeab2943d0c2e6b9d98e95ffdcafb687d6 (patch) | |
tree | 762c0f376628e76afc5809add65a72d5e16a9cdf /gcc | |
parent | 57b524174e514e6df90c7d973c43b78b5a5c5004 (diff) | |
download | gcc-88848bdeab2943d0c2e6b9d98e95ffdcafb687d6.zip gcc-88848bdeab2943d0c2e6b9d98e95ffdcafb687d6.tar.gz gcc-88848bdeab2943d0c2e6b9d98e95ffdcafb687d6.tar.bz2 |
gxxint.texi: G++ now implements namespaces.
* gxxint.texi: G++ now implements namespaces.
* decl.c (pop_label): Don't warn about unused labels more than
once.
* semantics.c (finish_goto_stmt): Always marked used labels as
used.
From-SVN: r29505
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/decl.c | 15 | ||||
-rw-r--r-- | gcc/cp/gxxint.texi | 2 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/warn2.C | 19 |
5 files changed, 43 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 599c7ff..51185fa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,14 @@ +1999-09-18 Paul Burchard <burchard@pobox.com> + + * gxxint.texi: G++ now implements namespaces. + 1999-09-18 Mark Mitchell <mark@codesourcery.com> + * decl.c (pop_label): Don't warn about unused labels more than + once. + * semantics.c (finish_goto_stmt): Always marked used labels as + used. + * decl.c (layout_var_decl): Change prototype. Call layout_decl even when the declaration is external. (cp_finish_decl): Adjust call to layout_var_decl. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index ed3e11e..c1a07c1 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1125,14 +1125,17 @@ pop_label (link) { tree label = TREE_VALUE (link); - if (DECL_INITIAL (label) == NULL_TREE) + if (!processing_template_decl && doing_semantic_analysis_p ()) { - cp_error_at ("label `%D' used but not defined", label); - /* Avoid crashing later. */ - define_label (input_filename, 1, DECL_NAME (label)); + if (DECL_INITIAL (label) == NULL_TREE) + { + cp_error_at ("label `%D' used but not defined", label); + /* Avoid crashing later. */ + define_label (input_filename, 1, DECL_NAME (label)); + } + else if (warn_unused && !TREE_USED (label)) + cp_warning_at ("label `%D' defined but not used", label); } - else if (warn_unused && !TREE_USED (label)) - cp_warning_at ("label `%D' defined but not used", label); SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link)); } diff --git a/gcc/cp/gxxint.texi b/gcc/cp/gxxint.texi index 05f1373..df9d100 100644 --- a/gcc/cp/gxxint.texi +++ b/gcc/cp/gxxint.texi @@ -1602,7 +1602,7 @@ The int parameter is a basic type, and does not receive a B encoding... @subsection Qualified names Both C++ and Java allow a class to be lexically nested inside another -class. C++ also supports namespaces (not yet implemented by G++). +class. C++ also supports namespaces. Java also supports packages. These are all mangled the same way: First the letter @samp{Q} diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 383e981..6943b96 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -642,6 +642,11 @@ finish_goto_stmt (destination) if (TREE_CODE (destination) == IDENTIFIER_NODE) destination = lookup_label (destination); + /* We warn about unused labels with -Wunused. That means we have to + mark the used labels as used. */ + if (TREE_CODE (destination) == LABEL_DECL) + TREE_USED (destination) = 1; + if (building_stmt_tree ()) add_tree (build_min_nt (GOTO_STMT, destination)); else @@ -650,7 +655,6 @@ finish_goto_stmt (destination) if (TREE_CODE (destination) == LABEL_DECL) { - TREE_USED (destination) = 1; label_rtx (destination); expand_goto (destination); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/warn2.C b/gcc/testsuite/g++.old-deja/g++.pt/warn2.C new file mode 100644 index 0000000..a45e518 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/warn2.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: -Wall +// Origin: Jeroen@MMR.be + +template <typename T> +void f() +{ + for(;;) + for(;;) + goto a; + + a: + ; +} + +void g() +{ + f<long>(); +} |