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]

Re: Exit code for errors detected by cpplib


I thought we had already fixed this? I just checked in gcc/cp/lex.c and the global
errorcount is indeed incremented by parse_in.errors.

Dave

Nick Clifton wrote:

> Hi Guys,
>
>   This is a patch to fix a minor problem with cpplib.  Currently if
>   cpplib detects any errors, this will not be reflected in the status
>   code returned by gcc/g++.  The patch fixes this problem by
>   maintaining a count of the number of errors encountered by cpplib,
>   and then having the C and C++ front ends check this value and if it
>   is non-zero, signaling this to main() by increasing the global error
>   count.
>
>   May I apply this patch ?
>
> Cheers
>         Nick
>
> 1999-11-29  Nick Clifton  <nickc@cygnus.com>
>
>         * cpplib.c (cpp_errors): New static variable: a count of the
>         number of errors encounterd by cpplib.
>         (cpp_error_from_errno): Increment cpp_errors.
>         (cpp_perror_with_name): Increment cpp_errors.
>         (cpp_get_num_errors): New Function: return the number of
>         errors encountered by cpplib so far.
>         (cpp_set_num_errors): New Function: set the number of errors
>         encountered by cpplib so far.
>
>         * cppinit.c (initialize_builtins): Initialise error count to
>         zero.
>
>         * cpplib.h: Declare prototypes for cpp_get_num_errors() and
>         cpp_set_num_errors().
>
>         * c-decl.c (finish_function): Is using cpplib, check to see if
>         any errors were detected.
>
> Index: cpplib.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/cpplib.c,v
> retrieving revision 1.96
> diff -p -r1.96 cpplib.c
> *** cpplib.c    1999/10/29 04:31:13     1.96
> --- cpplib.c    1999/11/29 19:05:07
> *************** do_sccs (pfile, keyword)
> *** 1677,1682 ****
> --- 1677,1683 ----
>   }
>   #endif
>
> + static unsigned int cpp_errors;
>
>   /* We've found an `#if' directive.  If the only thing before it in
>      this file is white space, and if it is of the form
> *************** cpp_error_from_errno (pfile, name)
> *** 3512,3517 ****
> --- 3513,3519 ----
>        const char *name;
>   {
>     cpp_message_from_errno (pfile, 1, name);
> +   ++ cpp_errors;
>   }
>
>   void
> *************** cpp_perror_with_name (pfile, name)
> *** 3537,3542 ****
> --- 3539,3558 ----
>        const char *name;
>   {
>     cpp_message (pfile, 1, "%s: %s: %s", progname, name, my_strerror (errno));
> +   ++ cpp_errors;
> + }
> +
> + unsigned int
> + cpp_get_num_errors ()
> + {
> +   return cpp_errors;
> + }
> +
> + void
> + cpp_get_num_errors (num)
> +      unsigned int num;
> + {
> +   cpp_errors = num;
>   }
>
>   /* TODO:
>
> Index: cppinit.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/cppinit.c,v
> retrieving revision 1.25
> diff -p -r1.25 cppinit.c
> *** cppinit.c   1999/11/18 11:01:34     1.25
> --- cppinit.c   1999/11/29 19:05:08
> *************** initialize_builtins (pfile)
> *** 573,578 ****
> --- 573,579 ----
>         dump_special_to_buffer (pfile, b->name);
>       }
>
> +   cpp_set_num_errors (0);
>   }
>   #undef DUMP
>   #undef STDC
>
> Index: cpplib.h
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/cpplib.h,v
> retrieving revision 1.44
> diff -p -r1.44 cpplib.h
> *** cpplib.h    1999/10/29 04:31:14     1.44
> --- cpplib.h    1999/11/29 19:05:08
> *************** extern void cpp_message_from_errno PROTO
> *** 732,737 ****
> --- 732,739 ----
>   extern void cpp_error_from_errno PROTO ((cpp_reader *, const char *));
>   extern void cpp_perror_with_name PROTO ((cpp_reader *, const char *));
>   extern void v_cpp_message PROTO ((cpp_reader *, int, const char *, va_list));
> + extern unsigned int cpp_get_num_errors PROTO ((void));
> + extern void cpp_set_num_errors PROTO ((unsigned int));
>
>   extern void cpp_grow_buffer PARAMS ((cpp_reader *, long));
>   extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
>
> Index: c-decl.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/c-decl.c,v
> retrieving revision 1.90
> diff -p -r1.90 c-decl.c
> *** c-decl.c    1999/11/25 16:58:31     1.90
> --- c-decl.c    1999/11/29 19:05:10
> *************** finish_function (nested)
> *** 6813,6818 ****
> --- 6813,6825 ----
>          pop_c_function_context and then reset via pop_function_context.  */
>         current_function_decl = NULL;
>       }
> +
> + #ifdef USE_CPPLIB
> +   /* Make sure that any errors detected by cpplib get reflected in the
> +      exit status of gcc.  */
> +   if (cpp_get_num_errors ())
> +     ++ errorcount;
> + #endif
>   }
>
>   /* Save and restore the variables in this file and elsewhere
>
> 1999-11-29  Nick Clifton  <nickc@cygnus.com>
>
>         * decl.c (finish_function): Is using cpplib, check to see if
>         any errors were detected.
>
> Index: cp/decl.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/cp/decl.c,v
> retrieving revision 1.510
> diff -p -r1.510 decl.c
> *** decl.c      1999/11/25 20:32:03     1.510
> --- decl.c      1999/11/29 19:05:15
> *************** finish_function (lineno, flags)
> *** 13794,13799 ****
> --- 13794,13806 ----
>         current_function_decl = NULL_TREE;
>       }
>
> + #ifdef USE_CPPLIB
> +   /* Make sure that any errors detected by cpplib get reflected in the
> +      exit status of g++.  */
> +   if (cpp_get_num_errors ())
> +     ++ errorcount;
> + #endif
> +
>     return fndecl;
>   }




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