summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2011-06-12 20:56:57 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-14 14:37:31 +0100
commit3968f33b6542cf20cf63cf49bfbc033bd2486295 (patch)
tree2bdb5e2f692a3bd3ecadbf2b4c7dc9f54485c737 /meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch
parent022ca1d1357caafdfe23aa9ab82f90ba89b6942b (diff)
downloadopenembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.gz
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.bz2
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.xz
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.zip
gcc-4.6.0: Bring in patches from FSF 4.6 branch
This brings in new patches from 4.6 release branch updates the comment section of existing branch to not contain patch numbers. Tested build on qemu for arm ppc mips x86 and x86_64 Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch
new file mode 100644
index 000000000..af31ff024
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0226-Fix-PR-c-48838.patch
@@ -0,0 +1,112 @@
+From 01c39e4050b00a6483b1e196b1308beed14d6e4a Mon Sep 17 00:00:00 2001
+From: dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Fri, 6 May 2011 08:34:10 +0000
+Subject: [PATCH] Fix PR c++/48838
+
+gcc/cp
+
+ PR c++/48838
+ * cp-tree.h (non_static_member_function_p): Declare new function.
+ * tree.c (non_static_member_function_p): Define it.
+ * semantics.c (finish_call_expr): Use it.
+
+gcc/testsuite
+
+ PR c++/48838
+ * g++.dg/template/member9.C: New test case.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173472 138bc75d-0d04-0410-961f-82ee72b054a4
+
+index 176a4b8..9fbca57 100644
+--- a/gcc/cp/cp-tree.h
++++ b/gcc/cp/cp-tree.h
+@@ -5409,6 +5409,7 @@ extern tree get_fns (tree);
+ extern tree get_first_fn (tree);
+ extern tree ovl_cons (tree, tree);
+ extern tree build_overload (tree, tree);
++extern bool non_static_member_function_p (tree);
+ extern const char *cxx_printable_name (tree, int);
+ extern const char *cxx_printable_name_translate (tree, int);
+ extern tree build_exception_variant (tree, tree);
+diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
+index b5c0b80..f43649e 100644
+--- a/gcc/cp/semantics.c
++++ b/gcc/cp/semantics.c
+@@ -2041,8 +2041,7 @@ finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
+ is not included in *ARGS even though it is considered to
+ be part of the list of arguments. Note that this is
+ related to CWG issues 515 and 1005. */
+- || (((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
+- || BASELINK_P (fn))
++ || (non_static_member_function_p (fn)
+ && current_class_ref
+ && type_dependent_expression_p (current_class_ref)))
+ {
+diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
+index 15ee741..f04fd23 100644
+--- a/gcc/cp/tree.c
++++ b/gcc/cp/tree.c
+@@ -1465,6 +1465,34 @@ build_overload (tree decl, tree chain)
+ return ovl_cons (decl, chain);
+ }
+
++/* Return TRUE if FN is a non-static member function, FALSE otherwise.
++ This function looks into BASELINK and OVERLOAD nodes. */
++
++bool
++non_static_member_function_p (tree fn)
++{
++ if (fn == NULL_TREE)
++ return false;
++
++ if (BASELINK_P (fn))
++ {
++ tree type = TREE_TYPE (fn);
++
++ if (type && TREE_CODE (type) == METHOD_TYPE)
++ return true;
++ else if (type && TREE_CODE (type) == FUNCTION_TYPE)
++ return false;
++ /* This is an overload. Lets look into its current value. */
++ fn = get_fns (BASELINK_FUNCTIONS (fn));
++ }
++
++ if (TREE_CODE (fn) == OVERLOAD)
++ fn = OVL_CURRENT (fn);
++
++ return (DECL_P (fn)
++ && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn));
++}
++
+
+ #define PRINT_RING_SIZE 4
+
+new file mode 100644
+index 0000000..f15272d
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/template/member9.C
+@@ -0,0 +1,21 @@
++// Origin PR c++/48838
++// { dg-do compile }
++
++class DUChainItemSystem
++{
++public:
++
++ template<class T>
++ void registerTypeClass();
++
++ static DUChainItemSystem& self();
++};
++
++template<class T>
++struct DUChainItemRegistrator
++{
++ DUChainItemRegistrator()
++ {
++ DUChainItemSystem::self().registerTypeClass<T>();
++ }
++};
+--
+1.7.0.4
+