aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>1998-01-28 19:08:53 -0500
committerJason Merrill <jason@gcc.gnu.org>1998-01-28 19:08:53 -0500
commitabff8e0691a5b560c4680cac0ddf6e6f61849bc8 (patch)
tree57fb4c8fa376c32ea452e23fa89d13704ca6602e /gcc
parent76d31c63736a0a5a0560fccf5d400c5a5b8a20b9 (diff)
downloadgcc-abff8e0691a5b560c4680cac0ddf6e6f61849bc8.zip
gcc-abff8e0691a5b560c4680cac0ddf6e6f61849bc8.tar.gz
gcc-abff8e0691a5b560c4680cac0ddf6e6f61849bc8.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog29
-rw-r--r--gcc/cp/class.c19
-rw-r--r--gcc/cp/cp-tree.def1
-rw-r--r--gcc/cp/decl2.c6
-rw-r--r--gcc/cp/error.c12
-rw-r--r--gcc/cp/parse.c746
-rw-r--r--gcc/cp/parse.y20
-rw-r--r--gcc/cp/pt.c14
-rw-r--r--gcc/cp/tree.c1
-rw-r--r--gcc/cp/typeck.c3
10 files changed, 461 insertions, 390 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 42bc3ea..6d033b7 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,34 @@
+Wed Jan 28 23:14:44 1998 Jason Merrill <jason@yorick.cygnus.com>
+
+ * class.c (instantiate_type): Don't just return a known type if
+ it's wrong.
+
Wed Jan 28 11:04:07 1998 Mark Mitchell <mmitchell@usa.net>
+ * 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 16fd555..0e042ee 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 5d3f75f..ab126fa 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 253e8bf..beae07a 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 25da8fd..d21e722 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 1c60139..d9b4f30 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, &current_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, &current_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, &current_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, &current_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, &current_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, &current_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 22dc376..13a728b 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 a4c51dc..8a16203 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 94fa1ea..16bcb13 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 80795d9..5009644 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);