mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 19:42:54 +02:00
fix rdar://7997827 - Accept and ignore LL and ULL suffixes on integer literals.
Also fix 0b010 syntax to actually work while we're at it :-) llvm-svn: 111876
This commit is contained in:
parent
696d6ee9d7
commit
115fdde871
@ -117,6 +117,13 @@ AsmToken AsmLexer::LexLineComment() {
|
|||||||
return AsmToken(AsmToken::EndOfStatement, StringRef(CurPtr, 0));
|
return AsmToken(AsmToken::EndOfStatement, StringRef(CurPtr, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SkipIgnoredIntegerSuffix(const char *&CurPtr) {
|
||||||
|
if (CurPtr[0] == 'L' && CurPtr[1] == 'L')
|
||||||
|
CurPtr += 2;
|
||||||
|
if (CurPtr[0] == 'U' && CurPtr[1] == 'L' && CurPtr[2] == 'L')
|
||||||
|
CurPtr += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// LexDigit: First character is [0-9].
|
/// LexDigit: First character is [0-9].
|
||||||
/// Local Label: [0-9][:]
|
/// Local Label: [0-9][:]
|
||||||
@ -143,6 +150,11 @@ AsmToken AsmLexer::LexDigit() {
|
|||||||
else
|
else
|
||||||
return ReturnError(TokStart, "Invalid decimal number");
|
return ReturnError(TokStart, "Invalid decimal number");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The darwin/x86 (and x86-64) assembler accepts and ignores ULL and LL
|
||||||
|
// suffixes on integer literals.
|
||||||
|
SkipIgnoredIntegerSuffix(CurPtr);
|
||||||
|
|
||||||
return AsmToken(AsmToken::Integer, Result, Value);
|
return AsmToken(AsmToken::Integer, Result, Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,9 +177,13 @@ AsmToken AsmLexer::LexDigit() {
|
|||||||
StringRef Result(TokStart, CurPtr - TokStart);
|
StringRef Result(TokStart, CurPtr - TokStart);
|
||||||
|
|
||||||
long long Value;
|
long long Value;
|
||||||
if (Result.getAsInteger(2, Value))
|
if (Result.substr(2).getAsInteger(2, Value))
|
||||||
return ReturnError(TokStart, "Invalid binary number");
|
return ReturnError(TokStart, "Invalid binary number");
|
||||||
|
|
||||||
|
// The darwin/x86 (and x86-64) assembler accepts and ignores ULL and LL
|
||||||
|
// suffixes on integer literals.
|
||||||
|
SkipIgnoredIntegerSuffix(CurPtr);
|
||||||
|
|
||||||
return AsmToken(AsmToken::Integer, Result, Value);
|
return AsmToken(AsmToken::Integer, Result, Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,6 +201,10 @@ AsmToken AsmLexer::LexDigit() {
|
|||||||
if (StringRef(TokStart, CurPtr - TokStart).getAsInteger(0, Result))
|
if (StringRef(TokStart, CurPtr - TokStart).getAsInteger(0, Result))
|
||||||
return ReturnError(TokStart, "Invalid hexadecimal number");
|
return ReturnError(TokStart, "Invalid hexadecimal number");
|
||||||
|
|
||||||
|
// The darwin/x86 (and x86-64) assembler accepts and ignores ULL and LL
|
||||||
|
// suffixes on integer literals.
|
||||||
|
SkipIgnoredIntegerSuffix(CurPtr);
|
||||||
|
|
||||||
return AsmToken(AsmToken::Integer, StringRef(TokStart, CurPtr - TokStart),
|
return AsmToken(AsmToken::Integer, StringRef(TokStart, CurPtr - TokStart),
|
||||||
(int64_t)Result);
|
(int64_t)Result);
|
||||||
}
|
}
|
||||||
@ -198,6 +218,10 @@ AsmToken AsmLexer::LexDigit() {
|
|||||||
if (Result.getAsInteger(8, Value))
|
if (Result.getAsInteger(8, Value))
|
||||||
return ReturnError(TokStart, "Invalid octal number");
|
return ReturnError(TokStart, "Invalid octal number");
|
||||||
|
|
||||||
|
// The darwin/x86 (and x86-64) assembler accepts and ignores ULL and LL
|
||||||
|
// suffixes on integer literals.
|
||||||
|
SkipIgnoredIntegerSuffix(CurPtr);
|
||||||
|
|
||||||
return AsmToken(AsmToken::Integer, Result, Value);
|
return AsmToken(AsmToken::Integer, Result, Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,3 +19,20 @@ TEST2:
|
|||||||
# CHECK: .quad 9
|
# CHECK: .quad 9
|
||||||
TEST3:
|
TEST3:
|
||||||
.quad 9
|
.quad 9
|
||||||
|
|
||||||
|
|
||||||
|
# rdar://7997827
|
||||||
|
TEST4:
|
||||||
|
.quad 0b0100
|
||||||
|
.quad 4294967295
|
||||||
|
.quad 4294967295+1
|
||||||
|
.quad 4294967295LL+1
|
||||||
|
.quad 0b10LL + 07ULL + 0x42AULL
|
||||||
|
# CHECK: TEST4
|
||||||
|
# CHECK: .quad 4
|
||||||
|
# CHECK: .quad 4294967295
|
||||||
|
# CHECK: .quad 4294967296
|
||||||
|
# CHECK: .quad 4294967296
|
||||||
|
# CHECK: .quad 1075
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user