gcc: add Apple compatible -Wnewline-eof

GCC 4.2 and previous have always warned about
"No newline at end of file".

Upstream GCC removed the warning completely but
Apple made it an optional warning. Adopt it for
compatibility with older GCC and clang.

While here, add comment to complement r258712.

Obtained from:	Apple Inc. (Apple GCC 4.2 - 5531)
MFC after:	1 week
This commit is contained in:
Pedro F. Giffuni 2013-12-18 14:53:36 +00:00
parent a95ecdf0cf
commit cfbe5d01ee
8 changed files with 47 additions and 0 deletions

View File

@ -487,6 +487,12 @@ c_common_handle_option (size_t scode, const char *arg, int value)
cpp_opts->warn_multichar = value; cpp_opts->warn_multichar = value;
break; break;
/* APPLE LOCAL begin -Wnewline-eof */
case OPT_Wnewline_eof:
cpp_opts->warn_newline_at_eof = value;
break;
/* APPLE LOCAL end -Wnewline-eof */
case OPT_Wnormalized_: case OPT_Wnormalized_:
if (!value || (arg && strcasecmp (arg, "none") == 0)) if (!value || (arg && strcasecmp (arg, "none") == 0))
cpp_opts->warn_normalize = normalized_none; cpp_opts->warn_normalize = normalized_none;

View File

@ -292,6 +292,12 @@ Wnested-externs
C ObjC Var(warn_nested_externs) C ObjC Var(warn_nested_externs)
Warn about \"extern\" declarations not at file scope Warn about \"extern\" declarations not at file scope
; APPLE LOCAL begin -Wnewline-eof
Wnewline-eof
C ObjC C++ ObjC++
Warn about files missing a newline at the end of the file
; APPLE LOCAL end -Wnewline-eof
Wnon-template-friend Wnon-template-friend
C++ ObjC++ Var(warn_nontemplate_friend) Init(1) C++ ObjC++ Var(warn_nontemplate_friend) Init(1)
Warn when non-templatized friend functions are declared within a template Warn when non-templatized friend functions are declared within a template

View File

@ -169,6 +169,8 @@ in the following sections.
-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol -trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol
-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol -fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol
-fsigned-bitfields -fsigned-char @gol -fsigned-bitfields -fsigned-char @gol
@c APPLE LOCAL -Wnewline-eof 2001-08-23 --sts **
-Wnewline-eof (Apple compatible) @gol
-funsigned-bitfields -funsigned-char} -funsigned-bitfields -funsigned-char}
@item C++ Language Options @item C++ Language Options
@ -2082,6 +2084,12 @@ Inhibit all warning messages.
@opindex Wno-import @opindex Wno-import
Inhibit warning messages about the use of @samp{#import}. Inhibit warning messages about the use of @samp{#import}.
@c APPLE LOCAL begin -Wnewline-eof 2001-08-23 --sts **
@item -Wnewline-eof
@opindex Wnewline-eof
Warn about files missing a newline at the end of the file. (FreeBSD ONLY)
@c APPLE LOCAL end -Wnewline-eof 2001-08-23 --sts **
@item -Wchar-subscripts @item -Wchar-subscripts
@opindex Wchar-subscripts @opindex Wchar-subscripts
Warn if an array subscript has type @code{char}. This is a common cause Warn if an array subscript has type @code{char}. This is a common cause

View File

@ -0,0 +1,9 @@
2008-08-04 Bill Wendling <wendling@apple.com>
Radar 6121572
* charset.c (_cpp_convert_input): Don't read to.text[-1].
2005-02-17 Devang Patel <dpatel@apple.com>
Radar 3958387
* libcpp/lex.c (_cpp_get_fresh_line): Check warn_newline_at_eof.

View File

@ -1628,6 +1628,7 @@ _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
terminate with another \r, not an \n, so that we do not mistake terminate with another \r, not an \n, so that we do not mistake
the \r\n sequence for a single DOS line ending and erroneously the \r\n sequence for a single DOS line ending and erroneously
issue the "No newline at end of file" diagnostic. */ issue the "No newline at end of file" diagnostic. */
/* APPLE LOCAL don't access to.text[-1] radar 6121572 */
if (to.len > 0 && to.text[to.len - 1] == '\r') if (to.len > 0 && to.text[to.len - 1] == '\r')
to.text[to.len] = '\r'; to.text[to.len] = '\r';
else else

View File

@ -320,6 +320,11 @@ struct cpp_options
/* Nonzero means warn if there are any trigraphs. */ /* Nonzero means warn if there are any trigraphs. */
unsigned char warn_trigraphs; unsigned char warn_trigraphs;
/* APPLE LOCAL begin -Wnewline-eof 2001-08-23 --sts */
/* Nonzero means warn if no newline at end of file. */
unsigned char warn_newline_at_eof;
/* APPLE LOCAL end -Wnewline-eof 2001-08-23 --sts */
/* Nonzero means warn about multicharacter charconsts. */ /* Nonzero means warn about multicharacter charconsts. */
unsigned char warn_multichar; unsigned char warn_multichar;

View File

@ -146,6 +146,10 @@ cpp_create_reader (enum c_lang lang, hash_table *table,
pfile = XCNEW (cpp_reader); pfile = XCNEW (cpp_reader);
cpp_set_lang (pfile, lang); cpp_set_lang (pfile, lang);
/* APPLE LOCAL begin -Wnewline-eof 2001-08-23 --sts */
/* Suppress warnings about missing newlines at ends of files. */
CPP_OPTION (pfile, warn_newline_at_eof) = 0;
/* APPLE LOCAL end -Wnewline-eof 2001-08-23 --sts */
CPP_OPTION (pfile, warn_multichar) = 1; CPP_OPTION (pfile, warn_multichar) = 1;
CPP_OPTION (pfile, discard_comments) = 1; CPP_OPTION (pfile, discard_comments) = 1;
CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1; CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;

View File

@ -854,6 +854,14 @@ _cpp_get_fresh_line (cpp_reader *pfile)
{ {
/* Clip to buffer size. */ /* Clip to buffer size. */
buffer->next_line = buffer->rlimit; buffer->next_line = buffer->rlimit;
/* APPLE LOCAL begin suppress no newline warning. */
if ( CPP_OPTION (pfile, warn_newline_at_eof))
{
cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
CPP_BUF_COLUMN (buffer, buffer->cur),
"no newline at end of file");
}
/* APPLE LOCAL end suppress no newline warning. */
} }
return_at_eof = buffer->return_at_eof; return_at_eof = buffer->return_at_eof;