aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2002-05-14 01:44:02 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2002-05-14 01:44:02 +0000
commit8a75a69eaf5bc7956b6f8621e65ea31a59d1bbe3 (patch)
treee697d756e4e19d8fb99cd7446340ffb275e00988 /contrib
parentd600c966327ac73b6a8d407d37f82dc88e8287a1 (diff)
downloadsrc-8a75a69eaf5bc7956b6f8621e65ea31a59d1bbe3.tar.gz
src-8a75a69eaf5bc7956b6f8621e65ea31a59d1bbe3.zip
If you want to not warn on K&R main(); this is how it should be implemented.
Notes
Notes: svn path=/head/; revision=96557
Diffstat (limited to 'contrib')
-rw-r--r--contrib/gcc/c-common.h4
-rw-r--r--contrib/gcc/c-decl.c14
2 files changed, 17 insertions, 1 deletions
diff --git a/contrib/gcc/c-common.h b/contrib/gcc/c-common.h
index 4d2d476decc2..c89b9aab69b1 100644
--- a/contrib/gcc/c-common.h
+++ b/contrib/gcc/c-common.h
@@ -415,6 +415,10 @@ extern int warn_sequence_point;
extern int warn_missing_format_attribute;
+/* Nonzero means do not warn that K&R style main() is not a function prototype. */
+
+extern int flag_bsd_no_warn_kr_main;
+
/* Nonzero means warn about sizeof (function) or addition/subtraction
of function pointers. */
diff --git a/contrib/gcc/c-decl.c b/contrib/gcc/c-decl.c
index 46685e274e3b..e6a2293a09d8 100644
--- a/contrib/gcc/c-decl.c
+++ b/contrib/gcc/c-decl.c
@@ -379,6 +379,11 @@ int warn_traditional;
int warn_pointer_arith;
+
+/* Nonzero means do not warn that K&R style main() is not a function prototype. */
+
+int flag_bsd_no_warn_kr_main;
+
/* Nonzero means warn for non-prototype function decls
or non-prototyped defs without previous prototype. */
@@ -531,6 +536,7 @@ c_decode_option (argc, argv)
flag_noniso_default_format_attributes = 0;
flag_isoc99 = 0;
flag_bsd_format = 0;
+ flag_bsd_no_warn_kr_main = 0;
}
else if (!strcmp (argstart, "iso9899:199409"))
{
@@ -550,6 +556,7 @@ c_decode_option (argc, argv)
flag_isoc99 = 1;
flag_isoc94 = 1;
flag_bsd_format = 0;
+ flag_bsd_no_warn_kr_main = 0;
}
else if (!strcmp (argstart, "gnu89"))
{
@@ -561,6 +568,7 @@ c_decode_option (argc, argv)
flag_isoc99 = 0;
flag_isoc94 = 0;
flag_bsd_format = 0;
+ flag_bsd_no_warn_kr_main = 0;
}
else if (!strcmp (argstart, "gnu9x") || !strcmp (argstart, "gnu99"))
{
@@ -572,6 +580,7 @@ c_decode_option (argc, argv)
flag_isoc99 = 1;
flag_isoc94 = 1;
flag_bsd_format = 0;
+ flag_bsd_no_warn_kr_main = 0;
}
else if (!strcmp (argstart, "bsd"))
{
@@ -584,6 +593,7 @@ c_decode_option (argc, argv)
flag_isoc94 = 0;
flag_isoc94 = 0;
flag_bsd_format = 1;
+ flag_bsd_no_warn_kr_main = 1;
}
else
error ("unknown C standard `%s'", argstart);
@@ -6313,7 +6323,9 @@ start_function (declspecs, declarator, attributes)
&& !(old_decl != 0
&& (TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0
|| (DECL_BUILT_IN (old_decl)
- && ! C_DECL_ANTICIPATED (old_decl)))))
+ && ! C_DECL_ANTICIPATED (old_decl))))
+ && !(flag_bsd_no_warn_kr_main && 0 ==
+ strcmp ("main", IDENTIFIER_POINTER (DECL_NAME (decl1)))))
warning ("function declaration isn't a prototype");
/* Optionally warn of any global def with no previous prototype. */
else if (warn_missing_prototypes