summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-15 16:15:52 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-15 16:15:52 +0000
commit0bbc01c33937abcb37ee5d69cd0ca1a945595d19 (patch)
treea93c275abcfc9a60e8703ae251ac53109640e4b7
parent540997700ca35d5997a6a32a060100318349f8fe (diff)
downloadppe42-gcc-0bbc01c33937abcb37ee5d69cd0ca1a945595d19.tar.gz
ppe42-gcc-0bbc01c33937abcb37ee5d69cd0ca1a945595d19.zip
* decl.c (pushdecl): Don't check for linkage on a non-decl.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38290 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/decl.c5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/local4.C10
3 files changed, 15 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a13baaa1d55..3143094f058 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
2000-12-15 Jason Merrill <jason@redhat.com>
+ * decl.c (pushdecl): Don't check for linkage on a non-decl.
+
* call.c (build_op_delete_call): See through ARRAY_TYPEs.
* call.c (build_new_function_call): Lose space before paren in
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 4d1867d1366..924447f402d 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3821,8 +3821,9 @@ pushdecl (x)
/* Or in the innermost namespace. */
if (! t)
t = namespace_binding (name, DECL_CONTEXT (x));
- /* Does it have linkage? */
- if (t && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
+ /* Does it have linkage? Note that if this isn't a DECL, it's an
+ OVERLOAD, which is OK. */
+ if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
t = NULL_TREE;
if (t)
different_binding_level = 1;
diff --git a/gcc/testsuite/g++.old-deja/g++.other/local4.C b/gcc/testsuite/g++.old-deja/g++.other/local4.C
new file mode 100644
index 00000000000..fd8f512f57f
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/local4.C
@@ -0,0 +1,10 @@
+// Test that a local declaration of one of a global overload set works
+
+int f () { return 0; }
+int f (int);
+
+int main ()
+{
+ int f ();
+ return f ();
+}
OpenPOWER on IntegriCloud