From: Mark Mitchell Date: Mon, 30 May 2005 16:20:29 +0000 (+0000) Subject: re PR c++/21784 (Using vs builtin names) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d035c29621111dc216939c9a59ce612ff9c360d6;p=gcc.git re PR c++/21784 (Using vs builtin names) PR c++/21784 * name-lookup.c (do_nonmember_using_decl): Ignore builtin functions, even when the used name is not a function. PR c++/21784 * g++.dg/lookup/using14.C: New test. From-SVN: r100365 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 66a3d4fe55e..ae4aca71f5f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,9 +1,20 @@ +2005-05-30 Mark Mitchell + + PR c++/21784 + * name-lookup.c (do_nonmember_using_decl): Ignore builtin + functions, even when the used name is not a function. + 2005-05-30 Kazu Hirata * operators.def, optimize.c: Update copyright. 2005-05-28 Mark Mitchell + PR c++/21210 + * call.c (standard_conversion): Permit conversions to complex + types if conversion to the corresponding scalar type would be + permitted. + PR c++/21340 * method.c (implicitly_declare_fn): Clear processing_template_decl when generating implicit declaration. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index bd83695cd0a..dde4227f790 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -2032,6 +2032,14 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, return; } + /* It is impossible to overload a built-in function; any explicit + declaration eliminates the built-in declaration. So, if OLDVAL + is a built-in, then we can just pretend it isn't there. */ + if (oldval + && TREE_CODE (oldval) == FUNCTION_DECL + && DECL_ANTICIPATED (oldval)) + oldval = NULL_TREE; + /* Check for using functions. */ if (decls.value && is_overloaded_fn (decls.value)) { @@ -2044,15 +2052,6 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, oldval = NULL_TREE; } - /* It is impossible to overload a built-in function; any - explicit declaration eliminates the built-in declaration. - So, if OLDVAL is a built-in, then we can just pretend it - isn't there. */ - if (oldval - && TREE_CODE (oldval) == FUNCTION_DECL - && DECL_ANTICIPATED (oldval)) - oldval = NULL_TREE; - *newval = oldval; for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7fd9b0e0299..3e3c60900d5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-05-30 Mark Mitchell + + PR c++/21784 + * g++.dg/lookup/using14.C: New test. + 2005-05-30 Kazu Hirata * gcc.dg/c99-math-double-1.c, gcc.dg/c99-math-float-1.c, @@ -29,6 +34,9 @@ 2005-05-28 Mark Mitchell + PR c++/21210 + * g++.dg/ext/complex1.C: New test. + PR c++/21340 * g++.dg/init/ctor6.C: New test. diff --git a/gcc/testsuite/g++.dg/lookup/using14.C b/gcc/testsuite/g++.dg/lookup/using14.C new file mode 100644 index 00000000000..072018e3b8f --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using14.C @@ -0,0 +1,8 @@ +// PR c++/21784 + +namespace mine +{ + int cpow; +}; + +using mine::cpow;