===================================================================
@@ -12261,7 +12261,6 @@ cp_parser_operator (cp_parser* parser)
tree id = NULL_TREE;
cp_token *token;
bool bad_encoding_prefix = false;
- int string_len = 2;
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
@@ -12462,20 +12461,22 @@ cp_parser_operator (cp_parser* parser)
return ansi_opname (ARRAY_REF);
case CPP_WSTRING:
- string_len = 3;
case CPP_STRING16:
case CPP_STRING32:
- string_len = 5;
case CPP_UTF8STRING:
- string_len = 4;
- bad_encoding_prefix = true;
+ bad_encoding_prefix = true;
+ /* Fall through. */
+
case CPP_STRING:
if (cxx_dialect == cxx98)
maybe_warn_cpp0x (CPP0X_USER_DEFINED_LITERALS);
if (bad_encoding_prefix)
- error ("invalid encoding prefix in literal operator");
- if (TREE_STRING_LENGTH (token->u.value) > string_len)
{
+ error ("invalid encoding prefix in literal operator");
+ return error_mark_node;
+ }
+ if (TREE_STRING_LENGTH (token->u.value) > 2)
+ {
error ("expected empty string after %<operator%> keyword");
return error_mark_node;
}
@@ -12505,21 +12506,23 @@ cp_parser_operator (cp_parser* parser)
}
case CPP_WSTRING_USERDEF:
- string_len = 3;
case CPP_STRING16_USERDEF:
case CPP_STRING32_USERDEF:
- string_len = 5;
case CPP_UTF8STRING_USERDEF:
- string_len = 4;
bad_encoding_prefix = true;
+ /* Fall through. */
+
case CPP_STRING_USERDEF:
if (cxx_dialect == cxx98)
maybe_warn_cpp0x (CPP0X_USER_DEFINED_LITERALS);
if (bad_encoding_prefix)
- error ("invalid encoding prefix in literal operator");
+ {
+ error ("invalid encoding prefix in literal operator");
+ return error_mark_node;
+ }
{
tree string_tree = USERDEF_LITERAL_VALUE (token->u.value);
- if (TREE_STRING_LENGTH (string_tree) > string_len)
+ if (TREE_STRING_LENGTH (string_tree) > 2)
{
error ("expected empty string after %<operator%> keyword");
return error_mark_node;
===================================================================
@@ -0,0 +1,21 @@
+// { dg-options -std=c++1y }
+
+int
+operator "*"_s(unsigned long long) // { dg-error "expected empty string after 'operator'" }
+{ return 0; }
+
+int
+operator L"*"_Ls(unsigned long long) // { dg-error "invalid encoding prefix in literal operator" }
+{ return 0; }
+
+int
+operator u"*"_s16(unsigned long long) // { dg-error "invalid encoding prefix in literal operator" }
+{ return 0; }
+
+int
+operator U"*"_s32(unsigned long long) // { dg-error "invalid encoding prefix in literal operator" }
+{ return 0; }
+
+int
+operator u8"*"_u8s(unsigned long long) // { dg-error "invalid encoding prefix in literal operator" }
+{ return 0; }