aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-10-19 17:57:49 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-10-19 17:57:49 +0000
commit97ba1e3c395151689c93f4353f8eff1ce416b174 (patch)
tree929f1bcc60169cb9378db8caf2492f5c8e6dcf2c /gcc
parent3cf3728197c7419f0b710a2cd7e8756fa7a15a22 (diff)
downloadgcc-97ba1e3c395151689c93f4353f8eff1ce416b174.zip
gcc-97ba1e3c395151689c93f4353f8eff1ce416b174.tar.gz
gcc-97ba1e3c395151689c93f4353f8eff1ce416b174.tar.bz2
cp-tree.h (DECL_ANTICIPATED): Don't require a FUNCTION_DECL.
* cp-tree.h (DECL_ANTICIPATED): Don't require a FUNCTION_DECL. * decl.c (select_decl): Don't return declarations that are DECL_ANTICIPATED. From-SVN: r36953
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/decl.c9
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/std1.C13
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f0fbee8..8c39273 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2000-10-19 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (DECL_ANTICIPATED): Don't require a FUNCTION_DECL.
+ * decl.c (select_decl): Don't return declarations that are
+ DECL_ANTICIPATED.
+
2000-10-18 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (cp_tree_index): Add CPTI_FAKE_STD.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index ed25a8f..54dbaa3 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -2481,7 +2481,7 @@ extern int flag_new_for_scope;
/* Nonzero if NODE is a FUNCTION_DECL for a built-in function, and we have
not yet seen a prototype for that function. */
#define DECL_ANTICIPATED(NODE) \
- (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))->decl_flags.anticipated_p)
+ (DECL_LANG_SPECIFIC (DECL_CHECK (NODE))->decl_flags.anticipated_p)
/* Record whether a typedef for type `int' was actually `signed int'. */
#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp))
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index ee4571c..0dc17c1 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5693,6 +5693,15 @@ select_decl (binding, flags)
{
tree val;
val = BINDING_VALUE (binding);
+
+ /* When we implicitly declare some builtin entity, we mark it
+ DECL_ANTICIPATED, so that we know to ignore it until it is
+ really declared. */
+ if (val && DECL_P (val)
+ && DECL_LANG_SPECIFIC (val)
+ && DECL_ANTICIPATED (val))
+ return NULL_TREE;
+
if (LOOKUP_NAMESPACES_ONLY (flags))
{
/* We are not interested in types. */
diff --git a/gcc/testsuite/g++.old-deja/g++.other/std1.C b/gcc/testsuite/g++.old-deja/g++.other/std1.C
new file mode 100644
index 0000000..21a232a
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/std1.C
@@ -0,0 +1,13 @@
+// Build don't link:
+// Special g++ Options: -fhonor-std
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+extern "C" int memcmp (const void * __s1,
+ const void * __s2,
+ __SIZE_TYPE__ __n) throw ();
+
+namespace std {
+void f () {
+ memcmp (0, 0, 0);
+}
+};