This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [c] tidy if generation and warnings


I apologize.  I can only guess that I bootstrapped the wrong tree
before committing this patch.  C front end build warnings and objc
build failures fixed thus.


r~


        * c-common.h (c_begin_if_stmt, c_begin_while_stmt,
        c_finish_while_stmt_cond): Remove decls.
        * c-parse.in (if_prefix): Don't save c_begin_if_stmt result.
        * c-typeck.c (c_begin_if_stmt): Return void.
        (c_begin_else): Tidy.  Save stmt_count.
        * c-tree.h (c_begin_if_stmt): Update decl.
   
        * objc/objc-act.c (objc_build_try_enter_fragment,
        objc_build_extract_fragment, objc_build_try_epilogue,
        objc_build_catch_stmt, objc_build_catch_epilogue,
        objc_build_finally_prologue, objc_build_finally_epilogue): Update
        for if builder function changes.

Index: gcc/c-common.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-common.h,v
retrieving revision 1.234
diff -c -p -d -u -r1.234 c-common.h
--- gcc/c-common.h	16 Jun 2004 20:51:37 -0000	1.234
+++ gcc/c-common.h	17 Jun 2004 01:02:26 -0000
@@ -300,9 +300,6 @@ extern void push_cleanup (tree, tree, bo
 
 extern tree walk_stmt_tree (tree *, walk_tree_fn, void *);
 extern void prep_stmt (tree);
-extern tree c_begin_if_stmt (void);
-extern tree c_begin_while_stmt (void);
-extern void c_finish_while_stmt_cond (tree, tree);
 extern int c_expand_decl (tree);
 
 extern int field_decl_cmp (const void *, const void *);
Index: gcc/c-parse.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-parse.in,v
retrieving revision 1.212
diff -c -p -d -u -r1.212 c-parse.in
--- gcc/c-parse.in	16 Jun 2004 23:05:25 -0000	1.212
+++ gcc/c-parse.in	17 Jun 2004 01:02:27 -0000
@@ -2069,7 +2069,7 @@ if_prefix:
 	     line containing the "if", and not the line containing
 	     the close-parenthesis.  */
           IF
-                { $<ttype>$ = c_begin_if_stmt (); }
+                { c_begin_if_stmt (); }
             '(' expr ')'
 		{ c_finish_if_cond ($4, compstmt_count, ++stmt_count); }
         ;
Index: gcc/c-tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-tree.h,v
retrieving revision 1.151
diff -c -p -d -u -r1.151 c-tree.h
--- gcc/c-tree.h	16 Jun 2004 23:05:26 -0000	1.151
+++ gcc/c-tree.h	17 Jun 2004 01:02:27 -0000
@@ -256,7 +256,7 @@ extern tree c_convert_parm_for_inlining 
 extern int c_types_compatible_p (tree, tree);
 extern tree c_begin_compound_stmt (bool);
 extern tree c_end_compound_stmt (tree, bool);
-extern tree c_begin_if_stmt (void);
+extern void c_begin_if_stmt (void);
 extern void c_finish_if_cond (tree, int, int);
 extern void c_finish_then (tree);
 extern void c_begin_else (int);
Index: gcc/c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.317
diff -c -p -d -u -r1.317 c-typeck.c
--- gcc/c-typeck.c	16 Jun 2004 23:05:28 -0000	1.317
+++ gcc/c-typeck.c	17 Jun 2004 01:02:27 -0000
@@ -6486,7 +6486,7 @@ static int if_stack_pointer = 0;
 /* Begin an if-statement.  Returns a newly created IF_STMT if
    appropriate.  */
 
-tree
+void
 c_begin_if_stmt (void)
 {
   tree r;
@@ -6546,20 +6546,22 @@ c_finish_then (tree then_stmt)
 void
 c_begin_else (int stmt_count)
 {
+  if_elt *elt = &if_stack[if_stack_pointer - 1];
+
   /* An ambiguous else warning must be generated for the enclosing if
      statement, unless we see an else branch for that one, too.  */
   if (warn_parentheses
       && if_stack_pointer > 1
-      && (if_stack[if_stack_pointer - 1].compstmt_count
-	  == if_stack[if_stack_pointer - 2].compstmt_count))
-    if_stack[if_stack_pointer - 2].needs_warning = 1;
+      && (elt[0].compstmt_count == elt[-1].compstmt_count))
+    elt[-1].needs_warning = 1;
 
   /* Even if a nested if statement had an else branch, it can't be
      ambiguous if this one also has an else.  So don't warn in that
      case.  Also don't warn for any if statements nested in this else.  */
-  if_stack[if_stack_pointer - 1].needs_warning = 0;
-  if_stack[if_stack_pointer - 1].compstmt_count--;
-  if_stack[if_stack_pointer - 1].saw_else = 1;
+  elt->needs_warning = 0;
+  elt->compstmt_count--;
+  elt->saw_else = 1;
+  elt->stmt_count = stmt_count;
 }
 
 /* Called after the else-clause for an if-statement is processed.  */
Index: gcc/objc/objc-act.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/objc/objc-act.c,v
retrieving revision 1.219
diff -c -p -d -u -r1.219 objc-act.c
--- gcc/objc/objc-act.c	16 Jun 2004 01:21:35 -0000	1.219
+++ gcc/objc/objc-act.c	17 Jun 2004 01:02:27 -0000
@@ -2780,7 +2780,7 @@ objc_build_try_enter_fragment (void)
   /* objc_exception_try_enter(&_stackExceptionData);
      if (!_setjmp(&_stackExceptionData.buf)) {  */
 
-  tree func_params, if_stmt, cond;
+  tree func_params, cond;
 
   func_params
     = tree_cons (NULL_TREE,
@@ -2802,7 +2802,7 @@ objc_build_try_enter_fragment (void)
 #error
 #endif
 
-  if_stmt = c_begin_if_stmt ();
+  c_begin_if_stmt ();
   if_nesting_count++;
   /* If <setjmp.h> has been included, the _setjmp prototype has
      acquired a real, breathing type for its parameter.  Cast our
@@ -2821,7 +2821,7 @@ objc_build_try_enter_fragment (void)
   cond = build_unary_op (TRUTH_NOT_EXPR,
 			 build_function_call (objc_setjmp_decl, func_params),
 			 0);
-  c_expand_start_cond (lang_hooks.truthvalue_conversion (cond), 0, if_stmt);
+  c_finish_if_cond (cond, 0, 0);
   objc_enter_block ();
 }
 
@@ -2865,14 +2865,14 @@ objc_build_extract_fragment (void)
 
   c_finish_then (objc_exit_block ());
 
-  c_expand_start_else ();
+  c_begin_else (0);
   objc_enter_block ();
   c_expand_expr_stmt (build_modify_expr
 		      (TREE_VALUE (objc_rethrow_exception),
 		       NOP_EXPR,
 		       objc_build_extract_expr ()));
   c_finish_else (objc_exit_block ());
-  c_expand_end_cond ();
+  c_finish_if_stmt (1);
   if_nesting_count--;
 }
 
@@ -2928,11 +2928,9 @@ objc_build_try_epilogue (int also_catch_
 	   if(!_setjmp(&_stackExceptionData.buf)) {
 	     if (0) {  */
 
-      tree if_stmt;
-
       c_finish_then (objc_exit_block ());
     		
-      c_expand_start_else ();
+      c_begin_else (0);
       objc_enter_block ();
       objc_caught_exception
 	= tree_cons (NULL_TREE,
@@ -2943,10 +2941,9 @@ objc_build_try_epilogue (int also_catch_
 		     objc_caught_exception);
       objc_build_try_enter_fragment ();
       val_stack_push (&catch_count_stack, 1);
-      if_stmt = c_begin_if_stmt ();
+      c_begin_if_stmt ();
       if_nesting_count++;
-      c_expand_start_cond (lang_hooks.truthvalue_conversion (boolean_false_node),
-			   0, if_stmt);
+      c_finish_if_cond (boolean_false_node, 0, 0);
       objc_enter_block ();
 
       /* Start a new chain of @catch statements for this @try.  */
@@ -2970,7 +2967,7 @@ objc_build_catch_stmt (tree catch_expr)
   /* } else if (objc_exception_match(objc_get_class("SomeClass"), _caughtException)) {
        register SomeClass *e = _caughtException;  */
 
-  tree if_stmt, cond, func_params, prev_catch, var_name, var_type;
+  tree cond, func_params, prev_catch, var_name, var_type;
   int catch_id;
 
 #ifndef OBJCPLUS
@@ -3014,9 +3011,9 @@ objc_build_catch_stmt (tree catch_expr)
 
   c_finish_then (objc_exit_block ());
 
-  c_expand_start_else ();
+  c_begin_else (0);
   catch_count_stack->val++;
-  if_stmt = c_begin_if_stmt ();
+  c_begin_if_stmt ();
   if_nesting_count++;
 
   if (catch_id)
@@ -3034,7 +3031,7 @@ objc_build_catch_stmt (tree catch_expr)
       cond = build_function_call (objc_exception_match_decl, func_params);
     }
 
-  c_expand_start_cond (lang_hooks.truthvalue_conversion (cond), 0, if_stmt);
+  c_finish_if_cond (cond, 0, 0);
   objc_enter_block ();
   objc_declare_variable (RID_REGISTER, var_name,
 			 build_pointer_type (var_type),
@@ -3057,7 +3054,7 @@ objc_build_catch_epilogue (void)
 
   c_finish_then (objc_exit_block ());
 
-  c_expand_start_else ();
+  c_begin_else (0);
   objc_enter_block ();
   c_expand_expr_stmt
     (build_modify_expr
@@ -3070,7 +3067,7 @@ objc_build_catch_epilogue (void)
     {
       /* FIXME.  Need to have the block of each else that was opened.  */
       c_finish_else ((abort (), NULL)); /* close off all the nested ifs ! */
-      c_expand_end_cond ();
+      c_finish_if_stmt (1);
       if_nesting_count--;
     }
   val_stack_pop (&catch_count_stack);
@@ -3079,7 +3076,7 @@ objc_build_catch_epilogue (void)
   objc_build_extract_fragment ();
 
   c_finish_else (objc_exit_block ());
-  c_expand_end_cond ();
+  c_finish_if_stmt (1);
   if_nesting_count--;
   objc_exit_block ();
 
@@ -3099,18 +3096,16 @@ objc_build_finally_prologue (void)
 
   tree blk = objc_enter_block ();
 
-  tree if_stmt = c_begin_if_stmt ();
+  c_begin_if_stmt ();
   if_nesting_count++;
 
-  c_expand_start_cond (lang_hooks.truthvalue_conversion
-			(build_unary_op (TRUTH_NOT_EXPR,
-					 TREE_VALUE (objc_rethrow_exception),
-					 0)),
-		       0, if_stmt);
+  c_finish_if_cond (build_unary_op (TRUTH_NOT_EXPR,
+				    TREE_VALUE (objc_rethrow_exception), 0),
+		    0, 0);
   objc_enter_block ();
   objc_build_try_exit_fragment ();
   c_finish_then (objc_exit_block ());
-  c_expand_end_cond ();
+  c_finish_if_stmt (1);
   if_nesting_count--;
 
   return blk;
@@ -3125,16 +3120,14 @@ objc_build_finally_epilogue (void)
       } // end FINALLY scope
     } */
 
-  tree if_stmt = c_begin_if_stmt ();
+  c_begin_if_stmt ();
   if_nesting_count++;
 
-  c_expand_start_cond
-    (lang_hooks.truthvalue_conversion (TREE_VALUE (objc_rethrow_exception)),
-     0, if_stmt);
+  c_finish_if_cond (TREE_VALUE (objc_rethrow_exception), 0, 0);
   objc_enter_block ();
   objc_build_throw_stmt (TREE_VALUE (objc_rethrow_exception));
   c_finish_then (objc_exit_block ());
-  c_expand_end_cond ();
+  c_finish_if_stmt (1);
   if_nesting_count--;
 
   objc_exit_block ();


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]