cpplib.h (enum c_lang): Add CLK_GNUCXX1Y and CLK_CXX1Y.

/libcpp
2013-04-24  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/cpplib.h (enum c_lang): Add CLK_GNUCXX1Y and CLK_CXX1Y.
	* init.c (lang_defaults): Add defaults for the latter.
	(cpp_init_builtins): Define __cplusplus as 201300L for the latter.
	* lex.c (_cpp_lex_direct): Update.

/gcc/c-family
2013-04-24  Paolo Carlini  <paolo.carlini@oracle.com>

	* c-opts.c (set_std_cxx11): Use CLK_CXX1Y and CLK_GNUCXX1Y.

/gcc/testsuite
2013-04-24  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/cpp1y/cplusplus.C: New.

From-SVN: r198261
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 8ec815d..329f5e0 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,10 @@
+2013-04-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+	* include/cpplib.h (enum c_lang): Add CLK_GNUCXX1Y and CLK_CXX1Y.
+	* init.c (lang_defaults): Add defaults for the latter.
+	(cpp_init_builtins): Define __cplusplus as 201300L for the latter.
+	* lex.c (_cpp_lex_direct): Update.
+
 2013-04-03  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
 	PR target/56771
@@ -46,7 +53,7 @@
 2013-02-13  Ed Smith-Rowland  <3dw4rd@verizon.net>
 
 	PR c++/55582
-	* libcpp/lex.c (lex_raw_string): Allow string literal with suffix
+	* lex.c (lex_raw_string): Allow string literal with suffix
 	beginning with 's' to be parsed as a C++11 user-defined literal.
 
 2013-01-14  Richard Sandiford  <rdsandiford@googlemail.com>
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index a48ac87..3084a11 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -165,7 +165,8 @@
 /* C language kind, used when calling cpp_create_reader.  */
 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11,
 	     CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC11,
-	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11, CLK_ASM};
+	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
+	     CLK_GNUCXX1Y, CLK_CXX1Y, CLK_ASM};
 
 /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
 struct GTY(()) cpp_string {
diff --git a/libcpp/init.c b/libcpp/init.c
index 3037ecd..c3fa4af 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -98,11 +98,13 @@
   /* CXX98    */  { 0,  1,  1,   0,  1,   1,   1,   0,   0,    0 },
   /* GNUCXX11 */  { 1,  1,  1,   0,  0,   1,   1,   1,   1,    1 },
   /* CXX11    */  { 1,  1,  1,   0,  1,   1,   1,   1,   1,    1 },
+  /* GNUCXX1Y */  { 1,  1,  1,   0,  0,   1,   1,   1,   1,    1 },
+  /* CXX1Y    */  { 1,  1,  1,   0,  1,   1,   1,   1,   1,    1 },
   /* ASM      */  { 0,  0,  1,   0,  0,   1,   0,   0,   0,    0 }
-  /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX11, and
-     CXX11 when no longer experimental (when all uses of identifiers
-     in the compiler have been audited for correct handling of
-     extended identifiers).  */
+  /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX11, CXX11,
+     GNUCXX1Y, and CXX1Y when no longer experimental (when all uses of
+     identifiers in the compiler have been audited for correct handling
+     of extended identifiers).  */
 };
 
 /* Sets internal flags correctly for a given language.  */
@@ -476,8 +478,11 @@
 
   if (CPP_OPTION (pfile, cplusplus))
     {
-      if (CPP_OPTION (pfile, lang) == CLK_CXX11
-	   || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
+      if (CPP_OPTION (pfile, lang) == CLK_CXX1Y
+	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX1Y)
+	_cpp_define_builtin (pfile, "__cplusplus 201300L");
+      else if (CPP_OPTION (pfile, lang) == CLK_CXX11
+	       || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
 	_cpp_define_builtin (pfile, "__cplusplus 201103L");
       else
 	_cpp_define_builtin (pfile, "__cplusplus 199711L");
diff --git a/libcpp/lex.c b/libcpp/lex.c
index 570c007..3e59d40 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -2298,8 +2298,8 @@
 		 is neither : nor >, the < is treated as a preprocessor
 		 token by itself".  */
 	      if (CPP_OPTION (pfile, cplusplus)
-		  && (CPP_OPTION (pfile, lang) == CLK_CXX11
-		      || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
+		  && CPP_OPTION (pfile, lang) != CLK_CXX98
+		  && CPP_OPTION (pfile, lang) != CLK_GNUCXX
 		  && buffer->cur[1] == ':'
 		  && buffer->cur[2] != ':' && buffer->cur[2] != '>')
 		break;