diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0332-PR-c-48292.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0332-PR-c-48292.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0332-PR-c-48292.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0332-PR-c-48292.patch new file mode 100644 index 0000000000..9bc5588324 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0332-PR-c-48292.patch | |||
@@ -0,0 +1,71 @@ | |||
1 | From 8b1d0e0f8d8667c8f71aa00080108115d6891354 Mon Sep 17 00:00:00 2001 | ||
2 | From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
3 | Date: Wed, 25 May 2011 15:26:14 +0000 | ||
4 | Subject: [PATCH] PR c++/48292 | ||
5 | * pt.c (tsubst_decl) [PARM_DECL]: Handle partial instantiation of | ||
6 | function parameter pack. | ||
7 | (tsubst_pack_expansion): Likewise. | ||
8 | |||
9 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174207 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
10 | |||
11 | index b16d229..d379a8c 100644 | ||
12 | --- a/gcc/cp/pt.c | ||
13 | +++ b/gcc/cp/pt.c | ||
14 | @@ -8690,7 +8690,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, | ||
15 | have the wrong value for a recursive call. Just make a | ||
16 | dummy decl, since it's only used for its type. */ | ||
17 | arg_pack = tsubst_decl (parm_pack, args, complain); | ||
18 | - arg_pack = make_fnparm_pack (arg_pack); | ||
19 | + if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack)) | ||
20 | + /* Partial instantiation of the parm_pack, we can't build | ||
21 | + up an argument pack yet. */ | ||
22 | + arg_pack = NULL_TREE; | ||
23 | + else | ||
24 | + arg_pack = make_fnparm_pack (arg_pack); | ||
25 | } | ||
26 | } | ||
27 | else | ||
28 | @@ -9780,14 +9785,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) | ||
29 | if (DECL_TEMPLATE_PARM_P (t)) | ||
30 | SET_DECL_TEMPLATE_PARM_P (r); | ||
31 | |||
32 | - /* An argument of a function parameter pack is not a parameter | ||
33 | - pack. */ | ||
34 | - FUNCTION_PARAMETER_PACK_P (r) = false; | ||
35 | - | ||
36 | if (expanded_types) | ||
37 | /* We're on the Ith parameter of the function parameter | ||
38 | pack. */ | ||
39 | { | ||
40 | + /* An argument of a function parameter pack is not a parameter | ||
41 | + pack. */ | ||
42 | + FUNCTION_PARAMETER_PACK_P (r) = false; | ||
43 | + | ||
44 | /* Get the Ith type. */ | ||
45 | type = TREE_VEC_ELT (expanded_types, i); | ||
46 | |||
47 | new file mode 100644 | ||
48 | index 0000000..0ec69af | ||
49 | --- /dev/null | ||
50 | +++ b/gcc/testsuite/g++.dg/cpp0x/variadic109.C | ||
51 | @@ -0,0 +1,17 @@ | ||
52 | +// PR c++/48292 | ||
53 | +// { dg-options -std=c++0x } | ||
54 | + | ||
55 | +template <typename... Args> int g(Args...); | ||
56 | + | ||
57 | +template <int N = 0> | ||
58 | +struct A | ||
59 | +{ | ||
60 | + template <typename... Args> | ||
61 | + static auto f(Args... args) -> decltype(g(args...)); | ||
62 | +}; | ||
63 | + | ||
64 | +int main() | ||
65 | +{ | ||
66 | + A<>::f(); | ||
67 | + return 0; | ||
68 | +} | ||
69 | -- | ||
70 | 1.7.0.4 | ||
71 | |||