cp-tree.h (DECL_ANTICIPATED): Don't require a FUNCTION_DECL.
authorMark Mitchell <mark@codesourcery.com>
Thu, 19 Oct 2000 17:57:49 +0000 (17:57 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 19 Oct 2000 17:57:49 +0000 (17:57 +0000)
* 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

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/testsuite/g++.old-deja/g++.other/std1.C [new file with mode: 0644]

index f0fbee8d94536805fdb955a6d13f2c82ad9a92e6..8c39273c6c8097ae9f3771439824bfe430cd659f 100644 (file)
@@ -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.
index ed25a8fc10e29bd10bb357d7c556eeeeed557f47..54dbaa34da5ecb894069fa9b28e4cad834d00102 100644 (file)
@@ -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))
index ee4571c94e840b09c45c86378419b700b79fa96d..0dc17c13de24a7494458d453ef5c29fb3f75ab99 100644 (file)
@@ -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 (file)
index 0000000..21a232a
--- /dev/null
@@ -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);
+}
+};