aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog30
-rw-r--r--gcc/cp/NEWS4
-rw-r--r--gcc/cp/cp-tree.h12
-rw-r--r--gcc/cp/decl.c56
-rw-r--r--gcc/cp/decl2.c21
-rw-r--r--gcc/cp/dump.c4
-rw-r--r--gcc/cp/except.c7
-rw-r--r--gcc/cp/init.c6
-rw-r--r--gcc/cp/lang-options.h3
-rw-r--r--gcc/cp/rtti.c6
10 files changed, 49 insertions, 100 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 393da2e..7474c83 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,33 @@
+2001-08-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ Kill -fhonor-std.
+ * NEWS: Document.
+ * cp-tree.h (flag_honor_std): Remove.
+ (CPTI_FAKE_STD): Remove.
+ (std_node): Remove comment about it being NULL.
+ (fake_std_node): Remove.
+ * decl.c (in_fake_std): Remove.
+ (walk_namespaces_r): Remove fake_std_node check.
+ (push_namespace): Remove in_fake_std code.
+ (pop_namespace): Likewise.
+ (lookup_name_real): Remove fake_std_node check.
+ (init_decl_processing): Always create std_node. Always add
+ std:: things there.
+ (builtin_function): Always put non '_' fns in std.
+ * decl2.c (flag_honor_std): Remove.
+ (lang_f_options): Remove honor-std.
+ (unsupported_options): Add honor-std.
+ (set_decl_namespace): Remove fake_std_node check.
+ (validate_nonmember_using_decl): Likewise.
+ (do_using_directive): Likewise.
+ (handle_class_head): Likewise.
+ * dump.c (cp_dump_tree): Likewise.
+ * except.c (init_exception_processing): Adjust.
+ * init.c (build_member_call): Remove fake_std_node check.
+ (build_offset_ref): Likewise.
+ * lang-options.h: Remove -fhonor-std, -fno-honor-std.
+ * rtti.c (init_rtti_processing): Adjust.
+
2001-07-31 Alexandre Petit-Bianco <apbianco@redhat.com>
* tree.c (cp_tree_equal): WITH_CLEANUP_EXPR node to use its second
diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS
index 69b6fb4..2d3632c 100644
--- a/gcc/cp/NEWS
+++ b/gcc/cp/NEWS
@@ -1,5 +1,9 @@
*** Changes in GCC 3.1:
+* -fhonor-std and -fno-honor-std have been removed. -fno-honor-std was
+ a workaround to allow std compliant code to work with the non-std
+ compliant libstdc++-v2. libstdc++-v3 is std compliant.
+
* The C++ ABI has been changed to correctly handle this code:
struct A {
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index c485c43..4980cf4 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -209,10 +209,6 @@ Boston, MA 02111-1307, USA. */
extern int flag_use_cxa_atexit;
-/* Nonzero to not ignore namespace std. */
-
-extern int flag_honor_std;
-
/* Nonzero means generate 'rtti' that give run-time type information. */
extern int flag_rtti;
@@ -526,7 +522,6 @@ enum cp_tree_index
CPTI_VTBL_TYPE,
CPTI_VTBL_PTR_TYPE,
CPTI_STD,
- CPTI_FAKE_STD,
CPTI_ABI,
CPTI_TYPE_INFO_TYPE,
CPTI_TINFO_DECL_TYPE,
@@ -613,14 +608,7 @@ extern tree cp_global_trees[CPTI_MAX];
#define unknown_type_node cp_global_trees[CPTI_UNKNOWN_TYPE]
#define vtbl_type_node cp_global_trees[CPTI_VTBL_TYPE]
#define vtbl_ptr_type_node cp_global_trees[CPTI_VTBL_PTR_TYPE]
-/* When the `std' namespace is a real namespace, this is the
- corresponding NAMESPACE_DECL. When the `std' namespace is an alias
- for the global namespace, this is NULL_TREE. */
#define std_node cp_global_trees[CPTI_STD]
-/* When the `std' namespace is a real namespace, this is the
- ERROR_MARK_NODE. Otherwise, this is a dummy NAMESPACE_DECL that
- should be treated like the global namespace. */
-#define fake_std_node cp_global_trees[CPTI_FAKE_STD]
#define abi_node cp_global_trees[CPTI_ABI]
#define type_info_type_node cp_global_trees[CPTI_TYPE_INFO_TYPE]
#define tinfo_decl_type cp_global_trees[CPTI_TINFO_DECL_TYPE]
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index c9867da..1a34bb9 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -206,11 +206,6 @@ tree cp_global_trees[CPTI_MAX];
static tree global_type_node;
-/* If non-zero, this is the number of times we have entered the `std'
- namespace when we are treating that namespace as an alias for the
- global namespace. */
-static int in_fake_std;
-
/* Expect only namespace names now. */
static int only_namespace_names;
@@ -1794,12 +1789,6 @@ walk_namespaces_r (namespace, f, data)
if (TREE_CODE (current) != NAMESPACE_DECL
|| DECL_NAMESPACE_ALIAS (current))
continue;
- if (!DECL_LANG_SPECIFIC (current))
- {
- /* Hmm. std. */
- my_friendly_assert (current == fake_std_node, 393);
- continue;
- }
/* We found a namespace. */
result |= walk_namespaces_r (current, f, data);
@@ -2279,13 +2268,6 @@ push_namespace (name)
need_new = 0;
implicit_use = 1;
}
- else if (current_namespace == global_namespace
- && !flag_honor_std
- && name == std_identifier)
- {
- in_fake_std++;
- return;
- }
else
{
/* Check whether this is an extended namespace definition. */
@@ -2331,12 +2313,7 @@ push_namespace (name)
void
pop_namespace ()
{
- if (current_namespace == global_namespace)
- {
- my_friendly_assert (in_fake_std > 0, 980421);
- in_fake_std--;
- return;
- }
+ my_friendly_assert (current_namespace != global_namespace, 20010801);
current_namespace = CP_DECL_CONTEXT (current_namespace);
/* The binding level is not popped, as it might be re-opened later. */
suspend_binding_level ();
@@ -5892,10 +5869,6 @@ lookup_name_real (name, prefer_type, nonclass, namespaces_only)
if (looking_for_template)
flags |= LOOKUP_TEMPLATES_EXPECTED;
- /* std:: becomes :: for now. */
- if (got_scope && got_scope == fake_std_node)
- got_scope = void_type_node;
-
if (got_scope)
type = got_scope;
else if (got_object != error_mark_node)
@@ -6377,20 +6350,9 @@ init_decl_processing ()
declare_namespace_level ();
/* Create the `std' namespace. */
- if (flag_honor_std)
- {
- push_namespace (std_identifier);
- std_node = current_namespace;
- pop_namespace ();
- fake_std_node = error_mark_node;
- }
- else
- {
- fake_std_node = build_decl (NAMESPACE_DECL,
- std_identifier,
- void_type_node);
- pushdecl (fake_std_node);
- }
+ push_namespace (std_identifier);
+ std_node = current_namespace;
+ pop_namespace ();
c_common_nodes_and_builtins ();
@@ -6492,12 +6454,10 @@ init_decl_processing ()
tree bad_alloc_type_node, newtype, deltype;
tree ptr_ftype_sizetype;
- if (flag_honor_std)
- push_namespace (std_identifier);
+ push_namespace (std_identifier);
bad_alloc_type_node = xref_tag
(class_type_node, get_identifier ("bad_alloc"), 1);
- if (flag_honor_std)
- pop_namespace ();
+ pop_namespace ();
ptr_ftype_sizetype
= build_function_type (ptr_type_node,
tree_cons (NULL_TREE,
@@ -6666,13 +6626,13 @@ builtin_function (name, type, code, class, libname)
/* All builtins that don't begin with an `_' should go in the `std'
namespace. */
- if (flag_honor_std && name[0] != '_')
+ if (name[0] != '_')
{
push_namespace (std_identifier);
DECL_CONTEXT (decl) = std_node;
}
pushdecl (decl);
- if (flag_honor_std && name[0] != '_')
+ if (name[0] != '_')
pop_namespace ();
/* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 7ce343c..1b7be18 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -378,10 +378,6 @@ int flag_weak = 1;
int flag_use_cxa_atexit;
-/* Nonzero to not ignore namespace std. */
-
-int flag_honor_std = 1;
-
/* 0 if we should not perform inlining.
1 if we should expand functions calls inline at the tree level.
2 if we should consider *all* functions to be inline
@@ -448,7 +444,6 @@ lang_f_options[] =
{"for-scope", &flag_new_for_scope, 2},
{"gnu-keywords", &flag_no_gnu_keywords, 0},
{"handle-exceptions", &flag_exceptions, 1},
- {"honor-std", &flag_honor_std, 1},
{"implement-inlines", &flag_implement_inlines, 1},
{"implicit-inline-templates", &flag_implicit_inline_templates, 1},
{"implicit-templates", &flag_implicit_templates, 1},
@@ -473,6 +468,7 @@ static const char * const unsupported_options[] = {
"cond-mismatch",
"enum-int-equiv",
"guiding-decls",
+ "honor-std",
"huge-objects",
"labels-ok",
"new-abi",
@@ -4403,8 +4399,7 @@ set_decl_namespace (decl, scope, friendp)
int friendp;
{
tree old;
- if (scope == fake_std_node)
- scope = global_namespace;
+
/* Get rid of namespace aliases. */
scope = ORIGINAL_NAMESPACE (scope);
@@ -4913,13 +4908,7 @@ validate_nonmember_using_decl (decl, scope, name)
tree *scope;
tree *name;
{
- if (TREE_CODE (decl) == SCOPE_REF
- && TREE_OPERAND (decl, 0) == fake_std_node)
- {
- *scope = global_namespace;
- *name = TREE_OPERAND (decl, 1);
- }
- else if (TREE_CODE (decl) == SCOPE_REF)
+ if (TREE_CODE (decl) == SCOPE_REF)
{
*scope = TREE_OPERAND (decl, 0);
*name = TREE_OPERAND (decl, 1);
@@ -5156,8 +5145,6 @@ void
do_using_directive (namespace)
tree namespace;
{
- if (namespace == fake_std_node)
- return;
if (building_stmt_tree ())
add_stmt (build_stmt (USING_STMT, namespace));
@@ -5260,8 +5247,6 @@ handle_class_head (aggr, scope, id)
if (current == NULL_TREE)
current = current_namespace;
- if (scope == fake_std_node)
- scope = global_namespace;
if (scope == NULL_TREE)
scope = global_namespace;
diff --git a/gcc/cp/dump.c b/gcc/cp/dump.c
index 4826585..17a6b30 100644
--- a/gcc/cp/dump.c
+++ b/gcc/cp/dump.c
@@ -158,10 +158,6 @@ cp_dump_tree (di, t)
break;
case NAMESPACE_DECL:
- /* The fake `::std' namespace does not have DECL_LANG_SPECIFIC,
- and therefore many other macros do not work on it. */
- if (t == fake_std_node)
- break;
if (DECL_NAMESPACE_ALIAS (t))
dump_child ("alis", DECL_NAMESPACE_ALIAS (t));
else if (!dump_flag (di, TDF_SLIM, t))
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 46ffd6e..fef5b53 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -62,16 +62,13 @@ init_exception_processing ()
{
tree tmp;
- if (flag_honor_std)
- push_namespace (std_identifier);
-
/* void std::terminate (); */
+ push_namespace (std_identifier);
tmp = build_function_type (void_type_node, void_list_node);
terminate_node = build_cp_library_fn_ptr ("terminate", tmp);
TREE_THIS_VOLATILE (terminate_node) = 1;
TREE_NOTHROW (terminate_node) = 1;
- if (flag_honor_std)
- pop_namespace ();
+ pop_namespace ();
/* void __cxa_call_unexpected(void *); */
tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 6dbef0b..487543e 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1503,9 +1503,6 @@ build_member_call (type, name, parmlist)
if (DECL_P (name))
name = DECL_NAME (name);
- if (type == fake_std_node)
- return build_x_function_call (do_scoped_id (name, 0), parmlist,
- current_class_ref);
if (TREE_CODE (type) == NAMESPACE_DECL)
return build_x_function_call (lookup_namespace_name (type, name),
parmlist, current_class_ref);
@@ -1638,9 +1635,6 @@ build_offset_ref (type, name)
if (TREE_CODE (name) == TEMPLATE_DECL)
return name;
- if (type == fake_std_node)
- return do_scoped_id (name, 0);
-
if (processing_template_decl || uses_template_parms (type))
return build_min_nt (SCOPE_REF, type, name);
diff --git a/gcc/cp/lang-options.h b/gcc/cp/lang-options.h
index 172461a..5a3f94a 100644
--- a/gcc/cp/lang-options.h
+++ b/gcc/cp/lang-options.h
@@ -64,9 +64,6 @@ DEFINE_LANG_NAME ("C++")
N_("Do not recognise GNU defined keywords") },
{ "-fhandle-exceptions", "" },
{ "-fno-handle-exceptions", "" },
- { "-fhonor-std", "" },
- { "-fno-honor-std",
- N_("Do not treat the namespace `std' as a normal namespace") },
{ "-fhuge-objects",
N_("Enable support for huge objects") },
{ "-fno-huge-objects", "" },
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index da1484c..f8c6031 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -71,12 +71,10 @@ static int doing_runtime = 0;
void
init_rtti_processing ()
{
- if (flag_honor_std)
- push_namespace (std_identifier);
+ push_namespace (std_identifier);
type_info_type_node = xref_tag
(class_type_node, get_identifier ("type_info"), 1);
- if (flag_honor_std)
- pop_namespace ();
+ pop_namespace ();
tinfo_decl_type =
build_qualified_type (type_info_type_node, TYPE_QUAL_CONST);
}