diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0218-PR-c-48749.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0218-PR-c-48749.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0218-PR-c-48749.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0218-PR-c-48749.patch new file mode 100644 index 000000000..1caa36a4f --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0218-PR-c-48749.patch @@ -0,0 +1,59 @@ +From 0a32d85a09c354725c2c18fb7ac42d2809197070 Mon Sep 17 00:00:00 2001 +From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Thu, 5 May 2011 02:51:01 +0000 +Subject: [PATCH] PR c++/48749 + * class.c (resolves_to_fixed_type_p): Don't look closely + in templates. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173414 138bc75d-0d04-0410-961f-82ee72b054a4 + +index d19610a..c833329 100644 +--- a/gcc/cp/class.c ++++ b/gcc/cp/class.c +@@ -5978,7 +5978,17 @@ resolves_to_fixed_type_p (tree instance, int* nonnull) + { + tree t = TREE_TYPE (instance); + int cdtorp = 0; +- tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp); ++ tree fixed; ++ ++ if (processing_template_decl) ++ { ++ /* In a template we only care about the type of the result. */ ++ if (nonnull) ++ *nonnull = true; ++ return true; ++ } ++ ++ fixed = fixed_type_or_null (instance, nonnull, &cdtorp); + if (fixed == NULL_TREE) + return 0; + if (POINTER_TYPE_P (t)) +new file mode 100644 +index 0000000..e236504 +--- /dev/null ++++ b/gcc/testsuite/g++.dg/conversion/base1.C +@@ -0,0 +1,20 @@ ++// PR c++/48749 ++ ++struct Tuple3 ++{ ++ float x; ++}; ++ ++struct Pos: virtual Tuple3 { }; ++ ++struct TexCoords ++{ ++ Pos pos; ++}; ++ ++template <class T> ++void eval (const TexCoords &coords) ++{ ++ const Pos &pos = coords.pos; ++ pos.x; ++} +-- +1.7.0.4 + |