Commit 909eb89c by Marek Polacek Committed by Marek Polacek

re PR c/61854 (Warning single-line comment for -std=c89?)

	PR c/61854
libcpp/
	* init.c (struct lang_flags): Remove cplusplus_comments.
	(cpp_set_lang): Likewise.
	(post_options): Likewise.
	* lex.c (_cpp_lex_direct): Disallow C++ style comments in C90/C94.
testsuite/
	* gcc.dg/cpp/pr61854-1.c: New test.
	* gcc.dg/cpp/pr61854-2.c: New test.
	* gcc.dg/cpp/pr61854-3.c: New test.
	* gcc.dg/cpp/pr61854-3.h: New test.
	* gcc.dg/cpp/pr61854-4.c: New test.
	* gcc.dg/cpp/pr61854-5.c: New test.
	* gcc.dg/cpp/pr61854-6.c: New test.
	* gcc.dg/cpp/pr61854-7.c: New test.
	* gcc.dg/cpp/pr61854-c90.c: New test.
	* gcc.dg/cpp/pr61854-c94.c: New test.

From-SVN: r215339
parent 010718fc
2014-09-17 Marek Polacek <polacek@redhat.com>
PR c/61854
* gcc.dg/cpp/pr61854-1.c: New test.
* gcc.dg/cpp/pr61854-2.c: New test.
* gcc.dg/cpp/pr61854-3.c: New test.
* gcc.dg/cpp/pr61854-3.h: New test.
* gcc.dg/cpp/pr61854-4.c: New test.
* gcc.dg/cpp/pr61854-5.c: New test.
* gcc.dg/cpp/pr61854-6.c: New test.
* gcc.dg/cpp/pr61854-7.c: New test.
* gcc.dg/cpp/pr61854-c90.c: New test.
* gcc.dg/cpp/pr61854-c94.c: New test.
2014-09-17 Jakub Jelinek <jakub@redhat.com> 2014-09-17 Jakub Jelinek <jakub@redhat.com>
PR debug/63284 PR debug/63284
......
/* PR c/61854 */
/* { dg-do run } */
/* { dg-options "-std=c89" } */
int
main (void)
{
int i = 1 //**/ 2
;
int j = 1 //**/ 2
;
if (i != 0 || j != 0)
__builtin_abort ();
return 0;
}
/* PR c/61854 */
/* { dg-do run } */
/* { dg-options "-std=gnu89" } */
int
main (void)
{
int i = 1 //**/ 2
;
int j = 1 //**/ 2
;
if (i != 1 || j != 1)
__builtin_abort ();
return 0;
}
/* PR c/61854 */
/* { dg-do preprocess } */
/* { dg-options "-std=c89" } */
#include "pr61854-3.h"
int i;
#pragma GCC system_header
// X
// Y
// Z
/* PR c/61854 */
/* { dg-do preprocess } */
/* { dg-options "-std=c89" } */
void
foo (void)
{
#if 0
// Do not error here.
#endif
#if 1
// But error here.
#endif
/* { dg-error "C\\+\\+ style comments are not allowed in ISO C90" "comments" { target *-*-*} 12 } */
/* { dg-error "reported only once" "" { target *-*-*} 12 } */
}
/* PR c/61854 */
/* { dg-do run } */
/* { dg-options "-std=c89" } */
#define h(x) #x
#define s(x) h(x)
#define foo //
int
main (void)
{
if (__builtin_memcmp (s(foo), "//", 3) != 0)
__builtin_abort ();
return 0;
}
/* PR c/61854 */
/* { dg-do run } */
/* { dg-options "-std=gnu89" } */
int
main (void)
{
int i = 0
#if 0
// /*
#else
// */
+1
#endif
;
if (i != 1)
__builtin_abort ();
return 0;
}
/* PR c/61854 */
/* { dg-do run } */
/* { dg-options "-std=c89" } */
int
main (void)
{
int i = 0
#if 0
// /*
#else
// */
+1
#endif
;
if (i != 0)
__builtin_abort ();
return 0;
}
/* PR c/61854 */
/* { dg-do preprocess } */
/* { dg-options "-std=iso9899:1990" } */
void
foo (void)
{
// 1st
/* { dg-error "C\\+\\+ style comments are not allowed in ISO C90" "comments" { target *-*-*} 8 } */
/* { dg-error "reported only once" "" { target *-*-*} 8 } */
// 2nd
// 3rd
}
/* PR c/61854 */
/* { dg-do preprocess } */
/* { dg-options "-std=iso9899:199409" } */
void
foo (void)
{
// 1st
/* { dg-error "C\\+\\+ style comments are not allowed in ISO C90" "comments" { target *-*-*} 8 } */
/* { dg-error "reported only once" "" { target *-*-*} 8 } */
// 2nd
// 3rd
}
2014-09-17 Marek Polacek <polacek@redhat.com>
PR c/61854
* init.c (struct lang_flags): Remove cplusplus_comments.
(cpp_set_lang): Likewise.
(post_options): Likewise.
* lex.c (_cpp_lex_direct): Disallow C++ style comments in C90/C94.
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org> 2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* include/cpplib.h (struct cpp_options): Declare warn_normalize as * include/cpplib.h (struct cpp_options): Declare warn_normalize as
......
...@@ -83,7 +83,6 @@ struct lang_flags ...@@ -83,7 +83,6 @@ struct lang_flags
char extended_identifiers; char extended_identifiers;
char c11_identifiers; char c11_identifiers;
char std; char std;
char cplusplus_comments;
char digraphs; char digraphs;
char uliterals; char uliterals;
char rliterals; char rliterals;
...@@ -94,23 +93,23 @@ struct lang_flags ...@@ -94,23 +93,23 @@ struct lang_flags
}; };
static const struct lang_flags lang_defaults[] = static const struct lang_flags lang_defaults[] =
{ /* c99 c++ xnum xid c11 std // digr ulit rlit udlit bincst digsep trig */ { /* c99 c++ xnum xid c11 std digr ulit rlit udlit bincst digsep trig */
/* GNUC89 */ { 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, /* GNUC89 */ { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
/* GNUC99 */ { 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }, /* GNUC99 */ { 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
/* GNUC11 */ { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0 }, /* GNUC11 */ { 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 },
/* STDC89 */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 }, /* STDC89 */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
/* STDC94 */ { 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 }, /* STDC94 */ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
/* STDC99 */ { 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 }, /* STDC99 */ { 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
/* STDC11 */ { 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 }, /* STDC11 */ { 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
/* GNUCXX */ { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, /* GNUCXX */ { 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
/* CXX98 */ { 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 }, /* CXX98 */ { 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
/* GNUCXX11 */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0 }, /* GNUCXX11 */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0 },
/* CXX11 */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1 }, /* CXX11 */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1 },
/* GNUCXX14 */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, /* GNUCXX14 */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0 },
/* CXX14 */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* CXX14 */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
/* GNUCXX1Z */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, /* GNUCXX1Z */ { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0 },
/* CXX1Z */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, /* CXX1Z */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
/* ASM */ { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
/* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX11, CXX11, /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX11, CXX11,
GNUCXX14, and CXX14 when no longer experimental (when all uses of GNUCXX14, and CXX14 when no longer experimental (when all uses of
identifiers in the compiler have been audited for correct handling identifiers in the compiler have been audited for correct handling
...@@ -131,7 +130,6 @@ cpp_set_lang (cpp_reader *pfile, enum c_lang lang) ...@@ -131,7 +130,6 @@ cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers; CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
CPP_OPTION (pfile, c11_identifiers) = l->c11_identifiers; CPP_OPTION (pfile, c11_identifiers) = l->c11_identifiers;
CPP_OPTION (pfile, std) = l->std; CPP_OPTION (pfile, std) = l->std;
CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
CPP_OPTION (pfile, digraphs) = l->digraphs; CPP_OPTION (pfile, digraphs) = l->digraphs;
CPP_OPTION (pfile, uliterals) = l->uliterals; CPP_OPTION (pfile, uliterals) = l->uliterals;
CPP_OPTION (pfile, rliterals) = l->rliterals; CPP_OPTION (pfile, rliterals) = l->rliterals;
...@@ -775,8 +773,6 @@ post_options (cpp_reader *pfile) ...@@ -775,8 +773,6 @@ post_options (cpp_reader *pfile)
if (CPP_OPTION (pfile, traditional)) if (CPP_OPTION (pfile, traditional))
{ {
CPP_OPTION (pfile, cplusplus_comments) = 0;
CPP_OPTION (pfile, trigraphs) = 0; CPP_OPTION (pfile, trigraphs) = 0;
CPP_OPTION (pfile, warn_trigraphs) = 0; CPP_OPTION (pfile, warn_trigraphs) = 0;
} }
......
...@@ -2322,13 +2322,16 @@ _cpp_lex_direct (cpp_reader *pfile) ...@@ -2322,13 +2322,16 @@ _cpp_lex_direct (cpp_reader *pfile)
if (_cpp_skip_block_comment (pfile)) if (_cpp_skip_block_comment (pfile))
cpp_error (pfile, CPP_DL_ERROR, "unterminated comment"); cpp_error (pfile, CPP_DL_ERROR, "unterminated comment");
} }
else if (c == '/' && (CPP_OPTION (pfile, cplusplus_comments) else if (c == '/' && ! CPP_OPTION (pfile, traditional))
|| cpp_in_system_header (pfile)))
{ {
/* Don't warn for system headers. */
if (cpp_in_system_header (pfile))
;
/* Warn about comments if pedantically GNUC89, and not /* Warn about comments if pedantically GNUC89, and not
in system headers. */ in system headers. */
if (CPP_OPTION (pfile, lang) == CLK_GNUC89 && CPP_PEDANTIC (pfile) else if (CPP_OPTION (pfile, lang) == CLK_GNUC89
&& ! buffer->warned_cplusplus_comments) && CPP_PEDANTIC (pfile)
&& ! buffer->warned_cplusplus_comments)
{ {
cpp_error (pfile, CPP_DL_PEDWARN, cpp_error (pfile, CPP_DL_PEDWARN,
"C++ style comments are not allowed in ISO C90"); "C++ style comments are not allowed in ISO C90");
...@@ -2347,7 +2350,31 @@ _cpp_lex_direct (cpp_reader *pfile) ...@@ -2347,7 +2350,31 @@ _cpp_lex_direct (cpp_reader *pfile)
"(this will be reported only once per input file)"); "(this will be reported only once per input file)");
buffer->warned_cplusplus_comments = 1; buffer->warned_cplusplus_comments = 1;
} }
/* In C89/C94, C++ style comments are forbidden. */
else if ((CPP_OPTION (pfile, lang) == CLK_STDC89
|| CPP_OPTION (pfile, lang) == CLK_STDC94))
{
/* But don't be confused about valid code such as
- // immediately followed by *,
- // in a preprocessing directive,
- // in an #if 0 block. */
if (buffer->cur[1] == '*'
|| pfile->state.in_directive
|| pfile->state.skipping)
{
result->type = CPP_DIV;
break;
}
else if (! buffer->warned_cplusplus_comments)
{
cpp_error (pfile, CPP_DL_ERROR,
"C++ style comments are not allowed in ISO C90");
cpp_error (pfile, CPP_DL_ERROR,
"(this will be reported only once per input "
"file)");
buffer->warned_cplusplus_comments = 1;
}
}
if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments)) if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments))
cpp_warning (pfile, CPP_W_COMMENTS, "multi-line comment"); cpp_warning (pfile, CPP_W_COMMENTS, "multi-line comment");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment