]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c/c-errors.c
sse-13.c: Add dg-add-options bind_pic_locally directive.
[thirdparty/gcc.git] / gcc / c / c-errors.c
CommitLineData
b9161f44 1/* Various diagnostic subroutines for the GNU C language.
818ab71a 2 Copyright (C) 2000-2016 Free Software Foundation, Inc.
b9161f44
GDR
3 Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
4
1322177d 5This file is part of GCC.
b9161f44 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9dcd6f09 9Software Foundation; either version 3, or (at your option) any later
1322177d 10version.
b9161f44 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
b9161f44
GDR
16
17You should have received a copy of the GNU General Public License
9dcd6f09
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
b9161f44
GDR
20
21#include "config.h"
22#include "system.h"
4977bab6
ZW
23#include "coretypes.h"
24#include "tm.h"
b9161f44 25#include "c-tree.h"
177cce46 26#include "opts.h"
b9161f44 27
35aff4fb
MP
28/* Issue an ISO C99 pedantic warning MSGID if -pedantic outside C11 mode,
29 otherwise issue warning MSGID if -Wc99-c11-compat is specified.
30 This function is supposed to be used for matters that are allowed in
31 ISO C11 but not supported in ISO C99, thus we explicitly don't pedwarn
32 when C11 is specified. */
b9161f44 33
35aff4fb 34bool
509c9d60 35pedwarn_c99 (location_t location, int opt, const char *gmsgid, ...)
b9161f44 36{
47b69537 37 diagnostic_info diagnostic;
e34d07f2 38 va_list ap;
35aff4fb 39 bool warned = false;
ebedc9a3 40 rich_location richloc (line_table, location);
c22cacf3 41
4b794eaf 42 va_start (ap, gmsgid);
35aff4fb
MP
43 /* If desired, issue the C99/C11 compat warning, which is more specific
44 than -pedantic. */
45 if (warn_c99_c11_compat > 0)
46 {
8a645150 47 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
35aff4fb
MP
48 (pedantic && !flag_isoc11)
49 ? DK_PEDWARN : DK_WARNING);
50 diagnostic.option_index = OPT_Wc99_c11_compat;
51 warned = report_diagnostic (&diagnostic);
52 }
53 /* -Wno-c99-c11-compat suppresses even the pedwarns. */
54 else if (warn_c99_c11_compat == 0)
55 ;
56 /* For -pedantic outside C11, issue a pedwarn. */
57 else if (pedantic && !flag_isoc11)
58 {
8a645150 59 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
35aff4fb
MP
60 diagnostic.option_index = opt;
61 warned = report_diagnostic (&diagnostic);
62 }
e34d07f2 63 va_end (ap);
35aff4fb 64 return warned;
b9161f44 65}
85617eba 66
f3bede71
MP
67/* Issue an ISO C90 pedantic warning MSGID if -pedantic outside C99 mode,
68 otherwise issue warning MSGID if -Wc90-c99-compat is specified, or if
69 a specific option such as -Wlong-long is specified.
70 This function is supposed to be used for matters that are allowed in
71 ISO C99 but not supported in ISO C90, thus we explicitly don't pedwarn
72 when C99 is specified. (There is no flag_c90.) */
85617eba
HPN
73
74void
509c9d60 75pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
85617eba
HPN
76{
77 diagnostic_info diagnostic;
78 va_list ap;
ebedc9a3 79 rich_location richloc (line_table, location);
85617eba 80
4b794eaf 81 va_start (ap, gmsgid);
177cce46
MP
82 /* Warnings such as -Wvla are the most specific ones. */
83 if (opt != OPT_Wpedantic)
f3bede71 84 {
177cce46
MP
85 int opt_var = *(int *) option_flag_var (opt, &global_options);
86 if (opt_var == 0)
87 goto out;
88 else if (opt_var > 0)
89 {
8a645150 90 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
177cce46
MP
91 (pedantic && !flag_isoc99)
92 ? DK_PEDWARN : DK_WARNING);
93 diagnostic.option_index = opt;
94 report_diagnostic (&diagnostic);
95 goto out;
96 }
f3bede71 97 }
177cce46
MP
98 /* Maybe we want to issue the C90/C99 compat warning, which is more
99 specific than -pedantic. */
100 if (warn_c90_c99_compat > 0)
f3bede71 101 {
8a645150 102 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
177cce46
MP
103 (pedantic && !flag_isoc99)
104 ? DK_PEDWARN : DK_WARNING);
105 diagnostic.option_index = OPT_Wc90_c99_compat;
106 report_diagnostic (&diagnostic);
f3bede71 107 }
177cce46
MP
108 /* -Wno-c90-c99-compat suppresses the pedwarns. */
109 else if (warn_c90_c99_compat == 0)
110 ;
111 /* For -pedantic outside C99, issue a pedwarn. */
112 else if (pedantic && !flag_isoc99)
f3bede71 113 {
8a645150 114 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
177cce46 115 diagnostic.option_index = opt;
f3bede71
MP
116 report_diagnostic (&diagnostic);
117 }
177cce46 118out:
85617eba
HPN
119 va_end (ap);
120}