Commit fe191308 by Jason Merrill Committed by Jason Merrill

lex.c (lex_string): Add -Wc++11-compat warning.

libcpp/
	* lex.c (lex_string): Add -Wc++11-compat warning.
	* include/cpplib.h: Add CPP_W_CXX11_COMPAT.
	(struct cpp_options): Add cpp_warn_cxx11_compat.
	* init.c (cpp_create_reader): Initialize it.
gcc/c-family/
	* c.opt (Wc++0x-compat): Set it.

From-SVN: r222961
parent 16998094
2015-05-08 Jason Merrill <jason@redhat.com>
* c.opt (Wc++0x-compat): Also set cpp_warn_cxx11_compat.
2015-05-08 Marek Polacek <polacek@redhat.com> 2015-05-08 Marek Polacek <polacek@redhat.com>
PR c/64918 PR c/64918
......
...@@ -312,7 +312,7 @@ C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) CppReason(CPP_W_CXX_OPE ...@@ -312,7 +312,7 @@ C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) CppReason(CPP_W_CXX_OPE
Warn about C constructs that are not in the common subset of C and C++ Warn about C constructs that are not in the common subset of C and C++
Wc++0x-compat Wc++0x-compat
C++ ObjC++ Var(warn_cxx0x_compat) Warning LangEnabledBy(C++ ObjC++,Wall) C++ ObjC++ Var(warn_cxx0x_compat) Warning LangEnabledBy(C++ ObjC++,Wall) Init(0) CPP(cpp_warn_cxx11_compat) CppReason(CPP_W_CXX11_COMPAT)
Deprecated in favor of -Wc++11-compat Deprecated in favor of -Wc++11-compat
Wc++11-compat Wc++11-compat
......
// { dg-options "-Wall" }
#define FOO "foo"
const char *p = "bar"FOO; // { dg-warning "macro" }
2015-05-08 Jason Merrill <jason@redhat.com>
* include/cpplib.h: Add CPP_W_CXX11_COMPAT.
(struct cpp_options): Add cpp_warn_cxx11_compat.
* init.c (cpp_create_reader): Initialize it.
* lex.c (lex_string): Add -Wc++11-compat warning.
2015-05-05 David Malcolm <dmalcolm@redhat.com> 2015-05-05 David Malcolm <dmalcolm@redhat.com>
* pch.c (cpp_valid_state): Fix indentation so that it reflects the * pch.c (cpp_valid_state): Fix indentation so that it reflects the
......
...@@ -484,6 +484,9 @@ struct cpp_options ...@@ -484,6 +484,9 @@ struct cpp_options
/* True if warn about differences between C90 and C99. */ /* True if warn about differences between C90 and C99. */
signed char cpp_warn_c90_c99_compat; signed char cpp_warn_c90_c99_compat;
/* True if warn about differences between C++98 and C++11. */
bool cpp_warn_cxx11_compat;
/* Dependency generation. */ /* Dependency generation. */
struct struct
{ {
...@@ -960,7 +963,8 @@ enum { ...@@ -960,7 +963,8 @@ enum {
CPP_W_LITERAL_SUFFIX, CPP_W_LITERAL_SUFFIX,
CPP_W_DATE_TIME, CPP_W_DATE_TIME,
CPP_W_PEDANTIC, CPP_W_PEDANTIC,
CPP_W_C90_C99_COMPAT CPP_W_C90_C99_COMPAT,
CPP_W_CXX11_COMPAT
}; };
/* Output a diagnostic of some kind. */ /* Output a diagnostic of some kind. */
......
...@@ -180,6 +180,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table, ...@@ -180,6 +180,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
CPP_OPTION (pfile, warn_trigraphs) = 2; CPP_OPTION (pfile, warn_trigraphs) = 2;
CPP_OPTION (pfile, warn_endif_labels) = 1; CPP_OPTION (pfile, warn_endif_labels) = 1;
CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1; CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
CPP_OPTION (pfile, cpp_warn_deprecated) = 1; CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
CPP_OPTION (pfile, cpp_warn_long_long) = 0; CPP_OPTION (pfile, cpp_warn_long_long) = 0;
CPP_OPTION (pfile, dollars_in_ident) = 1; CPP_OPTION (pfile, dollars_in_ident) = 1;
......
...@@ -1905,6 +1905,12 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base) ...@@ -1905,6 +1905,12 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
++cur; ++cur;
} }
} }
else if (CPP_OPTION (pfile, cpp_warn_cxx11_compat)
&& is_macro (pfile, cur)
&& !pfile->state.skipping)
cpp_warning_with_line (pfile, CPP_W_CXX11_COMPAT,
token->src_loc, 0, "C++11 requires a space "
"between string literal and macro");
pfile->buffer->cur = cur; pfile->buffer->cur = cur;
create_literal (pfile, token, base, cur - base, type); create_literal (pfile, token, base, cur - base, type);
......
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