]> gcc.gnu.org Git - gcc.git/commitdiff
parse.y (simple_stmt): If the condition isn't a declaration, start the controlled...
authorJason Merrill <jason@yorick.cygnus.com>
Fri, 13 Feb 1998 13:59:10 +0000 (13:59 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 13 Feb 1998 13:59:10 +0000 (08:59 -0500)
* parse.y (simple_stmt): If the condition isn't a declaration,
start the controlled block after the test.

From-SVN: r17967

gcc/cp/ChangeLog
gcc/cp/parse.c
gcc/cp/parse.y

index 2f1f6f0a077a1db737960d2f5b83000fb4ca9cc6..bdad01d52af8a851f47065043c7c05f469101300 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 13 13:24:32 1998  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * parse.y (simple_stmt): If the condition isn't a declaration, 
+       start the controlled block after the test.
+
 Fri Feb 13 02:26:10 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
        * call.c (build_over_call): Convert builtin abs, labs and fabs to
index ac800df9138895a1690f267f7bf230fee176c3fe..80ef276edeb0e3da396b1fc9d566653bb8190feb 100644 (file)
@@ -673,22 +673,22 @@ static const short yyrline[] = { 0,
   3420,  3422,  3424,  3426,  3428,  3436,  3438,  3439,  3440,  3443,
   3451,  3456,  3463,  3465,  3470,  3472,  3475,  3489,  3492,  3495,
   3504,  3516,  3527,  3547,  3557,  3560,  3568,  3580,  3583,  3586,
-  3589,  3605,  3608,  3619,  3620,  3624,  3639,  3658,  3670,  3684,
-  3698,  3711,  3730,  3748,  3767,  3775,  3796,  3814,  3827,  3828,
-  3831,  3831,  3834,  3834,  3837,  3837,  3843,  3849,  3852,  3857,
-  3864,  3873,  3882,  3891,  3899,  3912,  3914,  3918,  3920,  3923,
-  3930,  3933,  3941,  3957,  3968,  3980,  3982,  3985,  3995,  4005,
-  4016,  4018,  4020,  4023,  4040,  4046,  4054,  4056,  4058,  4062,
-  4065,  4066,  4074,  4078,  4082,  4085,  4086,  4092,  4095,  4098,
-  4100,  4104,  4109,  4112,  4122,  4127,  4128,  4136,  4142,  4147,
-  4151,  4156,  4160,  4164,  4168,  4173,  4184,  4198,  4202,  4205,
-  4207,  4211,  4215,  4218,  4221,  4223,  4227,  4229,  4236,  4243,
-  4246,  4249,  4253,  4257,  4263,  4267,  4272,  4274,  4277,  4282,
-  4288,  4299,  4302,  4304,  4308,  4313,  4315,  4322,  4325,  4327,
-  4329,  4335,  4340,  4343,  4345,  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,  4408,  4410
+  3589,  3605,  3608,  3619,  3620,  3624,  3639,  3667,  3679,  3693,
+  3707,  3720,  3739,  3757,  3785,  3793,  3814,  3832,  3845,  3846,
+  3849,  3849,  3852,  3852,  3855,  3855,  3861,  3867,  3870,  3875,
+  3882,  3891,  3900,  3909,  3917,  3930,  3932,  3936,  3938,  3941,
+  3948,  3951,  3959,  3975,  3986,  3998,  4000,  4003,  4013,  4023,
+  4034,  4036,  4038,  4041,  4058,  4064,  4072,  4074,  4076,  4080,
+  4083,  4084,  4092,  4096,  4100,  4103,  4104,  4110,  4113,  4116,
+  4118,  4122,  4127,  4130,  4140,  4145,  4146,  4154,  4160,  4165,
+  4169,  4174,  4178,  4182,  4186,  4191,  4202,  4216,  4220,  4223,
+  4225,  4229,  4233,  4236,  4239,  4241,  4245,  4247,  4254,  4261,
+  4264,  4267,  4271,  4275,  4281,  4285,  4290,  4292,  4295,  4300,
+  4306,  4317,  4320,  4322,  4326,  4331,  4333,  4340,  4343,  4345,
+  4347,  4353,  4358,  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,  4419,  4421,  4423,  4426,  4428
 };
 #endif
 
@@ -7479,10 +7479,19 @@ case 687:
                      emit_line_note (input_filename, lineno);
                      expand_exit_loop_if_false (0, yyvsp[0].ttype);
                    }
+
+                 /* If the condition wasn't a declaration, clear out the
+                    block we made for it and start a new one here so the
+                    optimization in expand_end_loop will work.  */
+                 if (TREE_CODE (yyvsp[0].ttype) != VAR_DECL)
+                   {
+                     do_poplevel ();
+                     do_pushlevel ();
+                   }
                ;
     break;}
 case 688:
-#line 3659 "parse.y"
+#line 3668 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7496,7 +7505,7 @@ case 688:
                ;
     break;}
 case 689:
-#line 3671 "parse.y"
+#line 3680 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7512,7 +7521,7 @@ case 689:
                ;
     break;}
 case 690:
-#line 3685 "parse.y"
+#line 3694 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7528,7 +7537,7 @@ case 690:
                ;
     break;}
 case 691:
-#line 3699 "parse.y"
+#line 3708 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype;
@@ -7543,7 +7552,7 @@ case 691:
                ;
     break;}
 case 692:
-#line 3712 "parse.y"
+#line 3721 "parse.y"
 { if (processing_template_decl)
                    {
                      yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, 
@@ -7564,7 +7573,7 @@ case 692:
                ;
     break;}
 case 693:
-#line 3731 "parse.y"
+#line 3740 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7584,7 +7593,7 @@ case 693:
                ;
     break;}
 case 694:
-#line 3749 "parse.y"
+#line 3758 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7602,10 +7611,19 @@ case 694:
                      emit_line_note (input_filename, lineno);
                      if (yyvsp[-1].ttype) expand_exit_loop_if_false (0, yyvsp[-1].ttype);
                    }
+
+                 /* If the condition wasn't a declaration, clear out the
+                    block we made for it and start a new one here so the
+                    optimization in expand_end_loop will work.  */
+                 if (yyvsp[-1].ttype == NULL_TREE || TREE_CODE (yyvsp[-1].ttype) != VAR_DECL)
+                   {
+                     do_poplevel ();
+                     do_pushlevel ();
+                   }
                ;
     break;}
 case 695:
-#line 3770 "parse.y"
+#line 3788 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype;
@@ -7613,7 +7631,7 @@ case 695:
                ;
     break;}
 case 696:
-#line 3776 "parse.y"
+#line 3794 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7636,7 +7654,7 @@ case 696:
                  finish_stmt (); ;
     break;}
 case 697:
-#line 3797 "parse.y"
+#line 3815 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7655,7 +7673,7 @@ case 697:
                ;
     break;}
 case 698:
-#line 3814 "parse.y"
+#line 3832 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7670,23 +7688,23 @@ case 698:
                ;
     break;}
 case 699:
-#line 3827 "parse.y"
+#line 3845 "parse.y"
 { finish_stmt (); ;
     break;}
 case 700:
-#line 3829 "parse.y"
+#line 3847 "parse.y"
 { do_case (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 702:
-#line 3832 "parse.y"
+#line 3850 "parse.y"
 { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 704:
-#line 3835 "parse.y"
+#line 3853 "parse.y"
 { do_case (NULL_TREE, NULL_TREE); ;
     break;}
 case 706:
-#line 3838 "parse.y"
+#line 3856 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (BREAK_STMT));
@@ -7694,7 +7712,7 @@ case 706:
                    error ("break statement not within loop or switch"); ;
     break;}
 case 707:
-#line 3844 "parse.y"
+#line 3862 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (CONTINUE_STMT));
@@ -7702,19 +7720,19 @@ case 707:
                    error ("continue statement not within a loop"); ;
     break;}
 case 708:
-#line 3850 "parse.y"
+#line 3868 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (NULL_TREE); ;
     break;}
 case 709:
-#line 3853 "parse.y"
+#line 3871 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (yyvsp[-1].ttype);
                  finish_stmt ();
                ;
     break;}
 case 710:
-#line 3858 "parse.y"
+#line 3876 "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);
@@ -7722,7 +7740,7 @@ case 710:
                ;
     break;}
 case 711:
-#line 3865 "parse.y"
+#line 3883 "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,
@@ -7732,7 +7750,7 @@ case 711:
                ;
     break;}
 case 712:
-#line 3874 "parse.y"
+#line 3892 "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,
@@ -7742,7 +7760,7 @@ case 712:
                ;
     break;}
 case 713:
-#line 3884 "parse.y"
+#line 3902 "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,
@@ -7752,7 +7770,7 @@ case 713:
                ;
     break;}
 case 714:
-#line 3892 "parse.y"
+#line 3910 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7762,7 +7780,7 @@ case 714:
                ;
     break;}
 case 715:
-#line 3900 "parse.y"
+#line 3918 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7777,21 +7795,21 @@ case 715:
                ;
     break;}
 case 716:
-#line 3913 "parse.y"
+#line 3931 "parse.y"
 { finish_stmt (); ;
     break;}
 case 717:
-#line 3915 "parse.y"
+#line 3933 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
 case 718:
-#line 3919 "parse.y"
+#line 3937 "parse.y"
 { finish_stmt (); ;
     break;}
 case 720:
-#line 3925 "parse.y"
+#line 3943 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -7799,11 +7817,11 @@ case 720:
                ;
     break;}
 case 721:
-#line 3931 "parse.y"
+#line 3949 "parse.y"
 { expand_start_all_catch (); ;
     break;}
 case 722:
-#line 3933 "parse.y"
+#line 3951 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -7812,7 +7830,7 @@ case 722:
                ;
     break;}
 case 723:
-#line 3943 "parse.y"
+#line 3961 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7828,7 +7846,7 @@ case 723:
                ;
     break;}
 case 724:
-#line 3957 "parse.y"
+#line 3975 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7841,7 +7859,7 @@ case 724:
                ;
     break;}
 case 725:
-#line 3968 "parse.y"
+#line 3986 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7854,7 +7872,7 @@ case 725:
                ;
     break;}
 case 728:
-#line 3987 "parse.y"
+#line 4005 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7865,7 +7883,7 @@ case 728:
                ;
     break;}
 case 729:
-#line 3996 "parse.y"
+#line 4014 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7876,7 +7894,7 @@ case 729:
                ;
     break;}
 case 730:
-#line 4005 "parse.y"
+#line 4023 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7889,17 +7907,17 @@ case 730:
                ;
     break;}
 case 734:
-#line 4025 "parse.y"
+#line 4043 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
 case 735:
-#line 4041 "parse.y"
+#line 4059 "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 736:
-#line 4048 "parse.y"
+#line 4066 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7908,129 +7926,129 @@ case 736:
                ;
     break;}
 case 737:
-#line 4055 "parse.y"
+#line 4073 "parse.y"
 { goto do_label; ;
     break;}
 case 738:
-#line 4057 "parse.y"
+#line 4075 "parse.y"
 { goto do_label; ;
     break;}
 case 739:
-#line 4059 "parse.y"
+#line 4077 "parse.y"
 { goto do_label; ;
     break;}
 case 740:
-#line 4064 "parse.y"
+#line 4082 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
 case 742:
-#line 4067 "parse.y"
+#line 4085 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
 case 743:
-#line 4076 "parse.y"
+#line 4094 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 744:
-#line 4079 "parse.y"
+#line 4097 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
 case 745:
-#line 4084 "parse.y"
+#line 4102 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 747:
-#line 4087 "parse.y"
+#line 4105 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 748:
-#line 4094 "parse.y"
+#line 4112 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 751:
-#line 4101 "parse.y"
+#line 4119 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 752:
-#line 4106 "parse.y"
+#line 4124 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 753:
-#line 4111 "parse.y"
+#line 4129 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
 case 754:
-#line 4113 "parse.y"
+#line 4131 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 755:
-#line 4124 "parse.y"
+#line 4142 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
 case 757:
-#line 4129 "parse.y"
+#line 4147 "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 758:
-#line 4138 "parse.y"
+#line 4156 "parse.y"
 {
                  yyval.ttype = chainon (yyval.ttype, void_list_node);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 759:
-#line 4143 "parse.y"
+#line 4161 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 760:
-#line 4148 "parse.y"
+#line 4166 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 761:
-#line 4152 "parse.y"
+#line 4170 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); 
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 762:
-#line 4157 "parse.y"
+#line 4175 "parse.y"
 {
                  yyval.ttype = NULL_TREE;
                ;
     break;}
 case 763:
-#line 4161 "parse.y"
+#line 4179 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 764:
-#line 4165 "parse.y"
+#line 4183 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 765:
-#line 4169 "parse.y"
+#line 4187 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
 case 766:
-#line 4174 "parse.y"
+#line 4192 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -8043,7 +8061,7 @@ case 766:
                ;
     break;}
 case 767:
-#line 4185 "parse.y"
+#line 4203 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -8056,98 +8074,98 @@ case 767:
                ;
     break;}
 case 768:
-#line 4200 "parse.y"
+#line 4218 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
 case 769:
-#line 4202 "parse.y"
+#line 4220 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 772:
-#line 4213 "parse.y"
+#line 4231 "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 773:
-#line 4216 "parse.y"
+#line 4234 "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 774:
-#line 4219 "parse.y"
+#line 4237 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
 case 775:
-#line 4222 "parse.y"
+#line 4240 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 776:
-#line 4224 "parse.y"
+#line 4242 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 778:
-#line 4230 "parse.y"
+#line 4248 "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 779:
-#line 4240 "parse.y"
+#line 4258 "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 780:
-#line 4244 "parse.y"
+#line 4262 "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 781:
-#line 4247 "parse.y"
+#line 4265 "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 782:
-#line 4250 "parse.y"
+#line 4268 "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 783:
-#line 4254 "parse.y"
+#line 4272 "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 784:
-#line 4258 "parse.y"
+#line 4276 "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 785:
-#line 4265 "parse.y"
+#line 4283 "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 786:
-#line 4268 "parse.y"
+#line 4286 "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 789:
-#line 4279 "parse.y"
+#line 4297 "parse.y"
 { see_typename (); ;
     break;}
 case 790:
-#line 4284 "parse.y"
+#line 4302 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
 case 791:
-#line 4289 "parse.y"
+#line 4307 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -8158,188 +8176,188 @@ case 791:
                ;
     break;}
 case 792:
-#line 4301 "parse.y"
+#line 4319 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 793:
-#line 4303 "parse.y"
+#line 4321 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 794:
-#line 4305 "parse.y"
+#line 4323 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
 case 795:
-#line 4310 "parse.y"
+#line 4328 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
 case 797:
-#line 4316 "parse.y"
+#line 4334 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
 case 798:
-#line 4324 "parse.y"
+#line 4342 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 799:
-#line 4326 "parse.y"
+#line 4344 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 800:
-#line 4328 "parse.y"
+#line 4346 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 801:
-#line 4330 "parse.y"
+#line 4348 "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 802:
-#line 4337 "parse.y"
+#line 4355 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
 case 803:
-#line 4342 "parse.y"
+#line 4360 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
 case 804:
-#line 4344 "parse.y"
+#line 4362 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
 case 805:
-#line 4346 "parse.y"
+#line 4364 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
 case 806:
-#line 4348 "parse.y"
+#line 4366 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
 case 807:
-#line 4350 "parse.y"
+#line 4368 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
 case 808:
-#line 4352 "parse.y"
+#line 4370 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
 case 809:
-#line 4354 "parse.y"
+#line 4372 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
 case 810:
-#line 4356 "parse.y"
+#line 4374 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
 case 811:
-#line 4358 "parse.y"
+#line 4376 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
 case 812:
-#line 4360 "parse.y"
+#line 4378 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
 case 813:
-#line 4362 "parse.y"
+#line 4380 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 814:
-#line 4364 "parse.y"
+#line 4382 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
 case 815:
-#line 4366 "parse.y"
+#line 4384 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
 case 816:
-#line 4368 "parse.y"
+#line 4386 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 817:
-#line 4370 "parse.y"
+#line 4388 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
 case 818:
-#line 4372 "parse.y"
+#line 4390 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
 case 819:
-#line 4374 "parse.y"
+#line 4392 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 820:
-#line 4376 "parse.y"
+#line 4394 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 821:
-#line 4378 "parse.y"
+#line 4396 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
 case 822:
-#line 4380 "parse.y"
+#line 4398 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
 case 823:
-#line 4382 "parse.y"
+#line 4400 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
 case 824:
-#line 4384 "parse.y"
+#line 4402 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
 case 825:
-#line 4386 "parse.y"
+#line 4404 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
 case 826:
-#line 4388 "parse.y"
+#line 4406 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
 case 827:
-#line 4390 "parse.y"
+#line 4408 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 828:
-#line 4392 "parse.y"
+#line 4410 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
 case 829:
-#line 4394 "parse.y"
+#line 4412 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
 case 830:
-#line 4396 "parse.y"
+#line 4414 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
 case 831:
-#line 4398 "parse.y"
+#line 4416 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
 case 832:
-#line 4400 "parse.y"
+#line 4418 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
 case 833:
-#line 4402 "parse.y"
+#line 4420 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
 case 834:
-#line 4404 "parse.y"
+#line 4422 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
 case 835:
-#line 4406 "parse.y"
+#line 4424 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
 case 836:
-#line 4409 "parse.y"
+#line 4427 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 837:
-#line 4411 "parse.y"
+#line 4429 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
@@ -8540,7 +8558,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 4414 "parse.y"
+#line 4432 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 7ef287c00f25829bbe44032be3b54215cb644247..edc6cf7982b381e6d6119f51cd7516085c11f554 100644 (file)
@@ -3654,6 +3654,15 @@ simple_stmt:
                      emit_line_note (input_filename, lineno);
                      expand_exit_loop_if_false (0, $4);
                    }
+
+                 /* If the condition wasn't a declaration, clear out the
+                    block we made for it and start a new one here so the
+                    optimization in expand_end_loop will work.  */
+                 if (TREE_CODE ($4) != VAR_DECL)
+                   {
+                     do_poplevel ();
+                     do_pushlevel ();
+                   }
                }
          already_scoped_stmt .poplevel
                {
@@ -3763,6 +3772,15 @@ simple_stmt:
                      emit_line_note (input_filename, lineno);
                      if ($7) expand_exit_loop_if_false (0, $7);
                    }
+
+                 /* If the condition wasn't a declaration, clear out the
+                    block we made for it and start a new one here so the
+                    optimization in expand_end_loop will work.  */
+                 if ($7 == NULL_TREE || TREE_CODE ($7) != VAR_DECL)
+                   {
+                     do_poplevel ();
+                     do_pushlevel ();
+                   }
                }
          xexpr ')'
                /* Don't let the tree nodes for $10 be discarded
This page took 0.130093 seconds and 5 git commands to generate.