From d3959d607ecc7113771ad2661f86ba9b94349c0e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 25 Jan 1998 12:54:44 +0000 Subject: [PATCH] * parse.y (typename_sub*): Fix std::. From-SVN: r17476 --- gcc/cp/ChangeLog | 4 + gcc/cp/parse.c | 466 ++++++++++++++++++++++++----------------------- gcc/cp/parse.y | 12 +- 3 files changed, 251 insertions(+), 231 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7fb9c4d7012..795a4044029 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +Sun Jan 25 03:30:00 1998 Jason Merrill + + * parse.y (typename_sub*): Fix std::. + Sat Jan 24 12:13:54 1998 Jason Merrill * error.c (dump_decl): Fix type default template args. diff --git a/gcc/cp/parse.c b/gcc/cp/parse.c index 16a12a791c3..85056b8a0db 100644 --- a/gcc/cp/parse.c +++ b/gcc/cp/parse.c @@ -701,30 +701,30 @@ static const short yyrline[] = { 0, 3144, 3148, 3151, 3154, 3156, 3158, 3160, 3164, 3167, 3170, 3172, 3174, 3176, 3183, 3194, 3198, 3203, 3207, 3212, 3214, 3218, 3221, 3223, 3227, 3229, 3230, 3233, 3235, 3241, 3256, - 3262, 3268, 3282, 3284, 3288, 3300, 3306, 3317, 3324, 3330, - 3332, 3333, 3334, 3342, 3351, 3352, 3356, 3359, 3365, 3371, - 3374, 3376, 3378, 3380, 3384, 3388, 3392, 3395, 3400, 3403, - 3405, 3407, 3409, 3411, 3413, 3415, 3417, 3421, 3425, 3429, - 3433, 3434, 3436, 3438, 3440, 3442, 3444, 3446, 3448, 3450, - 3458, 3460, 3461, 3462, 3465, 3473, 3478, 3485, 3487, 3492, - 3494, 3497, 3511, 3514, 3517, 3526, 3538, 3549, 3569, 3579, - 3582, 3590, 3602, 3605, 3608, 3611, 3627, 3630, 3641, 3642, - 3646, 3661, 3680, 3692, 3706, 3720, 3733, 3752, 3770, 3789, - 3797, 3818, 3836, 3849, 3850, 3853, 3853, 3856, 3856, 3859, - 3859, 3865, 3871, 3874, 3879, 3886, 3895, 3904, 3913, 3921, - 3934, 3936, 3940, 3942, 3945, 3952, 3955, 3963, 3979, 3990, - 4002, 4004, 4007, 4017, 4027, 4038, 4040, 4042, 4045, 4062, - 4068, 4076, 4078, 4080, 4084, 4087, 4088, 4096, 4100, 4104, - 4107, 4108, 4114, 4117, 4120, 4122, 4126, 4131, 4134, 4144, - 4149, 4150, 4158, 4164, 4169, 4173, 4178, 4182, 4186, 4190, - 4195, 4206, 4220, 4224, 4227, 4229, 4233, 4237, 4240, 4243, - 4245, 4249, 4251, 4258, 4265, 4268, 4271, 4275, 4279, 4285, - 4289, 4294, 4296, 4299, 4304, 4310, 4321, 4324, 4326, 4330, - 4335, 4337, 4344, 4347, 4349, 4351, 4357, 4362, 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, 4419, 4421, 4423, 4425, 4427, - 4430, 4432 + 3262, 3268, 3282, 3284, 3288, 3304, 3310, 3325, 3332, 3338, + 3340, 3341, 3342, 3350, 3359, 3360, 3364, 3367, 3373, 3379, + 3382, 3384, 3386, 3388, 3392, 3396, 3400, 3403, 3408, 3411, + 3413, 3415, 3417, 3419, 3421, 3423, 3425, 3429, 3433, 3437, + 3441, 3442, 3444, 3446, 3448, 3450, 3452, 3454, 3456, 3458, + 3466, 3468, 3469, 3470, 3473, 3481, 3486, 3493, 3495, 3500, + 3502, 3505, 3519, 3522, 3525, 3534, 3546, 3557, 3577, 3587, + 3590, 3598, 3610, 3613, 3616, 3619, 3635, 3638, 3649, 3650, + 3654, 3669, 3688, 3700, 3714, 3728, 3741, 3760, 3778, 3797, + 3805, 3826, 3844, 3857, 3858, 3861, 3861, 3864, 3864, 3867, + 3867, 3873, 3879, 3882, 3887, 3894, 3903, 3912, 3921, 3929, + 3942, 3944, 3948, 3950, 3953, 3960, 3963, 3971, 3987, 3998, + 4010, 4012, 4015, 4025, 4035, 4046, 4048, 4050, 4053, 4070, + 4076, 4084, 4086, 4088, 4092, 4095, 4096, 4104, 4108, 4112, + 4115, 4116, 4122, 4125, 4128, 4130, 4134, 4139, 4142, 4152, + 4157, 4158, 4166, 4172, 4177, 4181, 4186, 4190, 4194, 4198, + 4203, 4214, 4228, 4232, 4235, 4237, 4241, 4245, 4248, 4251, + 4253, 4257, 4259, 4266, 4273, 4276, 4279, 4283, 4287, 4293, + 4297, 4302, 4304, 4307, 4312, 4318, 4329, 4332, 4334, 4338, + 4343, 4345, 4352, 4355, 4357, 4359, 4365, 4370, 4373, 4375, + 4377, 4379, 4381, 4383, 4385, 4387, 4389, 4391, 4393, 4395, + 4397, 4399, 4401, 4403, 4405, 4407, 4409, 4411, 4413, 4415, + 4417, 4419, 4421, 4423, 4425, 4427, 4429, 4431, 4433, 4435, + 4438, 4440 }; #endif @@ -7197,29 +7197,37 @@ case 615: else if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); else - yyval.ttype = yyvsp[0].ttype; + { + yyval.ttype = yyvsp[0].ttype; + if (TREE_CODE (yyval.ttype) == TYPE_DECL) + yyval.ttype = TREE_TYPE (yyval.ttype); + } ; break;} case 616: -#line 3302 "parse.y" +#line 3306 "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 3307 "parse.y" +#line 3311 "parse.y" { if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't') yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); else if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); else - yyval.ttype = yyvsp[0].ttype; + { + yyval.ttype = yyvsp[0].ttype; + if (TREE_CODE (yyval.ttype) == TYPE_DECL) + yyval.ttype = TREE_TYPE (yyval.ttype); + } ; break;} case 618: -#line 3319 "parse.y" +#line 3327 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7227,7 +7235,7 @@ case 618: ; break;} case 619: -#line 3325 "parse.y" +#line 3333 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7235,11 +7243,11 @@ case 619: ; break;} case 620: -#line 3331 "parse.y" +#line 3339 "parse.y" { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ; break;} case 623: -#line 3335 "parse.y" +#line 3343 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; @@ -7247,7 +7255,7 @@ case 623: ; break;} case 624: -#line 3344 "parse.y" +#line 3352 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype); @@ -7257,156 +7265,156 @@ case 624: ; break;} case 626: -#line 3353 "parse.y" +#line 3361 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 627: -#line 3358 "parse.y" +#line 3366 "parse.y" { got_scope = NULL_TREE; ; break;} case 628: -#line 3360 "parse.y" +#line 3368 "parse.y" { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ; break;} case 629: -#line 3367 "parse.y" +#line 3375 "parse.y" { got_scope = void_type_node; ; break;} case 630: -#line 3373 "parse.y" +#line 3381 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 631: -#line 3375 "parse.y" +#line 3383 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 632: -#line 3377 "parse.y" +#line 3385 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 633: -#line 3379 "parse.y" +#line 3387 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} case 634: -#line 3381 "parse.y" +#line 3389 "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 3385 "parse.y" +#line 3393 "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 3394 "parse.y" +#line 3402 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 638: -#line 3396 "parse.y" +#line 3404 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 639: -#line 3402 "parse.y" +#line 3410 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 640: -#line 3404 "parse.y" +#line 3412 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 641: -#line 3406 "parse.y" +#line 3414 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} case 642: -#line 3408 "parse.y" +#line 3416 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ; break;} case 643: -#line 3410 "parse.y" +#line 3418 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 644: -#line 3412 "parse.y" +#line 3420 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} case 645: -#line 3414 "parse.y" +#line 3422 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} case 646: -#line 3416 "parse.y" +#line 3424 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ; break;} case 647: -#line 3418 "parse.y" +#line 3426 "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 3422 "parse.y" +#line 3430 "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 3431 "parse.y" +#line 3439 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 652: -#line 3435 "parse.y" +#line 3443 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 653: -#line 3437 "parse.y" +#line 3445 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 654: -#line 3439 "parse.y" +#line 3447 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} case 655: -#line 3441 "parse.y" +#line 3449 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} case 656: -#line 3443 "parse.y" +#line 3451 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 657: -#line 3445 "parse.y" +#line 3453 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 658: -#line 3447 "parse.y" +#line 3455 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 659: -#line 3449 "parse.y" +#line 3457 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} case 660: -#line 3451 "parse.y" +#line 3459 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} case 666: -#line 3475 "parse.y" +#line 3483 "parse.y" { do_pushlevel (); ; break;} case 667: -#line 3480 "parse.y" +#line 3488 "parse.y" { yyval.ttype = do_poplevel (); ; break;} case 669: -#line 3488 "parse.y" +#line 3496 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids label declarations"); ; break;} case 672: -#line 3499 "parse.y" +#line 3507 "parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { @@ -7417,11 +7425,11 @@ case 672: ; break;} case 673: -#line 3513 "parse.y" +#line 3521 "parse.y" {; break;} case 675: -#line 3519 "parse.y" +#line 3527 "parse.y" { if (processing_template_decl) { @@ -7431,7 +7439,7 @@ case 675: ; break;} case 676: -#line 3527 "parse.y" +#line 3535 "parse.y" { if (processing_template_decl) { @@ -7443,7 +7451,7 @@ case 676: ; break;} case 677: -#line 3540 "parse.y" +#line 3548 "parse.y" { if (processing_template_decl) { @@ -7455,7 +7463,7 @@ case 677: ; break;} case 678: -#line 3550 "parse.y" +#line 3558 "parse.y" { if (processing_template_decl) { @@ -7476,7 +7484,7 @@ case 678: ; break;} case 679: -#line 3569 "parse.y" +#line 3577 "parse.y" { if (processing_template_decl) { @@ -7487,11 +7495,11 @@ case 679: ; break;} case 680: -#line 3581 "parse.y" +#line 3589 "parse.y" { finish_stmt (); ; break;} case 681: -#line 3583 "parse.y" +#line 3591 "parse.y" { if (processing_template_decl) { @@ -7501,7 +7509,7 @@ case 681: ; break;} case 682: -#line 3591 "parse.y" +#line 3599 "parse.y" { if (processing_template_decl) { @@ -7513,15 +7521,15 @@ case 682: ; break;} case 683: -#line 3604 "parse.y" +#line 3612 "parse.y" { finish_stmt (); ; break;} case 685: -#line 3610 "parse.y" +#line 3618 "parse.y" { finish_stmt (); ; break;} case 686: -#line 3612 "parse.y" +#line 3620 "parse.y" { tree expr = yyvsp[-1].ttype; if (! processing_template_decl) @@ -7539,11 +7547,11 @@ case 686: finish_stmt (); ; break;} case 687: -#line 3628 "parse.y" +#line 3636 "parse.y" { if (! processing_template_decl) expand_start_else (); ; break;} case 688: -#line 3630 "parse.y" +#line 3638 "parse.y" { if (processing_template_decl) { @@ -7556,17 +7564,17 @@ case 688: ; break;} case 689: -#line 3641 "parse.y" +#line 3649 "parse.y" { finish_stmt (); ; break;} case 690: -#line 3643 "parse.y" +#line 3651 "parse.y" { if (! processing_template_decl) expand_end_cond (); do_poplevel (); finish_stmt (); ; break;} case 691: -#line 3647 "parse.y" +#line 3655 "parse.y" { if (processing_template_decl) { @@ -7583,7 +7591,7 @@ case 691: ; break;} case 692: -#line 3662 "parse.y" +#line 3670 "parse.y" { if (processing_template_decl) { @@ -7604,7 +7612,7 @@ case 692: ; break;} case 693: -#line 3681 "parse.y" +#line 3689 "parse.y" { if (processing_template_decl) { @@ -7618,7 +7626,7 @@ case 693: ; break;} case 694: -#line 3693 "parse.y" +#line 3701 "parse.y" { if (processing_template_decl) { @@ -7634,7 +7642,7 @@ case 694: ; break;} case 695: -#line 3707 "parse.y" +#line 3715 "parse.y" { if (processing_template_decl) { @@ -7650,7 +7658,7 @@ case 695: ; break;} case 696: -#line 3721 "parse.y" +#line 3729 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype; @@ -7665,7 +7673,7 @@ case 696: ; break;} case 697: -#line 3734 "parse.y" +#line 3742 "parse.y" { if (processing_template_decl) { yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, @@ -7686,7 +7694,7 @@ case 697: ; break;} case 698: -#line 3753 "parse.y" +#line 3761 "parse.y" { if (processing_template_decl) { @@ -7706,7 +7714,7 @@ case 698: ; break;} case 699: -#line 3771 "parse.y" +#line 3779 "parse.y" { if (processing_template_decl) { @@ -7727,7 +7735,7 @@ case 699: ; break;} case 700: -#line 3792 "parse.y" +#line 3800 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype; @@ -7735,7 +7743,7 @@ case 700: ; break;} case 701: -#line 3798 "parse.y" +#line 3806 "parse.y" { if (processing_template_decl) { @@ -7758,7 +7766,7 @@ case 701: finish_stmt (); ; break;} case 702: -#line 3819 "parse.y" +#line 3827 "parse.y" { if (processing_template_decl) { @@ -7777,7 +7785,7 @@ case 702: ; break;} case 703: -#line 3836 "parse.y" +#line 3844 "parse.y" { if (processing_template_decl) { @@ -7792,23 +7800,23 @@ case 703: ; break;} case 704: -#line 3849 "parse.y" +#line 3857 "parse.y" { finish_stmt (); ; break;} case 705: -#line 3851 "parse.y" +#line 3859 "parse.y" { do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} case 707: -#line 3854 "parse.y" +#line 3862 "parse.y" { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 709: -#line 3857 "parse.y" +#line 3865 "parse.y" { do_case (NULL_TREE, NULL_TREE); ; break;} case 711: -#line 3860 "parse.y" +#line 3868 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (BREAK_STMT)); @@ -7816,7 +7824,7 @@ case 711: error ("break statement not within loop or switch"); ; break;} case 712: -#line 3866 "parse.y" +#line 3874 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (CONTINUE_STMT)); @@ -7824,19 +7832,19 @@ case 712: error ("continue statement not within a loop"); ; break;} case 713: -#line 3872 "parse.y" +#line 3880 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (NULL_TREE); ; break;} case 714: -#line 3875 "parse.y" +#line 3883 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (yyvsp[-1].ttype); finish_stmt (); ; break;} case 715: -#line 3880 "parse.y" +#line 3888 "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); @@ -7844,7 +7852,7 @@ case 715: ; break;} case 716: -#line 3887 "parse.y" +#line 3895 "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, @@ -7854,7 +7862,7 @@ case 716: ; break;} case 717: -#line 3896 "parse.y" +#line 3904 "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, @@ -7864,7 +7872,7 @@ case 717: ; break;} case 718: -#line 3906 "parse.y" +#line 3914 "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, @@ -7874,7 +7882,7 @@ case 718: ; break;} case 719: -#line 3914 "parse.y" +#line 3922 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7884,7 +7892,7 @@ case 719: ; break;} case 720: -#line 3922 "parse.y" +#line 3930 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7899,21 +7907,21 @@ case 720: ; break;} case 721: -#line 3935 "parse.y" +#line 3943 "parse.y" { finish_stmt (); ; break;} case 722: -#line 3937 "parse.y" +#line 3945 "parse.y" { error ("label must be followed by statement"); yyungetc ('}', 0); finish_stmt (); ; break;} case 723: -#line 3941 "parse.y" +#line 3949 "parse.y" { finish_stmt (); ; break;} case 725: -#line 3947 "parse.y" +#line 3955 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); @@ -7921,11 +7929,11 @@ case 725: ; break;} case 726: -#line 3953 "parse.y" +#line 3961 "parse.y" { expand_start_all_catch (); ; break;} case 727: -#line 3955 "parse.y" +#line 3963 "parse.y" { int nested = (hack_decl_function_context (current_function_decl) != NULL_TREE); @@ -7934,7 +7942,7 @@ case 727: ; break;} case 728: -#line 3965 "parse.y" +#line 3973 "parse.y" { if (processing_template_decl) { @@ -7950,7 +7958,7 @@ case 728: ; break;} case 729: -#line 3979 "parse.y" +#line 3987 "parse.y" { if (processing_template_decl) { @@ -7963,7 +7971,7 @@ case 729: ; break;} case 730: -#line 3990 "parse.y" +#line 3998 "parse.y" { if (processing_template_decl) { @@ -7976,7 +7984,7 @@ case 730: ; break;} case 733: -#line 4009 "parse.y" +#line 4017 "parse.y" { if (processing_template_decl) { @@ -7987,7 +7995,7 @@ case 733: ; break;} case 734: -#line 4018 "parse.y" +#line 4026 "parse.y" { if (processing_template_decl) { @@ -7998,7 +8006,7 @@ case 734: ; break;} case 735: -#line 4027 "parse.y" +#line 4035 "parse.y" { if (processing_template_decl) { @@ -8011,17 +8019,17 @@ case 735: ; break;} case 739: -#line 4047 "parse.y" +#line 4055 "parse.y" { expand_start_catch_block (NULL_TREE, NULL_TREE); ; break;} case 740: -#line 4063 "parse.y" +#line 4071 "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 4070 "parse.y" +#line 4078 "parse.y" { tree label; do_label: label = define_label (input_filename, lineno, yyvsp[-1].ttype); @@ -8030,129 +8038,129 @@ case 741: ; break;} case 742: -#line 4077 "parse.y" +#line 4085 "parse.y" { goto do_label; ; break;} case 743: -#line 4079 "parse.y" +#line 4087 "parse.y" { goto do_label; ; break;} case 744: -#line 4081 "parse.y" +#line 4089 "parse.y" { goto do_label; ; break;} case 745: -#line 4086 "parse.y" +#line 4094 "parse.y" { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ; break;} case 747: -#line 4089 "parse.y" +#line 4097 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids compound statements inside for initializations"); ; break;} case 748: -#line 4098 "parse.y" +#line 4106 "parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} case 749: -#line 4101 "parse.y" +#line 4109 "parse.y" { emit_line_note (input_filename, lineno); ; break;} case 750: -#line 4106 "parse.y" +#line 4114 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 752: -#line 4109 "parse.y" +#line 4117 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 753: -#line 4116 "parse.y" +#line 4124 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 756: -#line 4123 "parse.y" +#line 4131 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} case 757: -#line 4128 "parse.y" +#line 4136 "parse.y" { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ; break;} case 758: -#line 4133 "parse.y" +#line 4141 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ; break;} case 759: -#line 4135 "parse.y" +#line 4143 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} case 760: -#line 4146 "parse.y" +#line 4154 "parse.y" { yyval.ttype = empty_parms(); ; break;} case 762: -#line 4151 "parse.y" +#line 4159 "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 4160 "parse.y" +#line 4168 "parse.y" { yyval.ttype = chainon (yyval.ttype, void_list_node); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 764: -#line 4165 "parse.y" +#line 4173 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 765: -#line 4170 "parse.y" +#line 4178 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 766: -#line 4174 "parse.y" +#line 4182 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 767: -#line 4179 "parse.y" +#line 4187 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 768: -#line 4183 "parse.y" +#line 4191 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 769: -#line 4187 "parse.y" +#line 4195 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 770: -#line 4191 "parse.y" +#line 4199 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} case 771: -#line 4196 "parse.y" +#line 4204 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -8165,7 +8173,7 @@ case 771: ; break;} case 772: -#line 4207 "parse.y" +#line 4215 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -8178,98 +8186,98 @@ case 772: ; break;} case 773: -#line 4222 "parse.y" +#line 4230 "parse.y" { maybe_snarf_defarg (); ; break;} case 774: -#line 4224 "parse.y" +#line 4232 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 777: -#line 4235 "parse.y" +#line 4243 "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 4238 "parse.y" +#line 4246 "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 4241 "parse.y" +#line 4249 "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 4244 "parse.y" +#line 4252 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 781: -#line 4246 "parse.y" +#line 4254 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ; break;} case 783: -#line 4252 "parse.y" +#line 4260 "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 4262 "parse.y" +#line 4270 "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 4266 "parse.y" +#line 4274 "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 4269 "parse.y" +#line 4277 "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 4272 "parse.y" +#line 4280 "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 4276 "parse.y" +#line 4284 "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 4280 "parse.y" +#line 4288 "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 4287 "parse.y" +#line 4295 "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 4290 "parse.y" +#line 4298 "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 4301 "parse.y" +#line 4309 "parse.y" { see_typename (); ; break;} case 795: -#line 4306 "parse.y" +#line 4314 "parse.y" { error ("type specifier omitted for parameter"); yyval.ttype = build_tree_list (integer_type_node, NULL_TREE); ; break;} case 796: -#line 4311 "parse.y" +#line 4319 "parse.y" { error ("type specifier omitted for parameter"); if (TREE_CODE (yyval.ttype) == SCOPE_REF @@ -8280,188 +8288,188 @@ case 796: ; break;} case 797: -#line 4323 "parse.y" +#line 4331 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 798: -#line 4325 "parse.y" +#line 4333 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 799: -#line 4327 "parse.y" +#line 4335 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ; break;} case 800: -#line 4332 "parse.y" +#line 4340 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ; break;} case 802: -#line 4338 "parse.y" +#line 4346 "parse.y" { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} case 803: -#line 4346 "parse.y" +#line 4354 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 804: -#line 4348 "parse.y" +#line 4356 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 805: -#line 4350 "parse.y" +#line 4358 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 806: -#line 4352 "parse.y" +#line 4360 "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 4359 "parse.y" +#line 4367 "parse.y" { got_scope = NULL_TREE; ; break;} case 808: -#line 4364 "parse.y" +#line 4372 "parse.y" { yyval.ttype = ansi_opname[MULT_EXPR]; ; break;} case 809: -#line 4366 "parse.y" +#line 4374 "parse.y" { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ; break;} case 810: -#line 4368 "parse.y" +#line 4376 "parse.y" { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ; break;} case 811: -#line 4370 "parse.y" +#line 4378 "parse.y" { yyval.ttype = ansi_opname[PLUS_EXPR]; ; break;} case 812: -#line 4372 "parse.y" +#line 4380 "parse.y" { yyval.ttype = ansi_opname[MINUS_EXPR]; ; break;} case 813: -#line 4374 "parse.y" +#line 4382 "parse.y" { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ; break;} case 814: -#line 4376 "parse.y" +#line 4384 "parse.y" { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ; break;} case 815: -#line 4378 "parse.y" +#line 4386 "parse.y" { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ; break;} case 816: -#line 4380 "parse.y" +#line 4388 "parse.y" { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ; break;} case 817: -#line 4382 "parse.y" +#line 4390 "parse.y" { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ; break;} case 818: -#line 4384 "parse.y" +#line 4392 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 819: -#line 4386 "parse.y" +#line 4394 "parse.y" { yyval.ttype = ansi_opname[LT_EXPR]; ; break;} case 820: -#line 4388 "parse.y" +#line 4396 "parse.y" { yyval.ttype = ansi_opname[GT_EXPR]; ; break;} case 821: -#line 4390 "parse.y" -{ yyval.ttype = ansi_opname[yyvsp[0].code]; ; - break;} -case 822: -#line 4392 "parse.y" -{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ; - break;} -case 823: -#line 4394 "parse.y" -{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ; - break;} -case 824: -#line 4396 "parse.y" -{ yyval.ttype = ansi_opname[yyvsp[0].code]; ; - break;} -case 825: #line 4398 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 826: +case 822: #line 4400 "parse.y" +{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ; + break;} +case 823: +#line 4402 "parse.y" +{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ; + break;} +case 824: +#line 4404 "parse.y" +{ yyval.ttype = ansi_opname[yyvsp[0].code]; ; + break;} +case 825: +#line 4406 "parse.y" +{ yyval.ttype = ansi_opname[yyvsp[0].code]; ; + break;} +case 826: +#line 4408 "parse.y" { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ; break;} case 827: -#line 4402 "parse.y" +#line 4410 "parse.y" { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ; break;} case 828: -#line 4404 "parse.y" +#line 4412 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ; break;} case 829: -#line 4406 "parse.y" +#line 4414 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ; break;} case 830: -#line 4408 "parse.y" +#line 4416 "parse.y" { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ; break;} case 831: -#line 4410 "parse.y" +#line 4418 "parse.y" { yyval.ttype = ansi_opname[COND_EXPR]; ; break;} case 832: -#line 4412 "parse.y" +#line 4420 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} case 833: -#line 4414 "parse.y" +#line 4422 "parse.y" { yyval.ttype = ansi_opname[COMPONENT_REF]; ; break;} case 834: -#line 4416 "parse.y" +#line 4424 "parse.y" { yyval.ttype = ansi_opname[MEMBER_REF]; ; break;} case 835: -#line 4418 "parse.y" +#line 4426 "parse.y" { yyval.ttype = ansi_opname[CALL_EXPR]; ; break;} case 836: -#line 4420 "parse.y" +#line 4428 "parse.y" { yyval.ttype = ansi_opname[ARRAY_REF]; ; break;} case 837: -#line 4422 "parse.y" +#line 4430 "parse.y" { yyval.ttype = ansi_opname[NEW_EXPR]; ; break;} case 838: -#line 4424 "parse.y" +#line 4432 "parse.y" { yyval.ttype = ansi_opname[DELETE_EXPR]; ; break;} case 839: -#line 4426 "parse.y" +#line 4434 "parse.y" { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ; break;} case 840: -#line 4428 "parse.y" +#line 4436 "parse.y" { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ; break;} case 841: -#line 4431 "parse.y" +#line 4439 "parse.y" { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} case 842: -#line 4433 "parse.y" +#line 4441 "parse.y" { yyval.ttype = ansi_opname[ERROR_MARK]; ; break;} } @@ -8662,7 +8670,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 4436 "parse.y" +#line 4444 "parse.y" #ifdef SPEW_DEBUG diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 754dbefc6aa..c0a921986d1 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -3293,7 +3293,11 @@ typename_sub0: else if (TREE_CODE ($2) == IDENTIFIER_NODE) cp_error ("`%T' is not a class or namespace", $2); else - $$ = $2; + { + $$ = $2; + if (TREE_CODE ($$) == TYPE_DECL) + $$ = TREE_TYPE ($$); + } } ; @@ -3310,7 +3314,11 @@ typename_sub1: else if (TREE_CODE ($2) == IDENTIFIER_NODE) cp_error ("`%T' is not a class or namespace", $2); else - $$ = $2; + { + $$ = $2; + if (TREE_CODE ($$) == TYPE_DECL) + $$ = TREE_TYPE ($$); + } } ;