From abff8e0691a5b560c4680cac0ddf6e6f61849bc8 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 28 Jan 1998 19:08:53 -0500 Subject: [PATCH] class.c (instantiate_type): Don't just return a known type if it's wrong. * class.c (instantiate_type): Don't just return a known type if it's wrong. * class.c (instantiate_type): Remove handling of FUNCTION_DECL since that code could never be reached. * error.c (dump_decl): Avoid aborting in the midst of printing an error message about an illegal template declaration. * parse.y (structsp): Print an error message, rather than crashing, when a class-head does not name a class. * pt.c (convert_nontype_argument): Allow REAL_TYPE and COMPLEX_TYPE template arguments as a g++ extension. * cp-tree.def (ALIGNOF_EXPR): New tree code. * decl2.c (grok_alignof): If processing_template_decl, just store the expression. * typeck.c (c_alignof): Likewise. * decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR. * error.c (dump_expr): Likewise. * pt.c (tsubst_copy): Likewise. * tree.c (cp_tree_equal): Likewise. * pt.c (uses_template_parms): Correctly determine whether or not a SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant folding can be done. From-SVN: r17545 --- gcc/cp/ChangeLog | 29 ++ gcc/cp/class.c | 19 +- gcc/cp/cp-tree.def | 1 + gcc/cp/decl2.c | 6 +- gcc/cp/error.c | 12 +- gcc/cp/parse.c | 746 +++++++++++++++++++++++---------------------- gcc/cp/parse.y | 20 +- gcc/cp/pt.c | 14 +- gcc/cp/tree.c | 1 + gcc/cp/typeck.c | 3 + 10 files changed, 461 insertions(+), 390 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 42bc3ea04e2..6d033b7a3b0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,34 @@ +Wed Jan 28 23:14:44 1998 Jason Merrill + + * class.c (instantiate_type): Don't just return a known type if + it's wrong. + Wed Jan 28 11:04:07 1998 Mark Mitchell + * class.c (instantiate_type): Remove handling of FUNCTION_DECL + since that code could never be reached. + + * error.c (dump_decl): Avoid aborting in the midst of printing an + error message about an illegal template declaration. + + * parse.y (structsp): Print an error message, rather than crashing, + when a class-head does not name a class. + + * pt.c (convert_nontype_argument): Allow REAL_TYPE and COMPLEX_TYPE + template arguments as a g++ extension. + + * cp-tree.def (ALIGNOF_EXPR): New tree code. + * decl2.c (grok_alignof): If processing_template_decl, just store + the expression. + * typeck.c (c_alignof): Likewise. + * decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR. + * error.c (dump_expr): Likewise. + * pt.c (tsubst_copy): Likewise. + * tree.c (cp_tree_equal): Likewise. + * pt.c (uses_template_parms): Correctly determine whether or not a + SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant + folding can be done. + * cp-tree.h (grok_enum_decls): Remove type parameter. * decl.c (grok_enum_decls): Likewise. * decl2.c (grok_x_components): Call grok_enum_decls diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 16fd5557700..0e042ee2b58 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -4979,7 +4979,14 @@ instantiate_type (lhstype, rhs, complain) } if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs))) - return rhs; + { + if (comptypes (lhstype, TREE_TYPE (rhs), 1)) + return rhs; + if (complain) + cp_error ("argument of type `%T' does not match `%T'", + TREE_TYPE (rhs), lhstype); + return error_mark_node; + } rhs = copy_node (rhs); @@ -5425,16 +5432,6 @@ instantiate_type (lhstype, rhs, complain) case ERROR_MARK: return error_mark_node; - case FUNCTION_DECL: - if (!comptypes (lhstype, TREE_TYPE (rhs), 1)) - { - if (complain) - cp_error ("%D is not of type %T", rhs, lhstype); - return error_mark_node; - } - else - return rhs; - default: my_friendly_abort (185); return error_mark_node; diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index 5d3f75f74d3..ab126fa7072 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -142,6 +142,7 @@ DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", '1', 1) DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", '1', 1) DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", '1', 1) DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1) +DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", '1', 1) DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1) DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", 'e', 2) DEFTREECODE (TYPEID_EXPR, "typeid_expr", 'e', 1) diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 253e8bf598c..beae07ad047 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1119,6 +1119,9 @@ grok_alignof (expr) tree best, t; int bestalign; + if (processing_template_decl) + return build_min (ALIGNOF_EXPR, sizetype, expr); + if (TREE_CODE (expr) == COMPONENT_REF && DECL_BIT_FIELD (TREE_OPERAND (expr, 1))) error ("`__alignof__' applied to a bit-field"); @@ -3505,11 +3508,12 @@ build_expr_from_tree (t) build_expr_from_tree (TREE_OPERAND (t, 1))); case SIZEOF_EXPR: + case ALIGNOF_EXPR: { tree r = build_expr_from_tree (TREE_OPERAND (t, 0)); if (TREE_CODE_CLASS (TREE_CODE (r)) != 't') r = TREE_TYPE (r); - return c_sizeof (r); + return TREE_CODE (t) == SIZEOF_EXPR ? c_sizeof (r) : c_alignof (r); } case MODOP_EXPR: diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 25da8fd86e3..d21e722d959 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -812,7 +812,8 @@ dump_decl (t, v) break; default: - my_friendly_abort (353); + /* This case can occur with some illegal code. */ + dump_type (TREE_TYPE (t), v); } } break; @@ -1586,7 +1587,14 @@ dump_expr (t, nop) break; case SIZEOF_EXPR: - OB_PUTS ("sizeof ("); + case ALIGNOF_EXPR: + if (TREE_CODE (t) == SIZEOF_EXPR) + OB_PUTS ("sizeof ("); + else + { + my_friendly_assert (TREE_CODE (t) == ALIGNOF_EXPR, 0); + OB_PUTS ("__alignof__ ("); + } if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t, 0))) == 't') dump_type (TREE_OPERAND (t, 0), 0); else diff --git a/gcc/cp/parse.c b/gcc/cp/parse.c index 1c60139b732..d9b4f301baa 100644 --- a/gcc/cp/parse.c +++ b/gcc/cp/parse.c @@ -659,46 +659,46 @@ static const short yyrline[] = { 0, 2190, 2196, 2198, 2201, 2204, 2207, 2213, 2216, 2219, 2221, 2223, 2225, 2229, 2235, 2243, 2245, 2249, 2251, 2256, 2259, 2262, 2264, 2266, 2270, 2274, 2279, 2283, 2286, 2291, 2295, - 2298, 2301, 2305, 2341, 2347, 2356, 2368, 2370, 2373, 2375, - 2380, 2382, 2384, 2386, 2388, 2392, 2397, 2402, 2408, 2413, - 2418, 2420, 2424, 2429, 2432, 2439, 2467, 2473, 2475, 2478, - 2481, 2483, 2487, 2489, 2493, 2519, 2548, 2551, 2552, 2573, - 2596, 2598, 2602, 2628, 2637, 2726, 2733, 2736, 2744, 2755, - 2764, 2768, 2783, 2786, 2791, 2793, 2795, 2797, 2799, 2801, - 2806, 2812, 2814, 2817, 2820, 2822, 2833, 2838, 2841, 2843, - 2848, 2851, 2852, 2863, 2866, 2867, 2878, 2880, 2883, 2885, - 2888, 2895, 2903, 2910, 2916, 2922, 2930, 2934, 2939, 2943, - 2946, 2955, 2957, 2961, 2964, 2969, 2973, 2978, 2988, 2991, - 2995, 2999, 3007, 3012, 3018, 3021, 3023, 3025, 3031, 3034, - 3036, 3038, 3040, 3044, 3047, 3068, 3078, 3080, 3081, 3085, - 3090, 3093, 3095, 3097, 3099, 3103, 3109, 3112, 3114, 3116, - 3118, 3122, 3125, 3128, 3130, 3132, 3134, 3138, 3141, 3144, - 3146, 3148, 3150, 3157, 3168, 3172, 3177, 3181, 3186, 3188, - 3192, 3195, 3197, 3201, 3203, 3204, 3207, 3209, 3215, 3230, - 3236, 3242, 3256, 3258, 3262, 3278, 3284, 3299, 3306, 3312, - 3314, 3315, 3316, 3324, 3333, 3334, 3338, 3341, 3347, 3353, - 3356, 3358, 3360, 3362, 3366, 3370, 3374, 3377, 3382, 3385, - 3387, 3389, 3391, 3393, 3395, 3397, 3399, 3403, 3407, 3411, - 3415, 3416, 3418, 3420, 3422, 3424, 3426, 3428, 3430, 3432, - 3440, 3442, 3443, 3444, 3447, 3455, 3460, 3467, 3469, 3474, - 3476, 3479, 3493, 3496, 3499, 3508, 3520, 3531, 3551, 3561, - 3564, 3572, 3584, 3587, 3590, 3593, 3609, 3612, 3623, 3624, - 3628, 3643, 3662, 3674, 3688, 3702, 3715, 3734, 3752, 3771, - 3779, 3800, 3818, 3831, 3832, 3835, 3835, 3838, 3838, 3841, - 3841, 3847, 3853, 3856, 3861, 3868, 3877, 3886, 3895, 3903, - 3916, 3918, 3922, 3924, 3927, 3934, 3937, 3945, 3961, 3972, - 3984, 3986, 3989, 3999, 4009, 4020, 4022, 4024, 4027, 4044, - 4050, 4058, 4060, 4062, 4066, 4069, 4070, 4078, 4082, 4086, - 4089, 4090, 4096, 4099, 4102, 4104, 4108, 4113, 4116, 4126, - 4131, 4132, 4140, 4146, 4151, 4155, 4160, 4164, 4168, 4172, - 4177, 4188, 4202, 4206, 4209, 4211, 4215, 4219, 4222, 4225, - 4227, 4231, 4233, 4240, 4247, 4250, 4253, 4257, 4261, 4267, - 4271, 4276, 4278, 4281, 4286, 4292, 4303, 4306, 4308, 4312, - 4317, 4319, 4326, 4329, 4331, 4333, 4339, 4344, 4347, 4349, - 4351, 4353, 4355, 4357, 4359, 4361, 4363, 4365, 4367, 4369, - 4371, 4373, 4375, 4377, 4379, 4381, 4383, 4385, 4387, 4389, - 4391, 4393, 4395, 4397, 4399, 4401, 4403, 4405, 4407, 4409, - 4412, 4414 + 2298, 2301, 2305, 2341, 2347, 2356, 2376, 2378, 2381, 2383, + 2388, 2390, 2392, 2394, 2396, 2400, 2405, 2410, 2416, 2421, + 2426, 2428, 2432, 2437, 2440, 2447, 2475, 2481, 2483, 2486, + 2489, 2491, 2495, 2497, 2501, 2527, 2556, 2559, 2560, 2581, + 2604, 2606, 2610, 2636, 2645, 2734, 2741, 2744, 2752, 2763, + 2772, 2776, 2791, 2794, 2799, 2801, 2803, 2805, 2807, 2809, + 2814, 2820, 2822, 2825, 2828, 2830, 2841, 2846, 2849, 2851, + 2856, 2859, 2860, 2871, 2874, 2875, 2886, 2888, 2891, 2893, + 2896, 2903, 2911, 2918, 2924, 2930, 2938, 2942, 2947, 2951, + 2954, 2963, 2965, 2969, 2972, 2977, 2981, 2986, 2996, 2999, + 3003, 3007, 3015, 3020, 3026, 3029, 3031, 3033, 3039, 3042, + 3044, 3046, 3048, 3052, 3055, 3076, 3086, 3088, 3089, 3093, + 3098, 3101, 3103, 3105, 3107, 3111, 3117, 3120, 3122, 3124, + 3126, 3130, 3133, 3136, 3138, 3140, 3142, 3146, 3149, 3152, + 3154, 3156, 3158, 3165, 3176, 3180, 3185, 3189, 3194, 3196, + 3200, 3203, 3205, 3209, 3211, 3212, 3215, 3217, 3223, 3238, + 3244, 3250, 3264, 3266, 3270, 3286, 3292, 3307, 3314, 3320, + 3322, 3323, 3324, 3332, 3341, 3342, 3346, 3349, 3355, 3361, + 3364, 3366, 3368, 3370, 3374, 3378, 3382, 3385, 3390, 3393, + 3395, 3397, 3399, 3401, 3403, 3405, 3407, 3411, 3415, 3419, + 3423, 3424, 3426, 3428, 3430, 3432, 3434, 3436, 3438, 3440, + 3448, 3450, 3451, 3452, 3455, 3463, 3468, 3475, 3477, 3482, + 3484, 3487, 3501, 3504, 3507, 3516, 3528, 3539, 3559, 3569, + 3572, 3580, 3592, 3595, 3598, 3601, 3617, 3620, 3631, 3632, + 3636, 3651, 3670, 3682, 3696, 3710, 3723, 3742, 3760, 3779, + 3787, 3808, 3826, 3839, 3840, 3843, 3843, 3846, 3846, 3849, + 3849, 3855, 3861, 3864, 3869, 3876, 3885, 3894, 3903, 3911, + 3924, 3926, 3930, 3932, 3935, 3942, 3945, 3953, 3969, 3980, + 3992, 3994, 3997, 4007, 4017, 4028, 4030, 4032, 4035, 4052, + 4058, 4066, 4068, 4070, 4074, 4077, 4078, 4086, 4090, 4094, + 4097, 4098, 4104, 4107, 4110, 4112, 4116, 4121, 4124, 4134, + 4139, 4140, 4148, 4154, 4159, 4163, 4168, 4172, 4176, 4180, + 4185, 4196, 4210, 4214, 4217, 4219, 4223, 4227, 4230, 4233, + 4235, 4239, 4241, 4248, 4255, 4258, 4261, 4265, 4269, 4275, + 4279, 4284, 4286, 4289, 4294, 4300, 4311, 4314, 4316, 4320, + 4325, 4327, 4334, 4337, 4339, 4341, 4347, 4352, 4355, 4357, + 4359, 4361, 4363, 4365, 4367, 4369, 4371, 4373, 4375, 4377, + 4379, 4381, 4383, 4385, 4387, 4389, 4391, 4393, 4395, 4397, + 4399, 4401, 4403, 4405, 4407, 4409, 4411, 4413, 4415, 4417, + 4420, 4422 }; #endif @@ -6233,83 +6233,91 @@ case 455: case 456: #line 2357 "parse.y" { - yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; - /* struct B: public A; is not accepted by the WP grammar. */ - if (TYPE_BINFO_BASETYPES (yyval.ftype.t) && !TYPE_SIZE (yyval.ftype.t) - && ! TYPE_BEING_DEFINED (yyval.ftype.t)) - cp_error ("base clause without member specification for `%#T'", - yyval.ftype.t); + if (TYPE_BINFO (yyvsp[0].ttype) == NULL_TREE) + { + cp_error ("%T is not a class type", yyvsp[0].ttype); + yyval.ftype.t = error_mark_node; + } + else + { + yyval.ftype.t = yyvsp[0].ttype; + /* struct B: public A; is not accepted by the WP grammar. */ + if (TYPE_BINFO_BASETYPES (yyval.ftype.t) && !TYPE_SIZE (yyval.ftype.t) + && ! TYPE_BEING_DEFINED (yyval.ftype.t)) + cp_error ("base clause without member specification for `%#T'", + yyval.ftype.t); + } ; break;} case 460: -#line 2376 "parse.y" +#line 2384 "parse.y" { if (pedantic && !in_system_header) pedwarn ("comma at end of enumerator list"); ; break;} case 462: -#line 2383 "parse.y" +#line 2391 "parse.y" { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} case 463: -#line 2385 "parse.y" +#line 2393 "parse.y" { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} case 464: -#line 2387 "parse.y" +#line 2395 "parse.y" { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} case 465: -#line 2389 "parse.y" +#line 2397 "parse.y" { error ("no body nor ';' separates two class, struct or union declarations"); ; break;} case 466: -#line 2394 "parse.y" +#line 2402 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 467: -#line 2399 "parse.y" +#line 2407 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 468: -#line 2404 "parse.y" +#line 2412 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 469: -#line 2409 "parse.y" +#line 2417 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 470: -#line 2414 "parse.y" +#line 2422 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype); ; break;} case 471: -#line 2419 "parse.y" +#line 2427 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 472: -#line 2421 "parse.y" +#line 2429 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 473: -#line 2426 "parse.y" +#line 2434 "parse.y" { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 0); ; break;} case 474: -#line 2431 "parse.y" +#line 2439 "parse.y" { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 1); ; break;} case 475: -#line 2434 "parse.y" +#line 2442 "parse.y" { yyval.ttype = yyvsp[-1].ttype; if (yyvsp[0].ttype) @@ -6317,7 +6325,7 @@ case 475: ; break;} case 476: -#line 2440 "parse.y" +#line 2448 "parse.y" { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); if (TREE_INT_CST_LOW (current_aggr) == union_type @@ -6345,28 +6353,28 @@ case 476: ; break;} case 477: -#line 2469 "parse.y" +#line 2477 "parse.y" { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), NULL_TREE, 0); yyungetc ('{', 1); ; break;} case 480: -#line 2480 "parse.y" +#line 2488 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 481: -#line 2482 "parse.y" +#line 2490 "parse.y" { yyungetc(':', 1); yyval.ttype = NULL_TREE; ; break;} case 482: -#line 2484 "parse.y" +#line 2492 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 484: -#line 2490 "parse.y" +#line 2498 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} case 485: -#line 2495 "parse.y" +#line 2503 "parse.y" { tree type = TREE_TYPE (yyvsp[0].ttype); if (! is_aggr_type (type, 1)) @@ -6393,7 +6401,7 @@ case 485: ; break;} case 486: -#line 2520 "parse.y" +#line 2528 "parse.y" { tree type = TREE_TYPE (yyvsp[0].ttype); if (current_aggr == signature_type_node) @@ -6422,11 +6430,11 @@ case 486: ; break;} case 487: -#line 2550 "parse.y" +#line 2558 "parse.y" { yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ; break;} case 489: -#line 2553 "parse.y" +#line 2561 "parse.y" { if (current_aggr == signature_type_node) { @@ -6449,7 +6457,7 @@ case 489: ; break;} case 490: -#line 2574 "parse.y" +#line 2582 "parse.y" { if (current_aggr == signature_type_node) { @@ -6472,13 +6480,13 @@ case 490: ; break;} case 492: -#line 2599 "parse.y" +#line 2607 "parse.y" { if (yyval.ttype != ridpointers[(int)RID_VIRTUAL]) sorry ("non-virtual access"); yyval.ttype = access_default_virtual_node; ; break;} case 493: -#line 2603 "parse.y" +#line 2611 "parse.y" { int err = 0; if (yyvsp[-1].ttype == access_protected_node) { @@ -6506,7 +6514,7 @@ case 493: ; break;} case 494: -#line 2629 "parse.y" +#line 2637 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) sorry ("non-virtual access"); if (yyval.ttype == access_public_node) @@ -6515,7 +6523,7 @@ case 494: yyval.ttype = access_private_virtual_node; ; break;} case 495: -#line 2639 "parse.y" +#line 2647 "parse.y" { tree t = yyvsp[-1].ttype; push_obstacks_nochange (); end_temporary_allocation (); @@ -6603,17 +6611,17 @@ case 495: ; break;} case 496: -#line 2728 "parse.y" +#line 2736 "parse.y" { yyval.ttype = build_self_reference (); ; break;} case 497: -#line 2735 "parse.y" +#line 2743 "parse.y" { if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ; break;} case 498: -#line 2737 "parse.y" +#line 2745 "parse.y" { if (current_aggr == signature_type_node) yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype); @@ -6623,7 +6631,7 @@ case 498: ; break;} case 499: -#line 2745 "parse.y" +#line 2753 "parse.y" { tree visspec = yyvsp[-2].ttype; @@ -6636,19 +6644,19 @@ case 499: ; break;} case 500: -#line 2756 "parse.y" +#line 2764 "parse.y" { if (current_aggr == signature_type_node) error ("access specifier not allowed in signature"); ; break;} case 501: -#line 2766 "parse.y" +#line 2774 "parse.y" { if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; ; break;} case 502: -#line 2769 "parse.y" +#line 2777 "parse.y" { /* In pushdecl, we created a reverse list of names in this binding level. Make sure that the chain of what we're trying to add isn't the item itself @@ -6663,91 +6671,91 @@ case 502: ; break;} case 503: -#line 2785 "parse.y" +#line 2793 "parse.y" { ; break;} case 504: -#line 2787 "parse.y" +#line 2795 "parse.y" { error ("missing ';' before right brace"); yyungetc ('}', 0); ; break;} case 505: -#line 2792 "parse.y" +#line 2800 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} case 506: -#line 2794 "parse.y" +#line 2802 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} case 507: -#line 2796 "parse.y" +#line 2804 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} case 508: -#line 2798 "parse.y" +#line 2806 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} case 509: -#line 2800 "parse.y" +#line 2808 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 510: -#line 2802 "parse.y" +#line 2810 "parse.y" { yyval.ttype = yyvsp[0].ttype; pedantic = yyvsp[-1].itype; ; break;} case 511: -#line 2811 "parse.y" +#line 2819 "parse.y" { yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 512: -#line 2813 "parse.y" +#line 2821 "parse.y" { yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 513: -#line 2815 "parse.y" +#line 2823 "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 514: -#line 2818 "parse.y" +#line 2826 "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 515: -#line 2821 "parse.y" +#line 2829 "parse.y" { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ; break;} case 516: -#line 2823 "parse.y" +#line 2831 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 517: -#line 2834 "parse.y" +#line 2842 "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 518: -#line 2839 "parse.y" +#line 2847 "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 519: -#line 2842 "parse.y" +#line 2850 "parse.y" { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ; break;} case 520: -#line 2844 "parse.y" +#line 2852 "parse.y" { yyval.ttype = finish_member_template_decl (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 521: -#line 2850 "parse.y" +#line 2858 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 523: -#line 2853 "parse.y" +#line 2861 "parse.y" { /* In this context, void_type_node encodes friends. They have been recorded elsewhere. */ @@ -6758,11 +6766,11 @@ case 523: ; break;} case 524: -#line 2865 "parse.y" +#line 2873 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 526: -#line 2868 "parse.y" +#line 2876 "parse.y" { /* In this context, void_type_node encodes friends. They have been recorded elsewhere. */ @@ -6773,7 +6781,7 @@ case 526: ; break;} case 531: -#line 2890 "parse.y" +#line 2898 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; @@ -6781,7 +6789,7 @@ case 531: build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} case 532: -#line 2896 "parse.y" +#line 2904 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; @@ -6789,7 +6797,7 @@ case 532: cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 533: -#line 2905 "parse.y" +#line 2913 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; @@ -6797,7 +6805,7 @@ case 533: build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} case 534: -#line 2911 "parse.y" +#line 2919 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; @@ -6805,7 +6813,7 @@ case 534: build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} case 535: -#line 2917 "parse.y" +#line 2925 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; @@ -6813,7 +6821,7 @@ case 535: cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 536: -#line 2923 "parse.y" +#line 2931 "parse.y" { split_specs_attrs (yyvsp[-3].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-3].ttype = current_declspecs; @@ -6821,54 +6829,54 @@ case 536: cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 537: -#line 2932 "parse.y" +#line 2940 "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 538: -#line 2935 "parse.y" +#line 2943 "parse.y" { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 539: -#line 2941 "parse.y" +#line 2949 "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 540: -#line 2944 "parse.y" +#line 2952 "parse.y" { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 541: -#line 2947 "parse.y" +#line 2955 "parse.y" { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} case 543: -#line 2958 "parse.y" +#line 2966 "parse.y" { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 544: -#line 2963 "parse.y" +#line 2971 "parse.y" { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE); ; break;} case 545: -#line 2965 "parse.y" +#line 2973 "parse.y" { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype); ; break;} case 546: -#line 2971 "parse.y" +#line 2979 "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 547: -#line 2974 "parse.y" +#line 2982 "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 548: -#line 2979 "parse.y" +#line 2987 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new"); @@ -6878,71 +6886,71 @@ case 548: ; break;} case 549: -#line 2990 "parse.y" +#line 2998 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 550: -#line 2992 "parse.y" +#line 3000 "parse.y" { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} case 551: -#line 2997 "parse.y" +#line 3005 "parse.y" { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); yyval.ftype.new_type_flag = 0; ; break;} case 552: -#line 3000 "parse.y" +#line 3008 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} case 553: -#line 3009 "parse.y" +#line 3017 "parse.y" { yyval.itype = suspend_momentary (); ; break;} case 554: -#line 3014 "parse.y" +#line 3022 "parse.y" { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ; break;} case 555: -#line 3020 "parse.y" +#line 3028 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ; break;} case 556: -#line 3022 "parse.y" +#line 3030 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ; break;} case 557: -#line 3024 "parse.y" +#line 3032 "parse.y" { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ; break;} case 558: -#line 3026 "parse.y" +#line 3034 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ; break;} case 559: -#line 3033 "parse.y" +#line 3041 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 560: -#line 3035 "parse.y" +#line 3043 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 561: -#line 3037 "parse.y" +#line 3045 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 562: -#line 3039 "parse.y" +#line 3047 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 563: -#line 3041 "parse.y" +#line 3049 "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 565: -#line 3049 "parse.y" +#line 3057 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) { @@ -6964,7 +6972,7 @@ case 565: ; break;} case 566: -#line 3069 "parse.y" +#line 3077 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); @@ -6974,97 +6982,97 @@ case 566: ; break;} case 569: -#line 3082 "parse.y" +#line 3090 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 570: -#line 3087 "parse.y" +#line 3095 "parse.y" { yyval.ttype = get_type_decl (yyvsp[0].ttype); ; break;} case 571: -#line 3092 "parse.y" +#line 3100 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 572: -#line 3094 "parse.y" +#line 3102 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 573: -#line 3096 "parse.y" +#line 3104 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} case 574: -#line 3098 "parse.y" +#line 3106 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 575: -#line 3100 "parse.y" +#line 3108 "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 577: -#line 3111 "parse.y" +#line 3119 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 578: -#line 3113 "parse.y" +#line 3121 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 579: -#line 3115 "parse.y" +#line 3123 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 580: -#line 3117 "parse.y" +#line 3125 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 581: -#line 3119 "parse.y" +#line 3127 "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 583: -#line 3127 "parse.y" +#line 3135 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 584: -#line 3129 "parse.y" +#line 3137 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 585: -#line 3131 "parse.y" +#line 3139 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 586: -#line 3133 "parse.y" +#line 3141 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 587: -#line 3135 "parse.y" +#line 3143 "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 589: -#line 3143 "parse.y" +#line 3151 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 590: -#line 3145 "parse.y" +#line 3153 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 591: -#line 3147 "parse.y" +#line 3155 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 592: -#line 3149 "parse.y" +#line 3157 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} case 593: -#line 3151 "parse.y" +#line 3159 "parse.y" { if (OP0 (yyval.ttype) != current_class_type) { push_nested_class (OP0 (yyval.ttype), 3); @@ -7073,7 +7081,7 @@ case 593: ; break;} case 594: -#line 3158 "parse.y" +#line 3166 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); if (yyvsp[-1].ttype != current_class_type) @@ -7084,47 +7092,47 @@ case 594: ; break;} case 595: -#line 3170 "parse.y" +#line 3178 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ; break;} case 596: -#line 3173 "parse.y" +#line 3181 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 597: -#line 3179 "parse.y" +#line 3187 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ; break;} case 598: -#line 3182 "parse.y" +#line 3190 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 600: -#line 3189 "parse.y" +#line 3197 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 601: -#line 3194 "parse.y" +#line 3202 "parse.y" { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ; break;} case 602: -#line 3196 "parse.y" +#line 3204 "parse.y" { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ; break;} case 603: -#line 3198 "parse.y" +#line 3206 "parse.y" { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 608: -#line 3210 "parse.y" +#line 3218 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 609: -#line 3217 "parse.y" +#line 3225 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) { @@ -7140,7 +7148,7 @@ case 609: ; break;} case 610: -#line 3231 "parse.y" +#line 3239 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7148,7 +7156,7 @@ case 610: ; break;} case 611: -#line 3237 "parse.y" +#line 3245 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7156,15 +7164,15 @@ case 611: ; break;} case 612: -#line 3243 "parse.y" +#line 3251 "parse.y" { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ; break;} case 614: -#line 3259 "parse.y" +#line 3267 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 615: -#line 3264 "parse.y" +#line 3272 "parse.y" { if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't') yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); @@ -7179,14 +7187,14 @@ case 615: ; break;} case 616: -#line 3280 "parse.y" +#line 3288 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); ; break;} case 617: -#line 3285 "parse.y" +#line 3293 "parse.y" { if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't') yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); @@ -7201,7 +7209,7 @@ case 617: ; break;} case 618: -#line 3301 "parse.y" +#line 3309 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7209,7 +7217,7 @@ case 618: ; break;} case 619: -#line 3307 "parse.y" +#line 3315 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7217,11 +7225,11 @@ case 619: ; break;} case 620: -#line 3313 "parse.y" +#line 3321 "parse.y" { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ; break;} case 623: -#line 3317 "parse.y" +#line 3325 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7229,7 +7237,7 @@ case 623: ; break;} case 624: -#line 3326 "parse.y" +#line 3334 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); @@ -7239,156 +7247,156 @@ case 624: ; break;} case 626: -#line 3335 "parse.y" +#line 3343 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 627: -#line 3340 "parse.y" +#line 3348 "parse.y" { got_scope = NULL_TREE; ; break;} case 628: -#line 3342 "parse.y" +#line 3350 "parse.y" { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ; break;} case 629: -#line 3349 "parse.y" +#line 3357 "parse.y" { got_scope = void_type_node; ; break;} case 630: -#line 3355 "parse.y" +#line 3363 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 631: -#line 3357 "parse.y" +#line 3365 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 632: -#line 3359 "parse.y" +#line 3367 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 633: -#line 3361 "parse.y" +#line 3369 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 634: -#line 3363 "parse.y" +#line 3371 "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 635: -#line 3367 "parse.y" +#line 3375 "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 637: -#line 3376 "parse.y" +#line 3384 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 638: -#line 3378 "parse.y" +#line 3386 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 639: -#line 3384 "parse.y" +#line 3392 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 640: -#line 3386 "parse.y" +#line 3394 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 641: -#line 3388 "parse.y" +#line 3396 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} case 642: -#line 3390 "parse.y" +#line 3398 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ; break;} case 643: -#line 3392 "parse.y" +#line 3400 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 644: -#line 3394 "parse.y" +#line 3402 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 645: -#line 3396 "parse.y" +#line 3404 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} case 646: -#line 3398 "parse.y" +#line 3406 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ; break;} case 647: -#line 3400 "parse.y" +#line 3408 "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 648: -#line 3404 "parse.y" +#line 3412 "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 650: -#line 3413 "parse.y" +#line 3421 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 652: -#line 3417 "parse.y" +#line 3425 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 653: -#line 3419 "parse.y" +#line 3427 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 654: -#line 3421 "parse.y" +#line 3429 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 655: -#line 3423 "parse.y" +#line 3431 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} case 656: -#line 3425 "parse.y" +#line 3433 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 657: -#line 3427 "parse.y" +#line 3435 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 658: -#line 3429 "parse.y" +#line 3437 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 659: -#line 3431 "parse.y" +#line 3439 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 660: -#line 3433 "parse.y" +#line 3441 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} case 666: -#line 3457 "parse.y" +#line 3465 "parse.y" { do_pushlevel (); ; break;} case 667: -#line 3462 "parse.y" +#line 3470 "parse.y" { yyval.ttype = do_poplevel (); ; break;} case 669: -#line 3470 "parse.y" +#line 3478 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids label declarations"); ; break;} case 672: -#line 3481 "parse.y" +#line 3489 "parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { @@ -7399,11 +7407,11 @@ case 672: ; break;} case 673: -#line 3495 "parse.y" +#line 3503 "parse.y" {; break;} case 675: -#line 3501 "parse.y" +#line 3509 "parse.y" { if (processing_template_decl) { @@ -7413,7 +7421,7 @@ case 675: ; break;} case 676: -#line 3509 "parse.y" +#line 3517 "parse.y" { if (processing_template_decl) { @@ -7425,7 +7433,7 @@ case 676: ; break;} case 677: -#line 3522 "parse.y" +#line 3530 "parse.y" { if (processing_template_decl) { @@ -7437,7 +7445,7 @@ case 677: ; break;} case 678: -#line 3532 "parse.y" +#line 3540 "parse.y" { if (processing_template_decl) { @@ -7458,7 +7466,7 @@ case 678: ; break;} case 679: -#line 3551 "parse.y" +#line 3559 "parse.y" { if (processing_template_decl) { @@ -7469,11 +7477,11 @@ case 679: ; break;} case 680: -#line 3563 "parse.y" +#line 3571 "parse.y" { finish_stmt (); ; break;} case 681: -#line 3565 "parse.y" +#line 3573 "parse.y" { if (processing_template_decl) { @@ -7483,7 +7491,7 @@ case 681: ; break;} case 682: -#line 3573 "parse.y" +#line 3581 "parse.y" { if (processing_template_decl) { @@ -7495,15 +7503,15 @@ case 682: ; break;} case 683: -#line 3586 "parse.y" +#line 3594 "parse.y" { finish_stmt (); ; break;} case 685: -#line 3592 "parse.y" +#line 3600 "parse.y" { finish_stmt (); ; break;} case 686: -#line 3594 "parse.y" +#line 3602 "parse.y" { tree expr = yyvsp[-1].ttype; if (! processing_template_decl) @@ -7521,11 +7529,11 @@ case 686: finish_stmt (); ; break;} case 687: -#line 3610 "parse.y" +#line 3618 "parse.y" { if (! processing_template_decl) expand_start_else (); ; break;} case 688: -#line 3612 "parse.y" +#line 3620 "parse.y" { if (processing_template_decl) { @@ -7538,17 +7546,17 @@ case 688: ; break;} case 689: -#line 3623 "parse.y" +#line 3631 "parse.y" { finish_stmt (); ; break;} case 690: -#line 3625 "parse.y" +#line 3633 "parse.y" { if (! processing_template_decl) expand_end_cond (); do_poplevel (); finish_stmt (); ; break;} case 691: -#line 3629 "parse.y" +#line 3637 "parse.y" { if (processing_template_decl) { @@ -7565,7 +7573,7 @@ case 691: ; break;} case 692: -#line 3644 "parse.y" +#line 3652 "parse.y" { if (processing_template_decl) { @@ -7586,7 +7594,7 @@ case 692: ; break;} case 693: -#line 3663 "parse.y" +#line 3671 "parse.y" { if (processing_template_decl) { @@ -7600,7 +7608,7 @@ case 693: ; break;} case 694: -#line 3675 "parse.y" +#line 3683 "parse.y" { if (processing_template_decl) { @@ -7616,7 +7624,7 @@ case 694: ; break;} case 695: -#line 3689 "parse.y" +#line 3697 "parse.y" { if (processing_template_decl) { @@ -7632,7 +7640,7 @@ case 695: ; break;} case 696: -#line 3703 "parse.y" +#line 3711 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype; @@ -7647,7 +7655,7 @@ case 696: ; break;} case 697: -#line 3716 "parse.y" +#line 3724 "parse.y" { if (processing_template_decl) { yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, @@ -7668,7 +7676,7 @@ case 697: ; break;} case 698: -#line 3735 "parse.y" +#line 3743 "parse.y" { if (processing_template_decl) { @@ -7688,7 +7696,7 @@ case 698: ; break;} case 699: -#line 3753 "parse.y" +#line 3761 "parse.y" { if (processing_template_decl) { @@ -7709,7 +7717,7 @@ case 699: ; break;} case 700: -#line 3774 "parse.y" +#line 3782 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype; @@ -7717,7 +7725,7 @@ case 700: ; break;} case 701: -#line 3780 "parse.y" +#line 3788 "parse.y" { if (processing_template_decl) { @@ -7740,7 +7748,7 @@ case 701: finish_stmt (); ; break;} case 702: -#line 3801 "parse.y" +#line 3809 "parse.y" { if (processing_template_decl) { @@ -7759,7 +7767,7 @@ case 702: ; break;} case 703: -#line 3818 "parse.y" +#line 3826 "parse.y" { if (processing_template_decl) { @@ -7774,23 +7782,23 @@ case 703: ; break;} case 704: -#line 3831 "parse.y" +#line 3839 "parse.y" { finish_stmt (); ; break;} case 705: -#line 3833 "parse.y" +#line 3841 "parse.y" { do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} case 707: -#line 3836 "parse.y" +#line 3844 "parse.y" { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 709: -#line 3839 "parse.y" +#line 3847 "parse.y" { do_case (NULL_TREE, NULL_TREE); ; break;} case 711: -#line 3842 "parse.y" +#line 3850 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (BREAK_STMT)); @@ -7798,7 +7806,7 @@ case 711: error ("break statement not within loop or switch"); ; break;} case 712: -#line 3848 "parse.y" +#line 3856 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (CONTINUE_STMT)); @@ -7806,19 +7814,19 @@ case 712: error ("continue statement not within a loop"); ; break;} case 713: -#line 3854 "parse.y" +#line 3862 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (NULL_TREE); ; break;} case 714: -#line 3857 "parse.y" +#line 3865 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (yyvsp[-1].ttype); finish_stmt (); ; break;} case 715: -#line 3862 "parse.y" +#line 3870 "parse.y" { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype); emit_line_note (input_filename, lineno); expand_asm (yyvsp[-2].ttype); @@ -7826,7 +7834,7 @@ case 715: ; break;} case 716: -#line 3869 "parse.y" +#line 3877 "parse.y" { if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE, @@ -7836,7 +7844,7 @@ case 716: ; break;} case 717: -#line 3878 "parse.y" +#line 3886 "parse.y" { if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, @@ -7846,7 +7854,7 @@ case 717: ; break;} case 718: -#line 3888 "parse.y" +#line 3896 "parse.y" { if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, @@ -7856,7 +7864,7 @@ case 718: ; break;} case 719: -#line 3896 "parse.y" +#line 3904 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7866,7 +7874,7 @@ case 719: ; break;} case 720: -#line 3904 "parse.y" +#line 3912 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7881,21 +7889,21 @@ case 720: ; break;} case 721: -#line 3917 "parse.y" +#line 3925 "parse.y" { finish_stmt (); ; break;} case 722: -#line 3919 "parse.y" +#line 3927 "parse.y" { error ("label must be followed by statement"); yyungetc ('}', 0); finish_stmt (); ; break;} case 723: -#line 3923 "parse.y" +#line 3931 "parse.y" { finish_stmt (); ; break;} case 725: -#line 3929 "parse.y" +#line 3937 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); @@ -7903,11 +7911,11 @@ case 725: ; break;} case 726: -#line 3935 "parse.y" +#line 3943 "parse.y" { expand_start_all_catch (); ; break;} case 727: -#line 3937 "parse.y" +#line 3945 "parse.y" { int nested = (hack_decl_function_context (current_function_decl) != NULL_TREE); @@ -7916,7 +7924,7 @@ case 727: ; break;} case 728: -#line 3947 "parse.y" +#line 3955 "parse.y" { if (processing_template_decl) { @@ -7932,7 +7940,7 @@ case 728: ; break;} case 729: -#line 3961 "parse.y" +#line 3969 "parse.y" { if (processing_template_decl) { @@ -7945,7 +7953,7 @@ case 729: ; break;} case 730: -#line 3972 "parse.y" +#line 3980 "parse.y" { if (processing_template_decl) { @@ -7958,7 +7966,7 @@ case 730: ; break;} case 733: -#line 3991 "parse.y" +#line 3999 "parse.y" { if (processing_template_decl) { @@ -7969,7 +7977,7 @@ case 733: ; break;} case 734: -#line 4000 "parse.y" +#line 4008 "parse.y" { if (processing_template_decl) { @@ -7980,7 +7988,7 @@ case 734: ; break;} case 735: -#line 4009 "parse.y" +#line 4017 "parse.y" { if (processing_template_decl) { @@ -7993,17 +8001,17 @@ case 735: ; break;} case 739: -#line 4029 "parse.y" +#line 4037 "parse.y" { expand_start_catch_block (NULL_TREE, NULL_TREE); ; break;} case 740: -#line 4045 "parse.y" +#line 4053 "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 741: -#line 4052 "parse.y" +#line 4060 "parse.y" { tree label; do_label: label = define_label (input_filename, lineno, yyvsp[-1].ttype); @@ -8012,129 +8020,129 @@ case 741: ; break;} case 742: -#line 4059 "parse.y" +#line 4067 "parse.y" { goto do_label; ; break;} case 743: -#line 4061 "parse.y" +#line 4069 "parse.y" { goto do_label; ; break;} case 744: -#line 4063 "parse.y" +#line 4071 "parse.y" { goto do_label; ; break;} case 745: -#line 4068 "parse.y" +#line 4076 "parse.y" { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ; break;} case 747: -#line 4071 "parse.y" +#line 4079 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids compound statements inside for initializations"); ; break;} case 748: -#line 4080 "parse.y" +#line 4088 "parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} case 749: -#line 4083 "parse.y" +#line 4091 "parse.y" { emit_line_note (input_filename, lineno); ; break;} case 750: -#line 4088 "parse.y" +#line 4096 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 752: -#line 4091 "parse.y" +#line 4099 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 753: -#line 4098 "parse.y" +#line 4106 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 756: -#line 4105 "parse.y" +#line 4113 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} case 757: -#line 4110 "parse.y" +#line 4118 "parse.y" { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ; break;} case 758: -#line 4115 "parse.y" +#line 4123 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ; break;} case 759: -#line 4117 "parse.y" +#line 4125 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} case 760: -#line 4128 "parse.y" +#line 4136 "parse.y" { yyval.ttype = empty_parms(); ; break;} case 762: -#line 4133 "parse.y" +#line 4141 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, void_list_node); TREE_PARMLIST (yyval.ttype) = 1; check_for_new_type ("inside parameter list", yyvsp[0].ftype); ; break;} case 763: -#line 4142 "parse.y" +#line 4150 "parse.y" { yyval.ttype = chainon (yyval.ttype, void_list_node); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 764: -#line 4147 "parse.y" +#line 4155 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 765: -#line 4152 "parse.y" +#line 4160 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 766: -#line 4156 "parse.y" +#line 4164 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 767: -#line 4161 "parse.y" +#line 4169 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 768: -#line 4165 "parse.y" +#line 4173 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 769: -#line 4169 "parse.y" +#line 4177 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 770: -#line 4173 "parse.y" +#line 4181 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 771: -#line 4178 "parse.y" +#line 4186 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -8147,7 +8155,7 @@ case 771: ; break;} case 772: -#line 4189 "parse.y" +#line 4197 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -8160,98 +8168,98 @@ case 772: ; break;} case 773: -#line 4204 "parse.y" +#line 4212 "parse.y" { maybe_snarf_defarg (); ; break;} case 774: -#line 4206 "parse.y" +#line 4214 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 777: -#line 4217 "parse.y" +#line 4225 "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 778: -#line 4220 "parse.y" +#line 4228 "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 779: -#line 4223 "parse.y" +#line 4231 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ; break;} case 780: -#line 4226 "parse.y" +#line 4234 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 781: -#line 4228 "parse.y" +#line 4236 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ; break;} case 783: -#line 4234 "parse.y" +#line 4242 "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 784: -#line 4244 "parse.y" +#line 4252 "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 785: -#line 4248 "parse.y" +#line 4256 "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 786: -#line 4251 "parse.y" +#line 4259 "parse.y" { yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} case 787: -#line 4254 "parse.y" +#line 4262 "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 788: -#line 4258 "parse.y" +#line 4266 "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 789: -#line 4262 "parse.y" +#line 4270 "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 790: -#line 4269 "parse.y" +#line 4277 "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 791: -#line 4272 "parse.y" +#line 4280 "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 794: -#line 4283 "parse.y" +#line 4291 "parse.y" { see_typename (); ; break;} case 795: -#line 4288 "parse.y" +#line 4296 "parse.y" { error ("type specifier omitted for parameter"); yyval.ttype = build_tree_list (integer_type_node, NULL_TREE); ; break;} case 796: -#line 4293 "parse.y" +#line 4301 "parse.y" { error ("type specifier omitted for parameter"); if (TREE_CODE (yyval.ttype) == SCOPE_REF @@ -8262,188 +8270,188 @@ case 796: ; break;} case 797: -#line 4305 "parse.y" +#line 4313 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 798: -#line 4307 "parse.y" +#line 4315 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 799: -#line 4309 "parse.y" +#line 4317 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ; break;} case 800: -#line 4314 "parse.y" +#line 4322 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ; break;} case 802: -#line 4320 "parse.y" +#line 4328 "parse.y" { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 803: -#line 4328 "parse.y" +#line 4336 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 804: -#line 4330 "parse.y" +#line 4338 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 805: -#line 4332 "parse.y" +#line 4340 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 806: -#line 4334 "parse.y" +#line 4342 "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 807: -#line 4341 "parse.y" +#line 4349 "parse.y" { got_scope = NULL_TREE; ; break;} case 808: -#line 4346 "parse.y" +#line 4354 "parse.y" { yyval.ttype = ansi_opname[MULT_EXPR]; ; break;} case 809: -#line 4348 "parse.y" +#line 4356 "parse.y" { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ; break;} case 810: -#line 4350 "parse.y" +#line 4358 "parse.y" { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ; break;} case 811: -#line 4352 "parse.y" +#line 4360 "parse.y" { yyval.ttype = ansi_opname[PLUS_EXPR]; ; break;} case 812: -#line 4354 "parse.y" +#line 4362 "parse.y" { yyval.ttype = ansi_opname[MINUS_EXPR]; ; break;} case 813: -#line 4356 "parse.y" +#line 4364 "parse.y" { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ; break;} case 814: -#line 4358 "parse.y" +#line 4366 "parse.y" { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ; break;} case 815: -#line 4360 "parse.y" +#line 4368 "parse.y" { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ; break;} case 816: -#line 4362 "parse.y" +#line 4370 "parse.y" { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ; break;} case 817: -#line 4364 "parse.y" +#line 4372 "parse.y" { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ; break;} case 818: -#line 4366 "parse.y" +#line 4374 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 819: -#line 4368 "parse.y" +#line 4376 "parse.y" { yyval.ttype = ansi_opname[LT_EXPR]; ; break;} case 820: -#line 4370 "parse.y" +#line 4378 "parse.y" { yyval.ttype = ansi_opname[GT_EXPR]; ; break;} case 821: -#line 4372 "parse.y" +#line 4380 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 822: -#line 4374 "parse.y" +#line 4382 "parse.y" { yyval.ttype = ansi_assopname[yyvsp[0].code]; ; break;} case 823: -#line 4376 "parse.y" +#line 4384 "parse.y" { yyval.ttype = ansi_opname [MODIFY_EXPR]; ; break;} case 824: -#line 4378 "parse.y" +#line 4386 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 825: -#line 4380 "parse.y" +#line 4388 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 826: -#line 4382 "parse.y" +#line 4390 "parse.y" { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ; break;} case 827: -#line 4384 "parse.y" +#line 4392 "parse.y" { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ; break;} case 828: -#line 4386 "parse.y" +#line 4394 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ; break;} case 829: -#line 4388 "parse.y" +#line 4396 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ; break;} case 830: -#line 4390 "parse.y" +#line 4398 "parse.y" { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ; break;} case 831: -#line 4392 "parse.y" +#line 4400 "parse.y" { yyval.ttype = ansi_opname[COND_EXPR]; ; break;} case 832: -#line 4394 "parse.y" +#line 4402 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 833: -#line 4396 "parse.y" +#line 4404 "parse.y" { yyval.ttype = ansi_opname[COMPONENT_REF]; ; break;} case 834: -#line 4398 "parse.y" +#line 4406 "parse.y" { yyval.ttype = ansi_opname[MEMBER_REF]; ; break;} case 835: -#line 4400 "parse.y" +#line 4408 "parse.y" { yyval.ttype = ansi_opname[CALL_EXPR]; ; break;} case 836: -#line 4402 "parse.y" +#line 4410 "parse.y" { yyval.ttype = ansi_opname[ARRAY_REF]; ; break;} case 837: -#line 4404 "parse.y" +#line 4412 "parse.y" { yyval.ttype = ansi_opname[NEW_EXPR]; ; break;} case 838: -#line 4406 "parse.y" +#line 4414 "parse.y" { yyval.ttype = ansi_opname[DELETE_EXPR]; ; break;} case 839: -#line 4408 "parse.y" +#line 4416 "parse.y" { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ; break;} case 840: -#line 4410 "parse.y" +#line 4418 "parse.y" { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ; break;} case 841: -#line 4413 "parse.y" +#line 4421 "parse.y" { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 842: -#line 4415 "parse.y" +#line 4423 "parse.y" { yyval.ttype = ansi_opname[ERROR_MARK]; ; break;} } @@ -8644,7 +8652,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 4418 "parse.y" +#line 4426 "parse.y" #ifdef SPEW_DEBUG diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 22dc376d2e0..13a728b111c 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -2355,13 +2355,21 @@ structsp: } | class_head %prec EMPTY { - $$.t = $1; $$.new_type_flag = 0; - /* struct B: public A; is not accepted by the WP grammar. */ - if (TYPE_BINFO_BASETYPES ($$.t) && !TYPE_SIZE ($$.t) - && ! TYPE_BEING_DEFINED ($$.t)) - cp_error ("base clause without member specification for `%#T'", - $$.t); + if (TYPE_BINFO ($1) == NULL_TREE) + { + cp_error ("%T is not a class type", $1); + $$.t = error_mark_node; + } + else + { + $$.t = $1; + /* struct B: public A; is not accepted by the WP grammar. */ + if (TYPE_BINFO_BASETYPES ($$.t) && !TYPE_SIZE ($$.t) + && ! TYPE_BEING_DEFINED ($$.t)) + cp_error ("base clause without member specification for `%#T'", + $$.t); + } } ; diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index a4c51dc7c36..8a1620370c8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1498,6 +1498,14 @@ convert_nontype_argument (type, expr) just converting one integral constant expression to another. */ return digest_init (type, expr, (tree*) 0); + case REAL_TYPE: + case COMPLEX_TYPE: + /* These are g++ extensions. */ + if (TREE_CODE (expr_type) != TREE_CODE (type)) + return error_mark_node; + + return digest_init (type, expr, (tree*) 0); + case POINTER_TYPE: { tree type_pointed_to = TREE_TYPE (type); @@ -2539,12 +2547,15 @@ uses_template_parms (t) case CONST_CAST_EXPR: case STATIC_CAST_EXPR: case DYNAMIC_CAST_EXPR: - case SIZEOF_EXPR: case ARROW_EXPR: case DOTSTAR_EXPR: case TYPEID_EXPR: return 1; + case SIZEOF_EXPR: + case ALIGNOF_EXPR: + return uses_template_parms (TREE_OPERAND (t, 0)); + default: switch (TREE_CODE_CLASS (TREE_CODE (t))) { @@ -4004,6 +4015,7 @@ tsubst_copy (t, args, nargs, in_decl) case ADDR_EXPR: case CONVERT_EXPR: /* Unary + */ case SIZEOF_EXPR: + case ALIGNOF_EXPR: case ARROW_EXPR: case THROW_EXPR: case TYPEID_EXPR: diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 94fa1ea2432..16bcb135735 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2074,6 +2074,7 @@ cp_tree_equal (t1, t2) && TEMPLATE_CONST_LEVEL (t1) == TEMPLATE_CONST_LEVEL (t2); case SIZEOF_EXPR: + case ALIGNOF_EXPR: if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0))) return 0; if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't') diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 80795d9be98..5009644eabb 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1474,6 +1474,9 @@ c_alignof (type) enum tree_code code = TREE_CODE (type); tree t; + if (processing_template_decl) + return build_min (ALIGNOF_EXPR, sizetype, type); + if (code == FUNCTION_TYPE || code == METHOD_TYPE) return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT); -- 2.30.2