re PR c++/55582 ([C++11] Unable to define string user-defined literal without leading underscore.)
gcc/libcpp/ 2013-02-13 Ed Smith-Rowland <3dw4rd@verizon.net> PR c++/55582 * libcpp/lex.c (lex_raw_string): Allow string literal with suffix beginning with 's' to be parsed as a C++11 user-defined literal. gcc/testsuite/ 2013-02-13 Ed Smith-Rowland <3dw4rd@verizon.net> PR c++/55582 * g++.dg/cpp0x/udlit-string-literal.h: New. * g++.dg/cpp0x/udlit-string-literal.C: New. From-SVN: r196041
This commit is contained in:
parent
94504fd484
commit
561f7fc72c
@ -1,3 +1,9 @@
|
||||
2013-02-13 Ed Smith-Rowland <3dw4rd@verizon.net>
|
||||
|
||||
PR c++/55582
|
||||
* g++.dg/cpp0x/udlit-string-literal.h: New.
|
||||
* g++.dg/cpp0x/udlit-string-literal.C: New.
|
||||
|
||||
2013-02-13 Sriraman Tallam <tmsriram@google.com>
|
||||
|
||||
* g++.dg/ext/mv12-aux.C: Add directives to match mv12.C.
|
||||
|
13
gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C
Normal file
13
gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C
Normal file
@ -0,0 +1,13 @@
|
||||
// { dg-options "-std=c++11" }
|
||||
// { dg-require-effective-target stdint_types }
|
||||
// PR c++/55582
|
||||
|
||||
#include "udlit-string-literal.h"
|
||||
|
||||
using namespace my_string_literals;
|
||||
|
||||
decltype("Hello, World!"s) s;
|
||||
decltype(u8"Hello, World!"s) s8;
|
||||
decltype(L"Hello, World!"s) ws;
|
||||
decltype(u"Hello, World!"s) s16;
|
||||
decltype(U"Hello, World!"s) s32;
|
22
gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h
Normal file
22
gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <string>
|
||||
|
||||
inline namespace my_string_literals
|
||||
{
|
||||
std::string
|
||||
operator"" s(const char* str, std::size_t len)
|
||||
{ return std::string{str, len}; }
|
||||
|
||||
std::wstring
|
||||
operator"" s(const wchar_t* str, std::size_t len)
|
||||
{ return std::wstring{str, len}; }
|
||||
|
||||
std::u16string
|
||||
operator"" s(const char16_t* str, std::size_t len)
|
||||
{ return std::u16string{str, len}; }
|
||||
|
||||
std::u32string
|
||||
operator"" s(const char32_t* str, std::size_t len)
|
||||
{ return std::u32string{str, len}; }
|
||||
}
|
@ -1,3 +1,9 @@
|
||||
2013-02-13 Ed Smith-Rowland <3dw4rd@verizon.net>
|
||||
|
||||
PR c++/55582
|
||||
* libcpp/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>
|
||||
|
||||
Update copyright years.
|
||||
|
16
libcpp/lex.c
16
libcpp/lex.c
@ -1561,8 +1561,10 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
|
||||
from inttypes.h, we generate a warning and treat the ud-suffix as a
|
||||
separate preprocessing token. This approach is under discussion by
|
||||
the standards committee, and has been adopted as a conforming
|
||||
extension by other front ends such as clang. */
|
||||
if (ISALPHA (*cur))
|
||||
extension by other front ends such as clang.
|
||||
A special exception is made for the suffix 's' which will be
|
||||
standardized as a user-defined literal suffix for strings. */
|
||||
if (ISALPHA (*cur) && *cur != 's')
|
||||
{
|
||||
/* Raise a warning, but do not consume subsequent tokens. */
|
||||
if (CPP_OPTION (pfile, warn_literal_suffix))
|
||||
@ -1572,7 +1574,7 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
|
||||
"a space between literal and identifier");
|
||||
}
|
||||
/* Grab user defined literal suffix. */
|
||||
else if (*cur == '_')
|
||||
else if (ISIDST (*cur))
|
||||
{
|
||||
type = cpp_userdef_string_add_type (type);
|
||||
++cur;
|
||||
@ -1692,8 +1694,10 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
|
||||
from inttypes.h, we generate a warning and treat the ud-suffix as a
|
||||
separate preprocessing token. This approach is under discussion by
|
||||
the standards committee, and has been adopted as a conforming
|
||||
extension by other front ends such as clang. */
|
||||
if (ISALPHA (*cur))
|
||||
extension by other front ends such as clang.
|
||||
A special exception is made for the suffix 's' which will be
|
||||
standardized as a user-defined literal suffix for strings. */
|
||||
if (ISALPHA (*cur) && *cur != 's')
|
||||
{
|
||||
/* Raise a warning, but do not consume subsequent tokens. */
|
||||
if (CPP_OPTION (pfile, warn_literal_suffix))
|
||||
@ -1703,7 +1707,7 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
|
||||
"a space between literal and identifier");
|
||||
}
|
||||
/* Grab user defined literal suffix. */
|
||||
else if (*cur == '_')
|
||||
else if (ISIDST (*cur))
|
||||
{
|
||||
type = cpp_userdef_char_add_type (type);
|
||||
type = cpp_userdef_string_add_type (type);
|
||||
|
Loading…
x
Reference in New Issue
Block a user