forked from OSchip/llvm-project
parent
4246ae0089
commit
62db5066e9
|
@ -114,12 +114,13 @@ def err_ucn_escape_incomplete : Error<
|
|||
def warn_ucn_escape_incomplete : Warning<
|
||||
"incomplete universal character name; "
|
||||
"treating as '\\' followed by identifier">, InGroup<Unicode>;
|
||||
def err_ucn_escape_invalid : Error<"invalid universal character">;
|
||||
def note_ucn_four_not_eight : Note<"did you mean to use '\\u'?">;
|
||||
|
||||
def err_ucn_escape_basic_scs : Error<
|
||||
"character '%0' cannot be specified by a universal character name">;
|
||||
def err_ucn_control_character : Error<
|
||||
"universal character name refers to a control character">;
|
||||
def err_ucn_escape_invalid : Error<"invalid universal character">;
|
||||
def warn_cxx98_compat_literal_ucn_escape_basic_scs : Warning<
|
||||
"specifying character '%0' with a universal character name "
|
||||
"is incompatible with C++98">, InGroup<CXX98Compat>, DefaultIgnore;
|
||||
|
|
|
@ -2725,8 +2725,16 @@ uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc,
|
|||
Diag(BufferPtr, diag::warn_ucn_escape_no_digits)
|
||||
<< StringRef(KindLoc, 1);
|
||||
} else {
|
||||
// FIXME: if i == 4 and NumHexDigits == 8, suggest a fixit to \u.
|
||||
Diag(BufferPtr, diag::warn_ucn_escape_incomplete);
|
||||
|
||||
// If the user wrote \U1234, suggest a fixit to \u.
|
||||
if (i == 4 && NumHexDigits == 8) {
|
||||
CharSourceRange URange =
|
||||
CharSourceRange::getCharRange(getSourceLocation(KindLoc),
|
||||
getSourceLocation(KindLoc + 1));
|
||||
Diag(KindLoc, diag::note_ucn_four_not_eight)
|
||||
<< FixItHint::CreateReplacement(URange, "u");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// RUN: %clang_cc1 %s -fsyntax-only -std=c99 -pedantic -verify -Wundef
|
||||
// RUN: %clang_cc1 %s -fsyntax-only -x c++ -pedantic -verify -Wundef
|
||||
// RUN: %clang_cc1 %s -fsyntax-only -std=c99 -pedantic -fdiagnostics-parseable-fixits -Wundef 2>&1 | FileCheck -strict-whitespace %s
|
||||
|
||||
#define \u00FC
|
||||
#define a\u00FD() 0
|
||||
|
@ -95,3 +96,11 @@ C 1
|
|||
#else
|
||||
#error "Line splicing failed to produce UCNs"
|
||||
#endif
|
||||
|
||||
|
||||
#define capital_u_\U00FC
|
||||
// expected-warning@-1 {{incomplete universal character name}} expected-note@-1 {{did you mean to use '\u'?}} expected-warning@-1 {{whitespace}}
|
||||
// CHECK: note: did you mean to use '\u'?
|
||||
// CHECK-NEXT: #define capital_u_\U00FC
|
||||
// CHECK-NEXT: {{^ \^}}
|
||||
// CHECK-NEXT: {{^ u}}
|
||||
|
|
Loading…
Reference in New Issue