Commit 8bcc97de by Mark Mitchell Committed by Mark Mitchell

decl.c (lookup_tag): Remove code no longer needed after name-lookup improvements.

	* decl.c (lookup_tag): Remove code no longer needed after
	name-lookup improvements.
	* decl2.c (handle_class_head): Make error-recovery more robust.
	* friend.c (make_friend_class): Reject templated typename types.
	* lex.c (is_global): A template parameter isn't global.
	* parse.y (class_head): Robustify.
	* parse.c: Regenerated.

From-SVN: r27117
parent 480e2286
1999-05-24 Mark Mitchell <mark@codesourcery.com>
* decl.c (lookup_tag): Remove code no longer needed after
name-lookup improvements.
* decl2.c (handle_class_head): Make error-recovery more robust.
* friend.c (make_friend_class): Reject templated typename types.
* lex.c (is_global): A template parameter isn't global.
* parse.y (class_head): Robustify.
* parse.c: Regenerated.
1999-05-22 Mark Mitchell <mark@codesourcery.com>
* pt.c (for_each_template_parm): Walk into TYPENAME_TYPEs,
......
......@@ -5251,59 +5251,6 @@ lookup_tag (form, name, binding_level, thislevel_only)
else
return NULL_TREE;
}
if (current_class_type && level->level_chain->namespace_p)
{
/* Try looking in this class's tags before heading into
global binding level. */
tree context = current_class_type;
while (context)
{
switch (TREE_CODE_CLASS (TREE_CODE (context)))
{
tree these_tags;
case 't':
these_tags = CLASSTYPE_TAGS (context);
if (ANON_AGGRNAME_P (name))
while (these_tags)
{
if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
== name)
return TREE_VALUE (tail);
these_tags = TREE_CHAIN (these_tags);
}
else
while (these_tags)
{
if (TREE_PURPOSE (these_tags) == name)
{
if (TREE_CODE (TREE_VALUE (these_tags)) != form)
{
cp_error ("`%#D' redeclared as %C in class scope",
TREE_VALUE (tail), form);
return NULL_TREE;
}
return TREE_VALUE (tail);
}
these_tags = TREE_CHAIN (these_tags);
}
/* If this type is not yet complete, then don't
look at its context. */
if (TYPE_SIZE (context) == NULL_TREE)
goto no_context;
/* Go to next enclosing type, if any. */
context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
break;
case 'd':
context = DECL_CONTEXT (context);
break;
default:
my_friendly_abort (10);
}
continue;
no_context:
break;
}
}
}
return NULL_TREE;
}
......
......@@ -5257,7 +5257,10 @@ handle_class_head (aggr, scope, id)
else
{
if (scope)
cp_error ("`%T' does not have a nested type named `%D'", scope, id);
{
cp_error ("`%T' does not have a nested type named `%D'", scope, id);
return error_mark_node;
}
else
cp_error ("no file-scope type named `%D'", id);
......
......@@ -266,7 +266,7 @@ make_friend_class (type, friend_type)
friend_type);
return;
}
if (processing_template_decl > template_class_depth (type))
/* If the TYPE is a template then it makes sense for it to be
friends with itself; this means that each instantiation is
......@@ -281,6 +281,26 @@ make_friend_class (type, friend_type)
else
is_template_friend = 0;
if (is_template_friend
&& TREE_CODE (friend_type) == TYPENAME_TYPE)
{
/* [temp.friend]
A friend of a class or class template can be a function or
class template, a specialization of a function template or
class template, or an ordinary (nontemplate) function or
class.
But, we're looking at something like:
template <class T> friend typename S<T>::X;
which isn't any of these. */
cp_error ("typename type `%T' declare `friend'",
friend_type);
return;
}
GNU_xref_hier (type, friend_type, 0, 0, 1);
if (is_template_friend)
......
......@@ -2831,6 +2831,12 @@ is_global (d)
case TREE_LIST: d = TREE_VALUE (d); continue;
default:
my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (d)) == 'd', 980629);
/* A template parameter is not really global, even though it
has no enclosing scope. */
if (DECL_TEMPLATE_PARM_P (d))
return 0;
d = CP_DECL_CONTEXT (d);
return TREE_CODE (d) == NAMESPACE_DECL;
}
......
......@@ -693,46 +693,46 @@ static const short yyrline[] = { 0,
2031, 2034, 2040, 2043, 2046, 2048, 2050, 2054, 2060, 2068,
2075, 2079, 2081, 2086, 2089, 2092, 2094, 2096, 2100, 2105,
2112, 2116, 2120, 2127, 2131, 2134, 2137, 2143, 2145, 2157,
2161, 2166, 2188, 2190, 2193, 2195, 2200, 2202, 2204, 2206,
2208, 2210, 2214, 2222, 2225, 2227, 2231, 2238, 2244, 2250,
2256, 2266, 2272, 2276, 2283, 2311, 2321, 2327, 2330, 2333,
2335, 2339, 2341, 2345, 2350, 2356, 2359, 2360, 2381, 2404,
2406, 2410, 2421, 2435, 2436, 2437, 2438, 2441, 2456, 2461,
2467, 2469, 2474, 2476, 2478, 2480, 2482, 2484, 2487, 2497,
2504, 2529, 2535, 2538, 2541, 2543, 2554, 2559, 2562, 2567,
2570, 2577, 2587, 2590, 2597, 2607, 2609, 2612, 2614, 2617,
2624, 2632, 2639, 2645, 2651, 2659, 2663, 2668, 2672, 2675,
2684, 2686, 2690, 2693, 2698, 2702, 2708, 2719, 2722, 2726,
2730, 2738, 2743, 2749, 2752, 2754, 2756, 2762, 2764, 2773,
2776, 2778, 2780, 2782, 2786, 2789, 2792, 2794, 2796, 2798,
2802, 2805, 2816, 2826, 2828, 2829, 2833, 2841, 2843, 2851,
2854, 2856, 2858, 2860, 2864, 2867, 2870, 2872, 2874, 2876,
2880, 2883, 2886, 2888, 2890, 2892, 2894, 2901, 2905, 2910,
2914, 2919, 2921, 2925, 2928, 2930, 2933, 2935, 2936, 2939,
2941, 2943, 2949, 2960, 2966, 2972, 2986, 2988, 2992, 3006,
3008, 3010, 3014, 3020, 3033, 3035, 3039, 3052, 3058, 3060,
3061, 3062, 3070, 3075, 3084, 3085, 3089, 3092, 3098, 3104,
3107, 3109, 3111, 3113, 3117, 3121, 3125, 3128, 3132, 3134,
3143, 3146, 3148, 3150, 3152, 3154, 3156, 3158, 3160, 3164,
3168, 3172, 3176, 3177, 3179, 3181, 3183, 3185, 3187, 3189,
3191, 3193, 3201, 3203, 3204, 3205, 3208, 3214, 3216, 3221,
3223, 3226, 3240, 3243, 3246, 3250, 3253, 3260, 3262, 3265,
3267, 3269, 3272, 3275, 3278, 3281, 3283, 3286, 3290, 3292,
3298, 3300, 3301, 3303, 3308, 3310, 3312, 3314, 3316, 3319,
3320, 3322, 3325, 3326, 3329, 3329, 3332, 3332, 3335, 3335,
3337, 3339, 3341, 3343, 3349, 3355, 3358, 3361, 3367, 3369,
3371, 3375, 3377, 3378, 3379, 3381, 3384, 3391, 3396, 3402,
3406, 3408, 3411, 3413, 3416, 3420, 3422, 3425, 3427, 3430,
3447, 3453, 3461, 3463, 3465, 3469, 3472, 3473, 3481, 3485,
3489, 3492, 3493, 3499, 3502, 3505, 3507, 3511, 3516, 3519,
3529, 3534, 3535, 3542, 3545, 3548, 3550, 3553, 3555, 3565,
3579, 3583, 3586, 3588, 3592, 3596, 3599, 3602, 3604, 3608,
3610, 3617, 3624, 3627, 3631, 3635, 3639, 3645, 3649, 3654,
3656, 3659, 3664, 3670, 3681, 3684, 3686, 3690, 3695, 3697,
3704, 3707, 3709, 3711, 3717, 3722, 3725, 3727, 3729, 3731,
3733, 3735, 3737, 3739, 3741, 3743, 3745, 3747, 3749, 3751,
3753, 3755, 3757, 3759, 3761, 3763, 3765, 3767, 3769, 3771,
3773, 3775, 3777, 3779, 3781, 3783, 3785, 3787, 3790, 3792
2161, 2166, 2190, 2192, 2195, 2197, 2202, 2204, 2206, 2208,
2210, 2212, 2216, 2224, 2227, 2229, 2233, 2240, 2246, 2252,
2258, 2268, 2274, 2278, 2285, 2313, 2323, 2329, 2332, 2335,
2337, 2341, 2343, 2347, 2352, 2358, 2361, 2362, 2383, 2406,
2408, 2412, 2423, 2437, 2438, 2439, 2440, 2443, 2458, 2463,
2469, 2471, 2476, 2478, 2480, 2482, 2484, 2486, 2489, 2499,
2506, 2531, 2537, 2540, 2543, 2545, 2556, 2561, 2564, 2569,
2572, 2579, 2589, 2592, 2599, 2609, 2611, 2614, 2616, 2619,
2626, 2634, 2641, 2647, 2653, 2661, 2665, 2670, 2674, 2677,
2686, 2688, 2692, 2695, 2700, 2704, 2710, 2721, 2724, 2728,
2732, 2740, 2745, 2751, 2754, 2756, 2758, 2764, 2766, 2775,
2778, 2780, 2782, 2784, 2788, 2791, 2794, 2796, 2798, 2800,
2804, 2807, 2818, 2828, 2830, 2831, 2835, 2843, 2845, 2853,
2856, 2858, 2860, 2862, 2866, 2869, 2872, 2874, 2876, 2878,
2882, 2885, 2888, 2890, 2892, 2894, 2896, 2903, 2907, 2912,
2916, 2921, 2923, 2927, 2930, 2932, 2935, 2937, 2938, 2941,
2943, 2945, 2951, 2962, 2968, 2974, 2988, 2990, 2994, 3008,
3010, 3012, 3016, 3022, 3035, 3037, 3041, 3054, 3060, 3062,
3063, 3064, 3072, 3077, 3086, 3087, 3091, 3094, 3100, 3106,
3109, 3111, 3113, 3115, 3119, 3123, 3127, 3130, 3134, 3136,
3145, 3148, 3150, 3152, 3154, 3156, 3158, 3160, 3162, 3166,
3170, 3174, 3178, 3179, 3181, 3183, 3185, 3187, 3189, 3191,
3193, 3195, 3203, 3205, 3206, 3207, 3210, 3216, 3218, 3223,
3225, 3228, 3242, 3245, 3248, 3252, 3255, 3262, 3264, 3267,
3269, 3271, 3274, 3277, 3280, 3283, 3285, 3288, 3292, 3294,
3300, 3302, 3303, 3305, 3310, 3312, 3314, 3316, 3318, 3321,
3322, 3324, 3327, 3328, 3331, 3331, 3334, 3334, 3337, 3337,
3339, 3341, 3343, 3345, 3351, 3357, 3360, 3363, 3369, 3371,
3373, 3377, 3379, 3380, 3381, 3383, 3386, 3393, 3398, 3404,
3408, 3410, 3413, 3415, 3418, 3422, 3424, 3427, 3429, 3432,
3449, 3455, 3463, 3465, 3467, 3471, 3474, 3475, 3483, 3487,
3491, 3494, 3495, 3501, 3504, 3507, 3509, 3513, 3518, 3521,
3531, 3536, 3537, 3544, 3547, 3550, 3552, 3555, 3557, 3567,
3581, 3585, 3588, 3590, 3594, 3598, 3601, 3604, 3606, 3610,
3612, 3619, 3626, 3629, 3633, 3637, 3641, 3647, 3651, 3656,
3658, 3661, 3666, 3672, 3683, 3686, 3688, 3692, 3697, 3699,
3706, 3709, 3711, 3713, 3719, 3724, 3727, 3729, 3731, 3733,
3735, 3737, 3739, 3741, 3743, 3745, 3747, 3749, 3751, 3753,
3755, 3757, 3759, 3761, 3763, 3765, 3767, 3769, 3771, 3773,
3775, 3777, 3779, 3781, 3783, 3785, 3787, 3789, 3792, 3794
};
#endif
......@@ -6397,10 +6397,12 @@ case 481:
case 482:
#line 2167 "parse.y"
{
if (yyvsp[0].ftype.new_type_flag)
if (yyvsp[0].ftype.new_type_flag && yyvsp[0].ftype.t != error_mark_node)
pop_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (yyvsp[0].ftype.t)));
yyval.ftype.new_type_flag = 0;
if (TYPE_BINFO (yyvsp[0].ftype.t) == NULL_TREE)
if (yyvsp[0].ftype.t == error_mark_node)
yyval.ftype.t = yyvsp[0].ftype.t;
else if (TYPE_BINFO (yyvsp[0].ftype.t) == NULL_TREE)
{
cp_error ("%T is not a class type", yyvsp[0].ftype.t);
yyval.ftype.t = error_mark_node;
......@@ -6417,51 +6419,51 @@ case 482:
;
break;}
case 486:
#line 2196 "parse.y"
#line 2198 "parse.y"
{ if (pedantic && !in_system_header)
pedwarn ("comma at end of enumerator list"); ;
break;}
case 488:
#line 2203 "parse.y"
#line 2205 "parse.y"
{ error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
break;}
case 489:
#line 2205 "parse.y"
#line 2207 "parse.y"
{ error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
break;}
case 490:
#line 2207 "parse.y"
#line 2209 "parse.y"
{ error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
break;}
case 491:
#line 2209 "parse.y"
#line 2211 "parse.y"
{ error ("no body nor ';' separates two class, struct or union declarations"); ;
break;}
case 492:
#line 2211 "parse.y"
#line 2213 "parse.y"
{ yyval.ttype = build_decl_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;
break;}
case 493:
#line 2216 "parse.y"
#line 2218 "parse.y"
{
current_aggr = yyvsp[-1].ttype;
yyval.ttype = yyvsp[0].ttype;
;
break;}
case 494:
#line 2224 "parse.y"
#line 2226 "parse.y"
{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
break;}
case 495:
#line 2226 "parse.y"
#line 2228 "parse.y"
{ yyungetc ('{', 1); ;
break;}
case 496:
#line 2228 "parse.y"
#line 2230 "parse.y"
{ yyungetc (':', 1); ;
break;}
case 497:
#line 2233 "parse.y"
#line 2235 "parse.y"
{
current_aggr = yyvsp[-2].ttype;
yyval.ftype.t = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
......@@ -6469,7 +6471,7 @@ case 497:
;
break;}
case 498:
#line 2239 "parse.y"
#line 2241 "parse.y"
{
current_aggr = yyvsp[-3].ttype;
yyval.ftype.t = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
......@@ -6477,7 +6479,7 @@ case 498:
;
break;}
case 499:
#line 2245 "parse.y"
#line 2247 "parse.y"
{
current_aggr = yyvsp[-2].ttype;
yyval.ftype.t = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
......@@ -6485,7 +6487,7 @@ case 499:
;
break;}
case 500:
#line 2251 "parse.y"
#line 2253 "parse.y"
{
current_aggr = yyvsp[-1].ttype;
yyval.ftype.t = yyvsp[0].ttype;
......@@ -6493,7 +6495,7 @@ case 500:
;
break;}
case 501:
#line 2257 "parse.y"
#line 2259 "parse.y"
{
current_aggr = yyvsp[-2].ttype;
yyval.ftype.t = yyvsp[0].ttype;
......@@ -6503,18 +6505,18 @@ case 501:
;
break;}
case 502:
#line 2268 "parse.y"
#line 2270 "parse.y"
{
yyval.ftype.t = xref_tag (current_aggr, yyvsp[0].ttype, 1);
yyval.ftype.new_type_flag = 0;
;
break;}
case 503:
#line 2273 "parse.y"
#line 2275 "parse.y"
{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
break;}
case 504:
#line 2277 "parse.y"
#line 2279 "parse.y"
{
yyval.ftype.t = yyvsp[-1].ttype;
yyval.ftype.new_type_flag = 0;
......@@ -6523,7 +6525,7 @@ case 504:
;
break;}
case 505:
#line 2285 "parse.y"
#line 2287 "parse.y"
{
if (yyvsp[-1].ftype.t != error_mark_node)
{
......@@ -6550,51 +6552,51 @@ case 505:
;
break;}
case 506:
#line 2313 "parse.y"
#line 2315 "parse.y"
{ yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), 0);
yyungetc ('{', 1); ;
break;}
case 507:
#line 2323 "parse.y"
#line 2325 "parse.y"
{
yyval.ftype.t = yyvsp[0].ttype;
yyval.ftype.new_type_flag = 0;
;
break;}
case 509:
#line 2332 "parse.y"
#line 2334 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 510:
#line 2334 "parse.y"
#line 2336 "parse.y"
{ yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
break;}
case 511:
#line 2336 "parse.y"
#line 2338 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 513:
#line 2342 "parse.y"
#line 2344 "parse.y"
{ yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
break;}
case 514:
#line 2347 "parse.y"
#line 2349 "parse.y"
{ yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype,
current_aggr
== signature_type_node); ;
break;}
case 515:
#line 2351 "parse.y"
#line 2353 "parse.y"
{ yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype,
current_aggr
== signature_type_node); ;
break;}
case 516:
#line 2358 "parse.y"
#line 2360 "parse.y"
{ if (yyval.ttype != error_mark_node) yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
break;}
case 518:
#line 2361 "parse.y"
#line 2363 "parse.y"
{
if (current_aggr == signature_type_node)
{
......@@ -6617,7 +6619,7 @@ case 518:
;
break;}
case 519:
#line 2382 "parse.y"
#line 2384 "parse.y"
{
if (current_aggr == signature_type_node)
{
......@@ -6640,13 +6642,13 @@ case 519:
;
break;}
case 521:
#line 2407 "parse.y"
#line 2409 "parse.y"
{ if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
cp_error ("`%D' access", yyvsp[-1].ttype);
yyval.ttype = access_default_virtual_node; ;
break;}
case 522:
#line 2411 "parse.y"
#line 2413 "parse.y"
{
if (yyvsp[-2].ttype != access_default_virtual_node)
error ("multiple access specifiers");
......@@ -6659,7 +6661,7 @@ case 522:
;
break;}
case 523:
#line 2422 "parse.y"
#line 2424 "parse.y"
{ if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
cp_error ("`%D' access", yyvsp[-1].ttype);
else if (yyval.ttype == access_public_node)
......@@ -6673,7 +6675,7 @@ case 523:
;
break;}
case 528:
#line 2443 "parse.y"
#line 2445 "parse.y"
{
if (current_aggr == signature_type_node)
{
......@@ -6685,49 +6687,49 @@ case 528:
;
break;}
case 529:
#line 2458 "parse.y"
#line 2460 "parse.y"
{
finish_member_declaration (yyvsp[0].ttype);
;
break;}
case 530:
#line 2462 "parse.y"
#line 2464 "parse.y"
{
finish_member_declaration (yyvsp[0].ttype);
;
break;}
case 532:
#line 2470 "parse.y"
#line 2472 "parse.y"
{ error ("missing ';' before right brace");
yyungetc ('}', 0); ;
break;}
case 533:
#line 2475 "parse.y"
#line 2477 "parse.y"
{ yyval.ttype = finish_method (yyval.ttype); ;
break;}
case 534:
#line 2477 "parse.y"
#line 2479 "parse.y"
{ yyval.ttype = finish_method (yyval.ttype); ;
break;}
case 535:
#line 2479 "parse.y"
#line 2481 "parse.y"
{ yyval.ttype = finish_method (yyval.ttype); ;
break;}
case 536:
#line 2481 "parse.y"
#line 2483 "parse.y"
{ yyval.ttype = finish_method (yyval.ttype); ;
break;}
case 537:
#line 2483 "parse.y"
#line 2485 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 538:
#line 2485 "parse.y"
#line 2487 "parse.y"
{ yyval.ttype = yyvsp[0].ttype;
pedantic = yyvsp[-1].itype; ;
break;}
case 539:
#line 2488 "parse.y"
#line 2490 "parse.y"
{
if (yyvsp[0].ttype)
yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
......@@ -6739,14 +6741,14 @@ case 539:
;
break;}
case 540:
#line 2498 "parse.y"
#line 2500 "parse.y"
{
yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t);
finish_template_decl (yyvsp[-2].ttype);
;
break;}
case 541:
#line 2509 "parse.y"
#line 2511 "parse.y"
{
/* Most of the productions for component_decl only
allow the creation of one new member, so we call
......@@ -6769,7 +6771,7 @@ case 541:
;
break;}
case 542:
#line 2530 "parse.y"
#line 2532 "parse.y"
{
if (!yyvsp[0].itype)
grok_x_components (yyvsp[-1].ttype);
......@@ -6777,45 +6779,45 @@ case 542:
;
break;}
case 543:
#line 2536 "parse.y"
#line 2538 "parse.y"
{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
break;}
case 544:
#line 2539 "parse.y"
#line 2541 "parse.y"
{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
break;}
case 545:
#line 2542 "parse.y"
#line 2544 "parse.y"
{ yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
break;}
case 546:
#line 2544 "parse.y"
#line 2546 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 547:
#line 2555 "parse.y"
#line 2557 "parse.y"
{ tree specs, attrs;
split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, attrs)); ;
break;}
case 548:
#line 2560 "parse.y"
#line 2562 "parse.y"
{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
break;}
case 549:
#line 2563 "parse.y"
#line 2565 "parse.y"
{ yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
break;}
case 550:
#line 2569 "parse.y"
#line 2571 "parse.y"
{ yyval.itype = 0; ;
break;}
case 551:
#line 2571 "parse.y"
#line 2573 "parse.y"
{
if (PROCESSING_REAL_TEMPLATE_DECL_P ())
yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
......@@ -6824,7 +6826,7 @@ case 551:
;
break;}
case 552:
#line 2578 "parse.y"
#line 2580 "parse.y"
{
check_multiple_declarators ();
if (PROCESSING_REAL_TEMPLATE_DECL_P ())
......@@ -6834,11 +6836,11 @@ case 552:
;
break;}
case 553:
#line 2589 "parse.y"
#line 2591 "parse.y"
{ yyval.itype = 0; ;
break;}
case 554:
#line 2591 "parse.y"
#line 2593 "parse.y"
{
if (PROCESSING_REAL_TEMPLATE_DECL_P ())
yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
......@@ -6847,7 +6849,7 @@ case 554:
;
break;}
case 555:
#line 2598 "parse.y"
#line 2600 "parse.y"
{
check_multiple_declarators ();
if (PROCESSING_REAL_TEMPLATE_DECL_P ())
......@@ -6857,7 +6859,7 @@ case 555:
;
break;}
case 560:
#line 2619 "parse.y"
#line 2621 "parse.y"
{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-4].ttype = current_declspecs;
......@@ -6865,7 +6867,7 @@ case 560:
build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
break;}
case 561:
#line 2625 "parse.y"
#line 2627 "parse.y"
{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-4].ttype = current_declspecs;
......@@ -6873,7 +6875,7 @@ case 561:
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 562:
#line 2634 "parse.y"
#line 2636 "parse.y"
{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-4].ttype = current_declspecs;
......@@ -6881,7 +6883,7 @@ case 562:
build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
break;}
case 563:
#line 2640 "parse.y"
#line 2642 "parse.y"
{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-4].ttype = current_declspecs;
......@@ -6889,7 +6891,7 @@ case 563:
build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
break;}
case 564:
#line 2646 "parse.y"
#line 2648 "parse.y"
{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-4].ttype = current_declspecs;
......@@ -6897,7 +6899,7 @@ case 564:
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 565:
#line 2652 "parse.y"
#line 2654 "parse.y"
{ split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
&prefix_attributes);
yyvsp[-3].ttype = current_declspecs;
......@@ -6905,54 +6907,54 @@ case 565:
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 566:
#line 2661 "parse.y"
#line 2663 "parse.y"
{ yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
break;}
case 567:
#line 2664 "parse.y"
#line 2666 "parse.y"
{ yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 568:
#line 2670 "parse.y"
#line 2672 "parse.y"
{ yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
break;}
case 569:
#line 2673 "parse.y"
#line 2675 "parse.y"
{ yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 570:
#line 2676 "parse.y"
#line 2678 "parse.y"
{ yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
break;}
case 572:
#line 2687 "parse.y"
#line 2689 "parse.y"
{ TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
break;}
case 573:
#line 2692 "parse.y"
#line 2694 "parse.y"
{ yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
break;}
case 574:
#line 2694 "parse.y"
#line 2696 "parse.y"
{ yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
break;}
case 575:
#line 2700 "parse.y"
#line 2702 "parse.y"
{ yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 576:
#line 2703 "parse.y"
#line 2705 "parse.y"
{ yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE);
yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
break;}
case 577:
#line 2710 "parse.y"
#line 2712 "parse.y"
{
if (pedantic)
pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
......@@ -6962,49 +6964,49 @@ case 577:
;
break;}
case 578:
#line 2721 "parse.y"
#line 2723 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 579:
#line 2723 "parse.y"
#line 2725 "parse.y"
{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
break;}
case 580:
#line 2728 "parse.y"
#line 2730 "parse.y"
{ yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
yyval.ftype.new_type_flag = 0; ;
break;}
case 581:
#line 2731 "parse.y"
#line 2733 "parse.y"
{ yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 582:
#line 2740 "parse.y"
#line 2742 "parse.y"
{ yyval.itype = suspend_momentary (); ;
break;}
case 583:
#line 2745 "parse.y"
#line 2747 "parse.y"
{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
break;}
case 584:
#line 2751 "parse.y"
#line 2753 "parse.y"
{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 585:
#line 2753 "parse.y"
#line 2755 "parse.y"
{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 586:
#line 2755 "parse.y"
#line 2757 "parse.y"
{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
break;}
case 587:
#line 2757 "parse.y"
#line 2759 "parse.y"
{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
break;}
case 589:
#line 2765 "parse.y"
#line 2767 "parse.y"
{
/* Provide support for '(' attributes '*' declarator ')'
etc */
......@@ -7012,51 +7014,51 @@ case 589:
;
break;}
case 590:
#line 2775 "parse.y"
#line 2777 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 591:
#line 2777 "parse.y"
#line 2779 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 592:
#line 2779 "parse.y"
#line 2781 "parse.y"
{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 593:
#line 2781 "parse.y"
#line 2783 "parse.y"
{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 594:
#line 2783 "parse.y"
#line 2785 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 596:
#line 2791 "parse.y"
#line 2793 "parse.y"
{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 597:
#line 2793 "parse.y"
#line 2795 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
break;}
case 598:
#line 2795 "parse.y"
#line 2797 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
break;}
case 599:
#line 2797 "parse.y"
#line 2799 "parse.y"
{ yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 600:
#line 2799 "parse.y"
#line 2801 "parse.y"
{ push_nested_class (yyvsp[-1].ttype, 3);
yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
break;}
case 602:
#line 2807 "parse.y"
#line 2809 "parse.y"
{
if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
{
......@@ -7068,7 +7070,7 @@ case 602:
;
break;}
case 603:
#line 2817 "parse.y"
#line 2819 "parse.y"
{
if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
......@@ -7078,15 +7080,15 @@ case 603:
;
break;}
case 606:
#line 2830 "parse.y"
#line 2832 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 607:
#line 2835 "parse.y"
#line 2837 "parse.y"
{ yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
break;}
case 609:
#line 2844 "parse.y"
#line 2846 "parse.y"
{
/* Provide support for '(' attributes '*' declarator ')'
etc */
......@@ -7094,122 +7096,122 @@ case 609:
;
break;}
case 610:
#line 2853 "parse.y"
#line 2855 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 611:
#line 2855 "parse.y"
#line 2857 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 612:
#line 2857 "parse.y"
#line 2859 "parse.y"
{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 613:
#line 2859 "parse.y"
#line 2861 "parse.y"
{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 614:
#line 2861 "parse.y"
#line 2863 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 616:
#line 2869 "parse.y"
#line 2871 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 617:
#line 2871 "parse.y"
#line 2873 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 618:
#line 2873 "parse.y"
#line 2875 "parse.y"
{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 619:
#line 2875 "parse.y"
#line 2877 "parse.y"
{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 620:
#line 2877 "parse.y"
#line 2879 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 622:
#line 2885 "parse.y"
#line 2887 "parse.y"
{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 623:
#line 2887 "parse.y"
#line 2889 "parse.y"
{ yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 624:
#line 2889 "parse.y"
#line 2891 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
break;}
case 625:
#line 2891 "parse.y"
#line 2893 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
break;}
case 626:
#line 2893 "parse.y"
#line 2895 "parse.y"
{ enter_scope_of (yyvsp[0].ttype); ;
break;}
case 627:
#line 2895 "parse.y"
#line 2897 "parse.y"
{ got_scope = NULL_TREE;
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
enter_scope_of (yyval.ttype);
;
break;}
case 628:
#line 2903 "parse.y"
#line 2905 "parse.y"
{ got_scope = NULL_TREE;
yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
break;}
case 629:
#line 2906 "parse.y"
#line 2908 "parse.y"
{ got_scope = NULL_TREE;
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 630:
#line 2912 "parse.y"
#line 2914 "parse.y"
{ got_scope = NULL_TREE;
yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
break;}
case 631:
#line 2915 "parse.y"
#line 2917 "parse.y"
{ got_scope = NULL_TREE;
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 633:
#line 2922 "parse.y"
#line 2924 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 634:
#line 2927 "parse.y"
#line 2929 "parse.y"
{ yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
break;}
case 635:
#line 2929 "parse.y"
#line 2931 "parse.y"
{ yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
break;}
case 636:
#line 2931 "parse.y"
#line 2933 "parse.y"
{ yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 641:
#line 2942 "parse.y"
#line 2944 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 642:
#line 2944 "parse.y"
#line 2946 "parse.y"
{ got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
case 643:
#line 2951 "parse.y"
#line 2953 "parse.y"
{
if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
{
......@@ -7221,7 +7223,7 @@ case 643:
;
break;}
case 644:
#line 2961 "parse.y"
#line 2963 "parse.y"
{
if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
yyval.ttype = lastiddecl;
......@@ -7229,7 +7231,7 @@ case 644:
;
break;}
case 645:
#line 2967 "parse.y"
#line 2969 "parse.y"
{
if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
yyval.ttype = lastiddecl;
......@@ -7237,15 +7239,15 @@ case 645:
;
break;}
case 646:
#line 2973 "parse.y"
#line 2975 "parse.y"
{ got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
break;}
case 648:
#line 2989 "parse.y"
#line 2991 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 649:
#line 2994 "parse.y"
#line 2996 "parse.y"
{
if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
......@@ -7260,26 +7262,26 @@ case 649:
;
break;}
case 650:
#line 3007 "parse.y"
#line 3009 "parse.y"
{ yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
break;}
case 651:
#line 3009 "parse.y"
#line 3011 "parse.y"
{ yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 652:
#line 3011 "parse.y"
#line 3013 "parse.y"
{ yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 653:
#line 3016 "parse.y"
#line 3018 "parse.y"
{
if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
;
break;}
case 654:
#line 3021 "parse.y"
#line 3023 "parse.y"
{
if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
......@@ -7294,15 +7296,15 @@ case 654:
;
break;}
case 655:
#line 3034 "parse.y"
#line 3036 "parse.y"
{ got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
break;}
case 656:
#line 3036 "parse.y"
#line 3038 "parse.y"
{ got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
case 657:
#line 3041 "parse.y"
#line 3043 "parse.y"
{
if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
yyvsp[-1].ttype = lastiddecl;
......@@ -7316,7 +7318,7 @@ case 657:
;
break;}
case 658:
#line 3053 "parse.y"
#line 3055 "parse.y"
{
if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
yyval.ttype = lastiddecl;
......@@ -7324,11 +7326,11 @@ case 658:
;
break;}
case 659:
#line 3059 "parse.y"
#line 3061 "parse.y"
{ got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
break;}
case 662:
#line 3063 "parse.y"
#line 3065 "parse.y"
{
if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
yyval.ttype = lastiddecl;
......@@ -7336,11 +7338,11 @@ case 662:
;
break;}
case 663:
#line 3072 "parse.y"
#line 3074 "parse.y"
{ yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
case 664:
#line 3077 "parse.y"
#line 3079 "parse.y"
{
if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
......@@ -7350,59 +7352,59 @@ case 664:
;
break;}
case 666:
#line 3086 "parse.y"
#line 3088 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 667:
#line 3091 "parse.y"
#line 3093 "parse.y"
{ got_scope = NULL_TREE; ;
break;}
case 668:
#line 3093 "parse.y"
#line 3095 "parse.y"
{ yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
break;}
case 669:
#line 3100 "parse.y"
#line 3102 "parse.y"
{ got_scope = void_type_node; ;
break;}
case 670:
#line 3106 "parse.y"
#line 3108 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 671:
#line 3108 "parse.y"
#line 3110 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 672:
#line 3110 "parse.y"
#line 3112 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 673:
#line 3112 "parse.y"
#line 3114 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
break;}
case 674:
#line 3114 "parse.y"
#line 3116 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
;
break;}
case 675:
#line 3118 "parse.y"
#line 3120 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 677:
#line 3127 "parse.y"
#line 3129 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
break;}
case 678:
#line 3129 "parse.y"
#line 3131 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
break;}
case 680:
#line 3135 "parse.y"
#line 3137 "parse.y"
{
/* Provide support for '(' attributes '*' declarator ')'
etc */
......@@ -7410,96 +7412,96 @@ case 680:
;
break;}
case 681:
#line 3145 "parse.y"
#line 3147 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 682:
#line 3147 "parse.y"
#line 3149 "parse.y"
{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 683:
#line 3149 "parse.y"
#line 3151 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
break;}
case 684:
#line 3151 "parse.y"
#line 3153 "parse.y"
{ yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
break;}
case 685:
#line 3153 "parse.y"
#line 3155 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 686:
#line 3155 "parse.y"
#line 3157 "parse.y"
{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
break;}
case 687:
#line 3157 "parse.y"
#line 3159 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
break;}
case 688:
#line 3159 "parse.y"
#line 3161 "parse.y"
{ yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
break;}
case 689:
#line 3161 "parse.y"
#line 3163 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
;
break;}
case 690:
#line 3165 "parse.y"
#line 3167 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 692:
#line 3174 "parse.y"
#line 3176 "parse.y"
{ yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 694:
#line 3178 "parse.y"
#line 3180 "parse.y"
{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 695:
#line 3180 "parse.y"
#line 3182 "parse.y"
{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 696:
#line 3182 "parse.y"
#line 3184 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
break;}
case 697:
#line 3184 "parse.y"
#line 3186 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
break;}
case 698:
#line 3186 "parse.y"
#line 3188 "parse.y"
{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 699:
#line 3188 "parse.y"
#line 3190 "parse.y"
{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 700:
#line 3190 "parse.y"
#line 3192 "parse.y"
{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 701:
#line 3192 "parse.y"
#line 3194 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
break;}
case 702:
#line 3194 "parse.y"
#line 3196 "parse.y"
{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
break;}
case 709:
#line 3217 "parse.y"
#line 3219 "parse.y"
{ if (pedantic)
pedwarn ("ANSI C++ forbids label declarations"); ;
break;}
case 712:
#line 3228 "parse.y"
#line 3230 "parse.y"
{ tree link;
for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
{
......@@ -7510,181 +7512,181 @@ case 712:
;
break;}
case 713:
#line 3242 "parse.y"
#line 3244 "parse.y"
{;
break;}
case 715:
#line 3248 "parse.y"
#line 3250 "parse.y"
{ yyval.ttype = begin_compound_stmt (0); ;
break;}
case 716:
#line 3250 "parse.y"
#line 3252 "parse.y"
{ yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
break;}
case 717:
#line 3255 "parse.y"
#line 3257 "parse.y"
{
yyval.ttype = begin_if_stmt ();
cond_stmt_keyword = "if";
;
break;}
case 718:
#line 3260 "parse.y"
#line 3262 "parse.y"
{ finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
break;}
case 719:
#line 3262 "parse.y"
#line 3264 "parse.y"
{ yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
break;}
case 721:
#line 3267 "parse.y"
#line 3269 "parse.y"
{ yyval.ttype = begin_compound_stmt (0); ;
break;}
case 722:
#line 3269 "parse.y"
#line 3271 "parse.y"
{ yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
break;}
case 723:
#line 3274 "parse.y"
#line 3276 "parse.y"
{;
break;}
case 725:
#line 3280 "parse.y"
#line 3282 "parse.y"
{ finish_stmt (); ;
break;}
case 726:
#line 3282 "parse.y"
#line 3284 "parse.y"
{ finish_expr_stmt (yyvsp[-1].ttype); ;
break;}
case 727:
#line 3284 "parse.y"
#line 3286 "parse.y"
{ begin_else_clause (); ;
break;}
case 728:
#line 3286 "parse.y"
#line 3288 "parse.y"
{
finish_else_clause (yyvsp[-3].ttype);
finish_if_stmt ();
;
break;}
case 729:
#line 3291 "parse.y"
#line 3293 "parse.y"
{ finish_if_stmt (); ;
break;}
case 730:
#line 3293 "parse.y"
#line 3295 "parse.y"
{
yyval.ttype = begin_while_stmt ();
cond_stmt_keyword = "while";
;
break;}
case 731:
#line 3298 "parse.y"
#line 3300 "parse.y"
{ finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
break;}
case 732:
#line 3300 "parse.y"
#line 3302 "parse.y"
{ finish_while_stmt (yyvsp[-3].ttype); ;
break;}
case 733:
#line 3302 "parse.y"
#line 3304 "parse.y"
{ yyval.ttype = begin_do_stmt (); ;
break;}
case 734:
#line 3304 "parse.y"
#line 3306 "parse.y"
{
finish_do_body (yyvsp[-2].ttype);
cond_stmt_keyword = "do";
;
break;}
case 735:
#line 3309 "parse.y"
#line 3311 "parse.y"
{ finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
break;}
case 736:
#line 3311 "parse.y"
#line 3313 "parse.y"
{ yyval.ttype = begin_for_stmt (); ;
break;}
case 737:
#line 3313 "parse.y"
#line 3315 "parse.y"
{ finish_for_init_stmt (yyvsp[-2].ttype); ;
break;}
case 738:
#line 3315 "parse.y"
#line 3317 "parse.y"
{ finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
break;}
case 739:
#line 3317 "parse.y"
#line 3319 "parse.y"
{ finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
break;}
case 740:
#line 3319 "parse.y"
#line 3321 "parse.y"
{ finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
break;}
case 741:
#line 3321 "parse.y"
#line 3323 "parse.y"
{ begin_switch_stmt (); ;
break;}
case 742:
#line 3323 "parse.y"
#line 3325 "parse.y"
{ yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
break;}
case 743:
#line 3325 "parse.y"
#line 3327 "parse.y"
{ finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
case 744:
#line 3327 "parse.y"
#line 3329 "parse.y"
{ finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
break;}
case 746:
#line 3330 "parse.y"
#line 3332 "parse.y"
{ finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
break;}
case 748:
#line 3333 "parse.y"
#line 3335 "parse.y"
{ finish_case_label (NULL_TREE, NULL_TREE); ;
break;}
case 750:
#line 3336 "parse.y"
#line 3338 "parse.y"
{ finish_break_stmt (); ;
break;}
case 751:
#line 3338 "parse.y"
#line 3340 "parse.y"
{ finish_continue_stmt (); ;
break;}
case 752:
#line 3340 "parse.y"
#line 3342 "parse.y"
{ finish_return_stmt (NULL_TREE); ;
break;}
case 753:
#line 3342 "parse.y"
#line 3344 "parse.y"
{ finish_return_stmt (yyvsp[-1].ttype); ;
break;}
case 754:
#line 3344 "parse.y"
#line 3346 "parse.y"
{
finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
NULL_TREE);
;
break;}
case 755:
#line 3350 "parse.y"
#line 3352 "parse.y"
{
finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
NULL_TREE);
;
break;}
case 756:
#line 3356 "parse.y"
#line 3358 "parse.y"
{ finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
break;}
case 757:
#line 3360 "parse.y"
#line 3362 "parse.y"
{ finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
break;}
case 758:
#line 3362 "parse.y"
#line 3364 "parse.y"
{
if (pedantic)
pedwarn ("ANSI C++ forbids computed gotos");
......@@ -7692,29 +7694,29 @@ case 758:
;
break;}
case 759:
#line 3368 "parse.y"
#line 3370 "parse.y"
{ finish_goto_stmt (yyvsp[-1].ttype); ;
break;}
case 760:
#line 3370 "parse.y"
#line 3372 "parse.y"
{ finish_stmt (); ;
break;}
case 761:
#line 3372 "parse.y"
#line 3374 "parse.y"
{ error ("label must be followed by statement");
yyungetc ('}', 0);
finish_stmt (); ;
break;}
case 762:
#line 3376 "parse.y"
#line 3378 "parse.y"
{ finish_stmt (); ;
break;}
case 765:
#line 3380 "parse.y"
#line 3382 "parse.y"
{ do_local_using_decl (yyvsp[0].ttype); ;
break;}
case 767:
#line 3386 "parse.y"
#line 3388 "parse.y"
{
if (! current_function_parms_stored)
store_parm_decls ();
......@@ -7722,54 +7724,54 @@ case 767:
;
break;}
case 768:
#line 3392 "parse.y"
#line 3394 "parse.y"
{
expand_start_all_catch ();
;
break;}
case 769:
#line 3396 "parse.y"
#line 3398 "parse.y"
{
expand_end_all_catch ();
yyval.itype = yyvsp[-3].itype;
;
break;}
case 770:
#line 3404 "parse.y"
#line 3406 "parse.y"
{ yyval.ttype = begin_try_block (); ;
break;}
case 771:
#line 3406 "parse.y"
#line 3408 "parse.y"
{ finish_try_block (yyvsp[-1].ttype); ;
break;}
case 772:
#line 3408 "parse.y"
#line 3410 "parse.y"
{ finish_handler_sequence (yyvsp[-3].ttype); ;
break;}
case 775:
#line 3418 "parse.y"
#line 3420 "parse.y"
{ yyval.ttype = begin_handler(); ;
break;}
case 776:
#line 3420 "parse.y"
#line 3422 "parse.y"
{ finish_handler_parms (yyvsp[-1].ttype); ;
break;}
case 777:
#line 3422 "parse.y"
#line 3424 "parse.y"
{ finish_handler (yyvsp[-3].ttype); ;
break;}
case 780:
#line 3432 "parse.y"
#line 3434 "parse.y"
{ expand_start_catch_block (NULL_TREE, NULL_TREE); ;
break;}
case 781:
#line 3448 "parse.y"
#line 3450 "parse.y"
{ check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
TREE_VALUE (yyvsp[-1].ftype.t)); ;
break;}
case 782:
#line 3455 "parse.y"
#line 3457 "parse.y"
{ tree label;
do_label:
label = define_label (input_filename, lineno, yyvsp[-1].ttype);
......@@ -7778,98 +7780,98 @@ case 782:
;
break;}
case 783:
#line 3462 "parse.y"
#line 3464 "parse.y"
{ goto do_label; ;
break;}
case 784:
#line 3464 "parse.y"
#line 3466 "parse.y"
{ goto do_label; ;
break;}
case 785:
#line 3466 "parse.y"
#line 3468 "parse.y"
{ goto do_label; ;
break;}
case 786:
#line 3471 "parse.y"
#line 3473 "parse.y"
{ if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
break;}
case 788:
#line 3474 "parse.y"
#line 3476 "parse.y"
{ if (pedantic)
pedwarn ("ANSI C++ forbids compound statements inside for initializations");
;
break;}
case 789:
#line 3483 "parse.y"
#line 3485 "parse.y"
{ emit_line_note (input_filename, lineno);
yyval.ttype = NULL_TREE; ;
break;}
case 790:
#line 3486 "parse.y"
#line 3488 "parse.y"
{ emit_line_note (input_filename, lineno); ;
break;}
case 791:
#line 3491 "parse.y"
#line 3493 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 793:
#line 3494 "parse.y"
#line 3496 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 794:
#line 3501 "parse.y"
#line 3503 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 797:
#line 3508 "parse.y"
#line 3510 "parse.y"
{ yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
break;}
case 798:
#line 3513 "parse.y"
#line 3515 "parse.y"
{ yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
break;}
case 799:
#line 3518 "parse.y"
#line 3520 "parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
break;}
case 800:
#line 3520 "parse.y"
#line 3522 "parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
break;}
case 801:
#line 3531 "parse.y"
#line 3533 "parse.y"
{
yyval.ttype = empty_parms();
;
break;}
case 803:
#line 3536 "parse.y"
#line 3538 "parse.y"
{ yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0);
check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
break;}
case 804:
#line 3544 "parse.y"
#line 3546 "parse.y"
{ yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
break;}
case 805:
#line 3546 "parse.y"
#line 3548 "parse.y"
{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
break;}
case 806:
#line 3549 "parse.y"
#line 3551 "parse.y"
{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
break;}
case 807:
#line 3551 "parse.y"
#line 3553 "parse.y"
{ yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
yyvsp[-1].ftype.t), 1); ;
break;}
case 808:
#line 3554 "parse.y"
#line 3556 "parse.y"
{ yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
break;}
case 809:
#line 3556 "parse.y"
#line 3558 "parse.y"
{
/* This helps us recover from really nasty
parse errors, for example, a missing right
......@@ -7881,7 +7883,7 @@ case 809:
;
break;}
case 810:
#line 3566 "parse.y"
#line 3568 "parse.y"
{
/* This helps us recover from really nasty
parse errors, for example, a missing right
......@@ -7894,99 +7896,99 @@ case 810:
;
break;}
case 811:
#line 3581 "parse.y"
#line 3583 "parse.y"
{ maybe_snarf_defarg (); ;
break;}
case 812:
#line 3583 "parse.y"
#line 3585 "parse.y"
{ yyval.ttype = yyvsp[0].ttype; ;
break;}
case 815:
#line 3594 "parse.y"
#line 3596 "parse.y"
{ check_for_new_type ("in a parameter list", yyvsp[0].ftype);
yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
break;}
case 816:
#line 3597 "parse.y"
#line 3599 "parse.y"
{ check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
break;}
case 817:
#line 3600 "parse.y"
#line 3602 "parse.y"
{ check_for_new_type ("in a parameter list", yyvsp[0].ftype);
yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
break;}
case 818:
#line 3603 "parse.y"
#line 3605 "parse.y"
{ yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 819:
#line 3605 "parse.y"
#line 3607 "parse.y"
{ yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
break;}
case 821:
#line 3611 "parse.y"
#line 3613 "parse.y"
{ check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
break;}
case 822:
#line 3621 "parse.y"
#line 3623 "parse.y"
{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
break;}
case 823:
#line 3625 "parse.y"
#line 3627 "parse.y"
{ yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 824:
#line 3628 "parse.y"
#line 3630 "parse.y"
{ yyval.ftype.t = build_tree_list (build_decl_list (NULL_TREE, yyvsp[-1].ftype.t),
yyvsp[0].ttype);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 825:
#line 3632 "parse.y"
#line 3634 "parse.y"
{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 826:
#line 3636 "parse.y"
#line 3638 "parse.y"
{ tree specs = strip_attrs (yyvsp[0].ftype.t);
yyval.ftype.t = build_tree_list (specs, NULL_TREE);
yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
break;}
case 827:
#line 3640 "parse.y"
#line 3642 "parse.y"
{ tree specs = strip_attrs (yyvsp[-1].ttype);
yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
yyval.ftype.new_type_flag = 0; ;
break;}
case 828:
#line 3647 "parse.y"
#line 3649 "parse.y"
{ yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
break;}
case 829:
#line 3650 "parse.y"
#line 3652 "parse.y"
{ yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
break;}
case 832:
#line 3661 "parse.y"
#line 3663 "parse.y"
{ see_typename (); ;
break;}
case 833:
#line 3666 "parse.y"
#line 3668 "parse.y"
{
error ("type specifier omitted for parameter");
yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
;
break;}
case 834:
#line 3671 "parse.y"
#line 3673 "parse.y"
{
error ("type specifier omitted for parameter");
if (TREE_CODE (yyval.ttype) == SCOPE_REF
......@@ -7997,188 +7999,188 @@ case 834:
;
break;}
case 835:
#line 3683 "parse.y"
#line 3685 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 836:
#line 3685 "parse.y"
#line 3687 "parse.y"
{ yyval.ttype = yyvsp[-1].ttype; ;
break;}
case 837:
#line 3687 "parse.y"
#line 3689 "parse.y"
{ yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
break;}
case 838:
#line 3692 "parse.y"
#line 3694 "parse.y"
{ yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
break;}
case 840:
#line 3698 "parse.y"
#line 3700 "parse.y"
{
TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
yyval.ttype = yyvsp[0].ttype;
;
break;}
case 841:
#line 3706 "parse.y"
#line 3708 "parse.y"
{ yyval.ttype = NULL_TREE; ;
break;}
case 842:
#line 3708 "parse.y"
#line 3710 "parse.y"
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 843:
#line 3710 "parse.y"
#line 3712 "parse.y"
{ yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
break;}
case 844:
#line 3712 "parse.y"
#line 3714 "parse.y"
{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
;
break;}
case 845:
#line 3719 "parse.y"
#line 3721 "parse.y"
{ got_scope = NULL_TREE; ;
break;}
case 846:
#line 3724 "parse.y"
#line 3726 "parse.y"
{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
break;}
case 847:
#line 3726 "parse.y"
#line 3728 "parse.y"
{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
break;}
case 848:
#line 3728 "parse.y"
#line 3730 "parse.y"
{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
break;}
case 849:
#line 3730 "parse.y"
#line 3732 "parse.y"
{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
break;}
case 850:
#line 3732 "parse.y"
#line 3734 "parse.y"
{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
break;}
case 851:
#line 3734 "parse.y"
#line 3736 "parse.y"
{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
break;}
case 852:
#line 3736 "parse.y"
#line 3738 "parse.y"
{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
break;}
case 853:
#line 3738 "parse.y"
#line 3740 "parse.y"
{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
break;}
case 854:
#line 3740 "parse.y"
#line 3742 "parse.y"
{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
break;}
case 855:
#line 3742 "parse.y"
#line 3744 "parse.y"
{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
break;}
case 856:
#line 3744 "parse.y"
#line 3746 "parse.y"
{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
break;}
case 857:
#line 3746 "parse.y"
#line 3748 "parse.y"
{ yyval.ttype = ansi_opname[LT_EXPR]; ;
break;}
case 858:
#line 3748 "parse.y"
#line 3750 "parse.y"
{ yyval.ttype = ansi_opname[GT_EXPR]; ;
break;}
case 859:
#line 3750 "parse.y"
#line 3752 "parse.y"
{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
break;}
case 860:
#line 3752 "parse.y"
#line 3754 "parse.y"
{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
break;}
case 861:
#line 3754 "parse.y"
#line 3756 "parse.y"
{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
break;}
case 862:
#line 3756 "parse.y"
#line 3758 "parse.y"
{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
break;}
case 863:
#line 3758 "parse.y"
#line 3760 "parse.y"
{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
break;}
case 864:
#line 3760 "parse.y"
#line 3762 "parse.y"
{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
break;}
case 865:
#line 3762 "parse.y"
#line 3764 "parse.y"
{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
break;}
case 866:
#line 3764 "parse.y"
#line 3766 "parse.y"
{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
break;}
case 867:
#line 3766 "parse.y"
#line 3768 "parse.y"
{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
break;}
case 868:
#line 3768 "parse.y"
#line 3770 "parse.y"
{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
break;}
case 869:
#line 3770 "parse.y"
#line 3772 "parse.y"
{ yyval.ttype = ansi_opname[COND_EXPR]; ;
break;}
case 870:
#line 3772 "parse.y"
#line 3774 "parse.y"
{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
break;}
case 871:
#line 3774 "parse.y"
#line 3776 "parse.y"
{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
break;}
case 872:
#line 3776 "parse.y"
#line 3778 "parse.y"
{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
break;}
case 873:
#line 3778 "parse.y"
#line 3780 "parse.y"
{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
break;}
case 874:
#line 3780 "parse.y"
#line 3782 "parse.y"
{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
break;}
case 875:
#line 3782 "parse.y"
#line 3784 "parse.y"
{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
break;}
case 876:
#line 3784 "parse.y"
#line 3786 "parse.y"
{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
break;}
case 877:
#line 3786 "parse.y"
#line 3788 "parse.y"
{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
break;}
case 878:
#line 3788 "parse.y"
#line 3790 "parse.y"
{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
break;}
case 879:
#line 3791 "parse.y"
#line 3793 "parse.y"
{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
break;}
case 880:
#line 3793 "parse.y"
#line 3795 "parse.y"
{ yyval.ttype = ansi_opname[ERROR_MARK]; ;
break;}
}
......@@ -8379,7 +8381,7 @@ yyerrhandle:
yystate = yyn;
goto yynewstate;
}
#line 3796 "parse.y"
#line 3798 "parse.y"
#ifdef SPEW_DEBUG
......
......@@ -2165,10 +2165,12 @@ structsp:
}
| class_head %prec EMPTY
{
if ($1.new_type_flag)
if ($1.new_type_flag && $1.t != error_mark_node)
pop_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL ($1.t)));
$$.new_type_flag = 0;
if (TYPE_BINFO ($1.t) == NULL_TREE)
if ($1.t == error_mark_node)
$$.t = $1.t;
else if (TYPE_BINFO ($1.t) == NULL_TREE)
{
cp_error ("%T is not a class type", $1.t);
$$.t = error_mark_node;
......
// Build don't link:
// Origin: Mark Mitchell <mark@codesourcery.com>
template <int T>
struct S {
struct X {};
struct Y {};
template <int U>
friend struct S<U>::X; // ERROR - typename as friend
template <int U>
friend typename S<U>::Y; // ERROR - typename as friend
};
struct T {
template <int T>
friend struct S<T>::X; // ERROR - typename as friend
};
struct U {
template <int T>
friend typename S<T>::X; // ERROR - typename as friend
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment