forked from OSchip/llvm-project
Hex literals without a significand no longer crash the lexer. Fixes bug 7910
Patch by Eitan Adler llvm-svn: 149984
This commit is contained in:
parent
db0fc5131d
commit
b97a5addd5
|
@ -113,6 +113,8 @@ def err_exponent_has_no_digits : Error<"exponent has no digits">;
|
|||
def ext_imaginary_constant : Extension<"imaginary constants are an extension">;
|
||||
def err_hexconstant_requires_exponent : Error<
|
||||
"hexadecimal floating constants require an exponent">;
|
||||
def err_hexconstant_requires_digits : Error<
|
||||
"hexadecimal floating constants require a significand">;
|
||||
def ext_hexconstant_invalid : Extension<
|
||||
"hexadecimal floating constants are a C99 feature">;
|
||||
def ext_binary_literal : Extension<
|
||||
|
|
|
@ -546,6 +546,12 @@ void NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {
|
|||
// Handle a hex number like 0x1234.
|
||||
if ((*s == 'x' || *s == 'X') && (isxdigit(s[1]) || s[1] == '.')) {
|
||||
s++;
|
||||
if (!isxdigit(*s)) {
|
||||
PP.Diag(PP.AdvanceToTokenCharacter(TokLoc, s-ThisTokBegin), \
|
||||
diag::err_hexconstant_requires_digits);
|
||||
hadError = true;
|
||||
return;
|
||||
}
|
||||
radix = 16;
|
||||
DigitsBegin = s;
|
||||
s = SkipHexDigits(s);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
|
||||
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -pedantic %s
|
||||
float f = 0x1p+1; // expected-warning{{hexadecimal floating constants are a C99 feature}}
|
||||
double e = 0x.p0; //expected-error{{hexadecimal floating constants require a significand}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue