Commit 88848bde by Mark Mitchell

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
parent 57b52417
1999-09-18 Paul Burchard <burchard@pobox.com>
* gxxint.texi: G++ now implements namespaces.
1999-09-18 Mark Mitchell <mark@codesourcery.com> 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 * decl.c (layout_var_decl): Change prototype. Call layout_decl
even when the declaration is external. even when the declaration is external.
(cp_finish_decl): Adjust call to layout_var_decl. (cp_finish_decl): Adjust call to layout_var_decl.
......
...@@ -1125,14 +1125,17 @@ pop_label (link) ...@@ -1125,14 +1125,17 @@ pop_label (link)
{ {
tree label = TREE_VALUE (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); if (DECL_INITIAL (label) == NULL_TREE)
/* Avoid crashing later. */ {
define_label (input_filename, 1, DECL_NAME (label)); 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)); SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
} }
......
...@@ -1602,7 +1602,7 @@ The int parameter is a basic type, and does not receive a B encoding... ...@@ -1602,7 +1602,7 @@ The int parameter is a basic type, and does not receive a B encoding...
@subsection Qualified names @subsection Qualified names
Both C++ and Java allow a class to be lexically nested inside another 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. Java also supports packages.
These are all mangled the same way: First the letter @samp{Q} These are all mangled the same way: First the letter @samp{Q}
......
...@@ -642,6 +642,11 @@ finish_goto_stmt (destination) ...@@ -642,6 +642,11 @@ finish_goto_stmt (destination)
if (TREE_CODE (destination) == IDENTIFIER_NODE) if (TREE_CODE (destination) == IDENTIFIER_NODE)
destination = lookup_label (destination); 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 ()) if (building_stmt_tree ())
add_tree (build_min_nt (GOTO_STMT, destination)); add_tree (build_min_nt (GOTO_STMT, destination));
else else
...@@ -650,7 +655,6 @@ finish_goto_stmt (destination) ...@@ -650,7 +655,6 @@ finish_goto_stmt (destination)
if (TREE_CODE (destination) == LABEL_DECL) if (TREE_CODE (destination) == LABEL_DECL)
{ {
TREE_USED (destination) = 1;
label_rtx (destination); label_rtx (destination);
expand_goto (destination); expand_goto (destination);
} }
......
// 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>();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment