LCOV - code coverage report
Current view: top level - gcc - diagnostic-global-context.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 92.5 % 266 246
Test Date: 2024-12-21 13:15:12 Functions: 94.4 % 36 34
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* Language-independent diagnostic subroutines that implicitly use global_dc.
       2                 :             :    Copyright (C) 1999-2024 Free Software Foundation, Inc.
       3                 :             :    Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
       4                 :             : 
       5                 :             : This file is part of GCC.
       6                 :             : 
       7                 :             : GCC is free software; you can redistribute it and/or modify it under
       8                 :             : the terms of the GNU General Public License as published by the Free
       9                 :             : Software Foundation; either version 3, or (at your option) any later
      10                 :             : version.
      11                 :             : 
      12                 :             : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13                 :             : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14                 :             : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15                 :             : for more details.
      16                 :             : 
      17                 :             : You should have received a copy of the GNU General Public License
      18                 :             : along with GCC; see the file COPYING3.  If not see
      19                 :             : <http://www.gnu.org/licenses/>.  */
      20                 :             : 
      21                 :             : 
      22                 :             : /* This file implements the parts of the language independent aspect
      23                 :             :    of diagnostic messages that implicitly use global_dc.  */
      24                 :             : 
      25                 :             : #include "config.h"
      26                 :             : #include "system.h"
      27                 :             : #include "coretypes.h"
      28                 :             : #include "intl.h"
      29                 :             : #include "diagnostic.h"
      30                 :             : #include "diagnostic-format.h"
      31                 :             : 
      32                 :             : /* A diagnostic_context surrogate for stderr.  */
      33                 :             : static diagnostic_context global_diagnostic_context;
      34                 :             : diagnostic_context *global_dc = &global_diagnostic_context;
      35                 :             : 
      36                 :             : /* Standard error reporting routines in increasing order of severity.  */
      37                 :             : 
      38                 :             : /* Text to be emitted verbatim to the error message stream; this
      39                 :             :    produces no prefix and disables line-wrapping.  Use rarely.
      40                 :             :    It is ignored for machine-readable output formats.  */
      41                 :             : void
      42                 :           0 : verbatim (const char *gmsgid, ...)
      43                 :             : {
      44                 :           0 :   va_list ap;
      45                 :             : 
      46                 :           0 :   va_start (ap, gmsgid);
      47                 :           0 :   text_info text (_(gmsgid), &ap, errno);
      48                 :           0 :   global_dc->report_verbatim (text);
      49                 :           0 :   va_end (ap);
      50                 :           0 : }
      51                 :             : 
      52                 :             : /* Wrapper around diagnostic_context::diagnostic_impl
      53                 :             :    implying global_dc and taking a variable argument list.  */
      54                 :             : 
      55                 :             : bool
      56                 :       49413 : emit_diagnostic (diagnostic_t kind,
      57                 :             :                  location_t location,
      58                 :             :                  diagnostic_option_id option_id,
      59                 :             :                  const char *gmsgid, ...)
      60                 :             : {
      61                 :       49413 :   auto_diagnostic_group d;
      62                 :       49413 :   va_list ap;
      63                 :       49413 :   va_start (ap, gmsgid);
      64                 :       49413 :   rich_location richloc (line_table, location);
      65                 :       49413 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_id,
      66                 :             :                                          gmsgid, &ap, kind);
      67                 :       49412 :   va_end (ap);
      68                 :       98824 :   return ret;
      69                 :       49412 : }
      70                 :             : 
      71                 :             : /* As above, but for rich_location *.  */
      72                 :             : 
      73                 :             : bool
      74                 :          84 : emit_diagnostic (diagnostic_t kind,
      75                 :             :                  rich_location *richloc,
      76                 :             :                  diagnostic_option_id option_id,
      77                 :             :                  const char *gmsgid, ...)
      78                 :             : {
      79                 :          84 :   auto_diagnostic_group d;
      80                 :          84 :   va_list ap;
      81                 :          84 :   va_start (ap, gmsgid);
      82                 :          84 :   bool ret = global_dc->diagnostic_impl (richloc, nullptr, option_id,
      83                 :             :                                          gmsgid, &ap, kind);
      84                 :          84 :   va_end (ap);
      85                 :         168 :   return ret;
      86                 :          84 : }
      87                 :             : 
      88                 :             : /* As above, but taking a variable argument list.  */
      89                 :             : 
      90                 :             : bool
      91                 :        3296 : emit_diagnostic_valist (diagnostic_t kind,
      92                 :             :                         location_t location,
      93                 :             :                         diagnostic_option_id option_id,
      94                 :             :                         const char *gmsgid, va_list *ap)
      95                 :             : {
      96                 :        3296 :   rich_location richloc (line_table, location);
      97                 :        3296 :   return global_dc->diagnostic_impl (&richloc, nullptr, option_id,
      98                 :        3296 :                                      gmsgid, ap, kind);
      99                 :        3296 : }
     100                 :             : 
     101                 :             : /* As above, but with rich_location and metadata.  */
     102                 :             : 
     103                 :             : bool
     104                 :        3793 : emit_diagnostic_valist_meta (diagnostic_t kind,
     105                 :             :                              rich_location *richloc,
     106                 :             :                              const diagnostic_metadata *metadata,
     107                 :             :                              diagnostic_option_id option_id,
     108                 :             :                              const char *gmsgid, va_list *ap)
     109                 :             : {
     110                 :        3793 :   return global_dc->diagnostic_impl (richloc, metadata, option_id,
     111                 :        3793 :                                      gmsgid, ap, kind);
     112                 :             : }
     113                 :             : 
     114                 :             : /* An informative note at LOCATION.  Use this for additional details on an error
     115                 :             :    message.  */
     116                 :             : void
     117                 :       93256 : inform (location_t location, const char *gmsgid, ...)
     118                 :             : {
     119                 :       93256 :   auto_diagnostic_group d;
     120                 :       93256 :   va_list ap;
     121                 :       93256 :   va_start (ap, gmsgid);
     122                 :       93256 :   rich_location richloc (line_table, location);
     123                 :       93256 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_NOTE);
     124                 :       93256 :   va_end (ap);
     125                 :       93256 : }
     126                 :             : 
     127                 :             : /* Same as "inform" above, but at RICHLOC.  */
     128                 :             : void
     129                 :        3969 : inform (rich_location *richloc, const char *gmsgid, ...)
     130                 :             : {
     131                 :        3969 :   gcc_assert (richloc);
     132                 :             : 
     133                 :        3969 :   auto_diagnostic_group d;
     134                 :        3969 :   va_list ap;
     135                 :        3969 :   va_start (ap, gmsgid);
     136                 :        3969 :   global_dc->diagnostic_impl (richloc, nullptr, -1, gmsgid, &ap, DK_NOTE);
     137                 :        3969 :   va_end (ap);
     138                 :        3969 : }
     139                 :             : 
     140                 :             : /* An informative note at LOCATION.  Use this for additional details on an
     141                 :             :    error message.  */
     142                 :             : void
     143                 :        7008 : inform_n (location_t location, unsigned HOST_WIDE_INT n,
     144                 :             :           const char *singular_gmsgid, const char *plural_gmsgid, ...)
     145                 :             : {
     146                 :        7008 :   va_list ap;
     147                 :        7008 :   va_start (ap, plural_gmsgid);
     148                 :        7008 :   auto_diagnostic_group d;
     149                 :        7008 :   rich_location richloc (line_table, location);
     150                 :        7008 :   global_dc->diagnostic_n_impl (&richloc, nullptr, -1, n,
     151                 :             :                                 singular_gmsgid, plural_gmsgid,
     152                 :             :                                 &ap, DK_NOTE);
     153                 :        7008 :   va_end (ap);
     154                 :        7008 : }
     155                 :             : 
     156                 :             : /* A warning at INPUT_LOCATION.  Use this for code which is correct according
     157                 :             :    to the relevant language specification but is likely to be buggy anyway.
     158                 :             :    Returns true if the warning was printed, false if it was inhibited.  */
     159                 :             : bool
     160                 :    89231739 : warning (diagnostic_option_id option_id, const char *gmsgid, ...)
     161                 :             : {
     162                 :    89231739 :   auto_diagnostic_group d;
     163                 :    89231739 :   va_list ap;
     164                 :    89231739 :   va_start (ap, gmsgid);
     165                 :    89231739 :   rich_location richloc (line_table, input_location);
     166                 :    89231739 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_id,
     167                 :             :                                          gmsgid, &ap, DK_WARNING);
     168                 :    89231739 :   va_end (ap);
     169                 :   178463478 :   return ret;
     170                 :    89231739 : }
     171                 :             : 
     172                 :             : /* A warning at LOCATION.  Use this for code which is correct according to the
     173                 :             :    relevant language specification but is likely to be buggy anyway.
     174                 :             :    Returns true if the warning was printed, false if it was inhibited.  */
     175                 :             : 
     176                 :             : bool
     177                 :     4624575 : warning_at (location_t location,
     178                 :             :             diagnostic_option_id option_id,
     179                 :             :             const char *gmsgid, ...)
     180                 :             : {
     181                 :     4624575 :   auto_diagnostic_group d;
     182                 :     4624575 :   va_list ap;
     183                 :     4624575 :   va_start (ap, gmsgid);
     184                 :     4624575 :   rich_location richloc (line_table, location);
     185                 :     4624575 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_id,
     186                 :             :                                          gmsgid, &ap, DK_WARNING);
     187                 :     4624569 :   va_end (ap);
     188                 :     9249138 :   return ret;
     189                 :     4624569 : }
     190                 :             : 
     191                 :             : /* Same as "warning at" above, but using RICHLOC.  */
     192                 :             : 
     193                 :             : bool
     194                 :        2003 : warning_at (rich_location *richloc,
     195                 :             :             diagnostic_option_id option_id,
     196                 :             :             const char *gmsgid, ...)
     197                 :             : {
     198                 :        2003 :   gcc_assert (richloc);
     199                 :             : 
     200                 :        2003 :   auto_diagnostic_group d;
     201                 :        2003 :   va_list ap;
     202                 :        2003 :   va_start (ap, gmsgid);
     203                 :        2003 :   bool ret = global_dc->diagnostic_impl (richloc, nullptr, option_id,
     204                 :             :                                          gmsgid, &ap, DK_WARNING);
     205                 :        2003 :   va_end (ap);
     206                 :        4006 :   return ret;
     207                 :        2003 : }
     208                 :             : 
     209                 :             : /* Same as "warning at" above, but using METADATA.  */
     210                 :             : 
     211                 :             : bool
     212                 :          12 : warning_meta (rich_location *richloc,
     213                 :             :               const diagnostic_metadata &metadata,
     214                 :             :               diagnostic_option_id option_id,
     215                 :             :               const char *gmsgid, ...)
     216                 :             : {
     217                 :          12 :   gcc_assert (richloc);
     218                 :             : 
     219                 :          12 :   auto_diagnostic_group d;
     220                 :          12 :   va_list ap;
     221                 :          12 :   va_start (ap, gmsgid);
     222                 :          12 :   bool ret = global_dc->diagnostic_impl (richloc, &metadata, option_id,
     223                 :             :                                          gmsgid, &ap, DK_WARNING);
     224                 :          12 :   va_end (ap);
     225                 :          24 :   return ret;
     226                 :          12 : }
     227                 :             : 
     228                 :             : /* Same as warning_n plural variant below, but using RICHLOC.  */
     229                 :             : 
     230                 :             : bool
     231                 :         103 : warning_n (rich_location *richloc,
     232                 :             :            diagnostic_option_id option_id,
     233                 :             :            unsigned HOST_WIDE_INT n,
     234                 :             :            const char *singular_gmsgid, const char *plural_gmsgid, ...)
     235                 :             : {
     236                 :         103 :   gcc_assert (richloc);
     237                 :             : 
     238                 :         103 :   auto_diagnostic_group d;
     239                 :         103 :   va_list ap;
     240                 :         103 :   va_start (ap, plural_gmsgid);
     241                 :         103 :   bool ret = global_dc->diagnostic_n_impl (richloc, nullptr, option_id, n,
     242                 :             :                                            singular_gmsgid, plural_gmsgid,
     243                 :             :                                            &ap, DK_WARNING);
     244                 :         103 :   va_end (ap);
     245                 :         206 :   return ret;
     246                 :         103 : }
     247                 :             : 
     248                 :             : /* A warning at LOCATION.  Use this for code which is correct according to the
     249                 :             :    relevant language specification but is likely to be buggy anyway.
     250                 :             :    Returns true if the warning was printed, false if it was inhibited.  */
     251                 :             : 
     252                 :             : bool
     253                 :        4294 : warning_n (location_t location,
     254                 :             :            diagnostic_option_id option_id,
     255                 :             :            unsigned HOST_WIDE_INT n,
     256                 :             :            const char *singular_gmsgid, const char *plural_gmsgid, ...)
     257                 :             : {
     258                 :        4294 :   auto_diagnostic_group d;
     259                 :        4294 :   va_list ap;
     260                 :        4294 :   va_start (ap, plural_gmsgid);
     261                 :        4294 :   rich_location richloc (line_table, location);
     262                 :        4294 :   bool ret = global_dc->diagnostic_n_impl (&richloc, nullptr, option_id, n,
     263                 :             :                                            singular_gmsgid, plural_gmsgid,
     264                 :             :                                            &ap, DK_WARNING);
     265                 :        4294 :   va_end (ap);
     266                 :        8588 :   return ret;
     267                 :        4294 : }
     268                 :             : 
     269                 :             : /* A "pedantic" warning at LOCATION: issues a warning unless
     270                 :             :    -pedantic-errors was given on the command line, in which case it
     271                 :             :    issues an error.  Use this for diagnostics required by the relevant
     272                 :             :    language standard, if you have chosen not to make them errors.
     273                 :             : 
     274                 :             :    Note that these diagnostics are issued independent of the setting
     275                 :             :    of the -Wpedantic command-line switch.  To get a warning enabled
     276                 :             :    only with that switch, use either "if (pedantic) pedwarn
     277                 :             :    (OPT_Wpedantic,...)" or just "pedwarn (OPT_Wpedantic,..)".  To get a
     278                 :             :    pedwarn independently of the -Wpedantic switch use "pedwarn (0,...)".
     279                 :             : 
     280                 :             :    Returns true if the warning was printed, false if it was inhibited.  */
     281                 :             : 
     282                 :             : bool
     283                 :      346318 : pedwarn (location_t location,
     284                 :             :          diagnostic_option_id option_id,
     285                 :             :          const char *gmsgid, ...)
     286                 :             : {
     287                 :      346318 :   auto_diagnostic_group d;
     288                 :      346318 :   va_list ap;
     289                 :      346318 :   va_start (ap, gmsgid);
     290                 :      346318 :   rich_location richloc (line_table, location);
     291                 :      346318 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_id,
     292                 :             :                                          gmsgid, &ap, DK_PEDWARN);
     293                 :      346318 :   va_end (ap);
     294                 :      692636 :   return ret;
     295                 :      346318 : }
     296                 :             : 
     297                 :             : /* Same as pedwarn above, but using RICHLOC.  */
     298                 :             : 
     299                 :             : bool
     300                 :         186 : pedwarn (rich_location *richloc,
     301                 :             :          diagnostic_option_id option_id,
     302                 :             :          const char *gmsgid, ...)
     303                 :             : {
     304                 :         186 :   gcc_assert (richloc);
     305                 :             : 
     306                 :         186 :   auto_diagnostic_group d;
     307                 :         186 :   va_list ap;
     308                 :         186 :   va_start (ap, gmsgid);
     309                 :         186 :   bool ret = global_dc->diagnostic_impl (richloc, nullptr, option_id,
     310                 :             :                                          gmsgid, &ap, DK_PEDWARN);
     311                 :         186 :   va_end (ap);
     312                 :         372 :   return ret;
     313                 :         186 : }
     314                 :             : 
     315                 :             : /* A "permissive" error at LOCATION: issues an error unless
     316                 :             :    -fpermissive was given on the command line, in which case it issues
     317                 :             :    a warning.  Use this for things that really should be errors but we
     318                 :             :    want to support legacy code.
     319                 :             : 
     320                 :             :    Returns true if the warning was printed, false if it was inhibited.  */
     321                 :             : 
     322                 :             : bool
     323                 :        2226 : permerror (location_t location, const char *gmsgid, ...)
     324                 :             : {
     325                 :        2226 :   auto_diagnostic_group d;
     326                 :        2226 :   va_list ap;
     327                 :        2226 :   va_start (ap, gmsgid);
     328                 :        2226 :   rich_location richloc (line_table, location);
     329                 :        2226 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap,
     330                 :             :                                          DK_PERMERROR);
     331                 :        2226 :   va_end (ap);
     332                 :        4452 :   return ret;
     333                 :        2226 : }
     334                 :             : 
     335                 :             : /* Same as "permerror" above, but at RICHLOC.  */
     336                 :             : 
     337                 :             : bool
     338                 :        1476 : permerror (rich_location *richloc, const char *gmsgid, ...)
     339                 :             : {
     340                 :        1476 :   gcc_assert (richloc);
     341                 :             : 
     342                 :        1476 :   auto_diagnostic_group d;
     343                 :        1476 :   va_list ap;
     344                 :        1476 :   va_start (ap, gmsgid);
     345                 :        1476 :   bool ret = global_dc->diagnostic_impl (richloc, nullptr, -1, gmsgid, &ap,
     346                 :             :                                          DK_PERMERROR);
     347                 :        1476 :   va_end (ap);
     348                 :        2952 :   return ret;
     349                 :        1476 : }
     350                 :             : 
     351                 :             : /* Similar to the above, but controlled by a flag other than -fpermissive.
     352                 :             :    As above, an error by default or a warning with -fpermissive, but this
     353                 :             :    diagnostic can also be downgraded by -Wno-error=opt.  */
     354                 :             : 
     355                 :             : bool
     356                 :       12157 : permerror_opt (location_t location,
     357                 :             :                diagnostic_option_id option_id,
     358                 :             :                const char *gmsgid, ...)
     359                 :             : {
     360                 :       12157 :   auto_diagnostic_group d;
     361                 :       12157 :   va_list ap;
     362                 :       12157 :   va_start (ap, gmsgid);
     363                 :       12157 :   rich_location richloc (line_table, location);
     364                 :       12157 :   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_id,
     365                 :             :                                          gmsgid, &ap, DK_PERMERROR);
     366                 :       12157 :   va_end (ap);
     367                 :       24314 :   return ret;
     368                 :       12157 : }
     369                 :             : 
     370                 :             : /* Same as "permerror" above, but at RICHLOC.  */
     371                 :             : 
     372                 :             : bool
     373                 :        1554 : permerror_opt (rich_location *richloc,
     374                 :             :                diagnostic_option_id option_id,
     375                 :             :                const char *gmsgid, ...)
     376                 :             : {
     377                 :        1554 :   gcc_assert (richloc);
     378                 :             : 
     379                 :        1554 :   auto_diagnostic_group d;
     380                 :        1554 :   va_list ap;
     381                 :        1554 :   va_start (ap, gmsgid);
     382                 :        1554 :   bool ret = global_dc->diagnostic_impl (richloc, nullptr, option_id,
     383                 :             :                                          gmsgid, &ap, DK_PERMERROR);
     384                 :        1554 :   va_end (ap);
     385                 :        3108 :   return ret;
     386                 :        1554 : }
     387                 :             : 
     388                 :             : /* A hard error: the code is definitely ill-formed, and an object file
     389                 :             :    will not be produced.  */
     390                 :             : void
     391                 :       20452 : error (const char *gmsgid, ...)
     392                 :             : {
     393                 :       20452 :   auto_diagnostic_group d;
     394                 :       20452 :   va_list ap;
     395                 :       20452 :   va_start (ap, gmsgid);
     396                 :       20452 :   rich_location richloc (line_table, input_location);
     397                 :       20452 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_ERROR);
     398                 :       20452 :   va_end (ap);
     399                 :       20452 : }
     400                 :             : 
     401                 :             : /* A hard error: the code is definitely ill-formed, and an object file
     402                 :             :    will not be produced.  */
     403                 :             : void
     404                 :          74 : error_n (location_t location, unsigned HOST_WIDE_INT n,
     405                 :             :          const char *singular_gmsgid, const char *plural_gmsgid, ...)
     406                 :             : {
     407                 :          74 :   auto_diagnostic_group d;
     408                 :          74 :   va_list ap;
     409                 :          74 :   va_start (ap, plural_gmsgid);
     410                 :          74 :   rich_location richloc (line_table, location);
     411                 :          74 :   global_dc->diagnostic_n_impl (&richloc, nullptr, -1, n,
     412                 :             :                                 singular_gmsgid, plural_gmsgid,
     413                 :             :                                 &ap, DK_ERROR);
     414                 :          74 :   va_end (ap);
     415                 :          74 : }
     416                 :             : 
     417                 :             : /* Same as above, but use location LOC instead of input_location.  */
     418                 :             : void
     419                 :       69966 : error_at (location_t loc, const char *gmsgid, ...)
     420                 :             : {
     421                 :       69966 :   auto_diagnostic_group d;
     422                 :       69966 :   va_list ap;
     423                 :       69966 :   va_start (ap, gmsgid);
     424                 :       69966 :   rich_location richloc (line_table, loc);
     425                 :       69966 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_ERROR);
     426                 :       69966 :   va_end (ap);
     427                 :       69966 : }
     428                 :             : 
     429                 :             : /* Same as above, but use RICH_LOC.  */
     430                 :             : 
     431                 :             : void
     432                 :       12694 : error_at (rich_location *richloc, const char *gmsgid, ...)
     433                 :             : {
     434                 :       12694 :   gcc_assert (richloc);
     435                 :             : 
     436                 :       12694 :   auto_diagnostic_group d;
     437                 :       12694 :   va_list ap;
     438                 :       12694 :   va_start (ap, gmsgid);
     439                 :       12694 :   global_dc->diagnostic_impl (richloc, nullptr, -1, gmsgid, &ap, DK_ERROR);
     440                 :       12694 :   va_end (ap);
     441                 :       12694 : }
     442                 :             : 
     443                 :             : /* Same as above, but with metadata.  */
     444                 :             : 
     445                 :             : void
     446                 :         276 : error_meta (rich_location *richloc, const diagnostic_metadata &metadata,
     447                 :             :             const char *gmsgid, ...)
     448                 :             : {
     449                 :         276 :   gcc_assert (richloc);
     450                 :             : 
     451                 :         276 :   auto_diagnostic_group d;
     452                 :         276 :   va_list ap;
     453                 :         276 :   va_start (ap, gmsgid);
     454                 :         276 :   global_dc->diagnostic_impl (richloc, &metadata, -1, gmsgid, &ap, DK_ERROR);
     455                 :         276 :   va_end (ap);
     456                 :         276 : }
     457                 :             : 
     458                 :             : /* "Sorry, not implemented."  Use for a language feature which is
     459                 :             :    required by the relevant specification but not implemented by GCC.
     460                 :             :    An object file will not be produced.  */
     461                 :             : void
     462                 :          89 : sorry (const char *gmsgid, ...)
     463                 :             : {
     464                 :          89 :   auto_diagnostic_group d;
     465                 :          89 :   va_list ap;
     466                 :          89 :   va_start (ap, gmsgid);
     467                 :          89 :   rich_location richloc (line_table, input_location);
     468                 :          89 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_SORRY);
     469                 :          89 :   va_end (ap);
     470                 :          89 : }
     471                 :             : 
     472                 :             : /* Same as above, but use location LOC instead of input_location.  */
     473                 :             : void
     474                 :         876 : sorry_at (location_t loc, const char *gmsgid, ...)
     475                 :             : {
     476                 :         876 :   auto_diagnostic_group d;
     477                 :         876 :   va_list ap;
     478                 :         876 :   va_start (ap, gmsgid);
     479                 :         876 :   rich_location richloc (line_table, loc);
     480                 :         876 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_SORRY);
     481                 :         872 :   va_end (ap);
     482                 :         872 : }
     483                 :             : 
     484                 :             : /* Return true if an error or a "sorry" has been seen on global_dc.  Various
     485                 :             :    processing is disabled after errors.  */
     486                 :             : bool
     487                 :  1285186946 : seen_error (void)
     488                 :             : {
     489                 :  1285186946 :   return errorcount || sorrycount;
     490                 :             : }
     491                 :             : 
     492                 :             : /* An error which is severe enough that we make no attempt to
     493                 :             :    continue.  Do not use this for internal consistency checks; that's
     494                 :             :    internal_error.  Use of this function should be rare.  */
     495                 :             : void
     496                 :         302 : fatal_error (location_t loc, const char *gmsgid, ...)
     497                 :             : {
     498                 :         302 :   auto_diagnostic_group d;
     499                 :         302 :   va_list ap;
     500                 :         302 :   va_start (ap, gmsgid);
     501                 :         302 :   rich_location richloc (line_table, loc);
     502                 :         302 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_FATAL);
     503                 :           0 :   va_end (ap);
     504                 :             : 
     505                 :           0 :   gcc_unreachable ();
     506                 :             : }
     507                 :             : 
     508                 :             : /* An internal consistency check has failed.  We make no attempt to
     509                 :             :    continue.  */
     510                 :             : void
     511                 :          18 : internal_error (const char *gmsgid, ...)
     512                 :             : {
     513                 :          18 :   auto_diagnostic_group d;
     514                 :          18 :   va_list ap;
     515                 :          18 :   va_start (ap, gmsgid);
     516                 :          18 :   rich_location richloc (line_table, input_location);
     517                 :          18 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_ICE);
     518                 :           0 :   va_end (ap);
     519                 :             : 
     520                 :           0 :   gcc_unreachable ();
     521                 :             : }
     522                 :             : 
     523                 :             : /* Like internal_error, but no backtrace will be printed.  Used when
     524                 :             :    the internal error does not happen at the current location, but happened
     525                 :             :    somewhere else.  */
     526                 :             : void
     527                 :           0 : internal_error_no_backtrace (const char *gmsgid, ...)
     528                 :             : {
     529                 :           0 :   auto_diagnostic_group d;
     530                 :           0 :   va_list ap;
     531                 :           0 :   va_start (ap, gmsgid);
     532                 :           0 :   rich_location richloc (line_table, input_location);
     533                 :           0 :   global_dc->diagnostic_impl (&richloc, nullptr, -1, gmsgid, &ap, DK_ICE_NOBT);
     534                 :           0 :   va_end (ap);
     535                 :             : 
     536                 :           0 :   gcc_unreachable ();
     537                 :             : }
     538                 :             : 
     539                 :             : 
     540                 :             : /* Special case error functions.  Most are implemented in terms of the
     541                 :             :    above, or should be.  */
     542                 :             : 
     543                 :             : /* Print a diagnostic MSGID on FILE.  This is just fprintf, except it
     544                 :             :    runs its second argument through gettext.  */
     545                 :             : void
     546                 :       19326 : fnotice (FILE *file, const char *cmsgid, ...)
     547                 :             : {
     548                 :             :   /* If the user requested one of the machine-readable diagnostic output
     549                 :             :      formats on stderr (e.g. -fdiagnostics-format=sarif-stderr), then
     550                 :             :      emitting free-form text on stderr will lead to corrupt output.
     551                 :             :      Skip the message for such cases.  */
     552                 :       19326 :   if (file == stderr && global_dc)
     553                 :       16822 :     if (!global_dc->supports_fnotice_on_stderr_p ())
     554                 :           0 :       return;
     555                 :             : 
     556                 :       19326 :   va_list ap;
     557                 :             : 
     558                 :       19326 :   va_start (ap, cmsgid);
     559                 :       19326 :   vfprintf (file, _(cmsgid), ap);
     560                 :       19326 :   va_end (ap);
     561                 :             : }
     562                 :             : 
     563                 :             : /* class auto_diagnostic_group.  */
     564                 :             : 
     565                 :             : /* Constructor: "push" this group into global_dc.  */
     566                 :             : 
     567                 :   797643364 : auto_diagnostic_group::auto_diagnostic_group ()
     568                 :             : {
     569                 :   797643364 :   global_dc->begin_group ();
     570                 :   797643364 : }
     571                 :             : 
     572                 :             : /* Destructor: "pop" this group from global_dc.  */
     573                 :             : 
     574                 :   797643005 : auto_diagnostic_group::~auto_diagnostic_group ()
     575                 :             : {
     576                 :   797643005 :   global_dc->end_group ();
     577                 :   797643005 : }
     578                 :             : 
     579                 :             : /* class auto_diagnostic_nesting_level.  */
     580                 :             : 
     581                 :       23540 : auto_diagnostic_nesting_level::auto_diagnostic_nesting_level ()
     582                 :             : {
     583                 :       23540 :   global_dc->push_nesting_level ();
     584                 :       23540 : }
     585                 :             : 
     586                 :       23540 : auto_diagnostic_nesting_level::~auto_diagnostic_nesting_level ()
     587                 :             : {
     588                 :       23540 :   global_dc->pop_nesting_level ();
     589                 :       23540 : }
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.