From 0c33daffa33ccd49807e44865b6d96d79c74cfe8 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 11 Mar 2003 23:07:45 +0000 Subject: re PR c++/9924 (Multiple using statements for builtin functions not allowed) PR c++/9924 * g++.dg/overload/builtin2.C: New test. 2003-03-11 Mark Mitchell PR c++/9924 * decl2.c (do_nonmember_using_decl): Ignore anticipated builtins. From-SVN: r64197 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 30 ++++++++++++++++++------------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/overload/builtin2.C | 8 ++++++++ 4 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/g++.dg/overload/builtin2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 679cd11..9dcd1c7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-03-11 Mark Mitchell + + PR c++/9924 + * decl2.c (do_nonmember_using_decl): Ignore anticipated builtins. + 2003-03-11 Jason Merrill PR c++/9820 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index c2f1f6c..b96f65f 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4251,21 +4251,27 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)), TYPE_ARG_TYPES (TREE_TYPE (old_fn)))) { - /* If this using declaration introduces a function - recognized as a built-in, no longer mark it as - anticipated in this scope. */ - if (DECL_ANTICIPATED (old_fn)) - { - DECL_ANTICIPATED (old_fn) = 0; - break; - } - /* There was already a non-using declaration in this scope with the same parameter types. If both are the same extern "C" functions, that's ok. */ - if (!decls_match (new_fn, old_fn)) - error ("`%D' is already declared in this scope", name); - break; + if (decls_match (new_fn, old_fn)) + { + /* If the OLD_FN was a builtin, there is now a + real declaration. */ + if (DECL_ANTICIPATED (old_fn)) + DECL_ANTICIPATED (old_fn) = 0; + break; + } + else if (!DECL_ANTICIPATED (old_fn)) + { + /* If the OLD_FN was really declared, the + declarations don't match. */ + error ("`%D' is already declared in this scope", name); + break; + } + + /* If the OLD_FN was not really there, just ignore + it and keep going. */ } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ec4a15..8cd81af 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-03-11 Mark Mitchell + + PR c++/9924 + * g++.dg/overload/builtin2.C: New test. + 2003-03-11 Steven Bosscher * gcc.dg/return-type-3.c: New test. diff --git a/gcc/testsuite/g++.dg/overload/builtin2.C b/gcc/testsuite/g++.dg/overload/builtin2.C new file mode 100644 index 0000000..4f9f52d --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/builtin2.C @@ -0,0 +1,8 @@ +namespace __gnu_cxx { + void llabs(long long x); +} + +namespace std { + using __gnu_cxx::llabs; + using __gnu_cxx::llabs; +} -- cgit v1.1