mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
llvm-mc: Make non-sensical max bytes to .align an error.
Also, warn about overflow in alignment values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80077 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
30457f2cab
commit
b58a804400
@ -1024,6 +1024,7 @@ bool AsmParser::ParseDirectiveOrg() {
|
||||
/// ParseDirectiveAlign
|
||||
/// ::= {.align, ...} expression [ , expression [ , expression ]]
|
||||
bool AsmParser::ParseDirectiveAlign(bool IsPow2, unsigned ValueSize) {
|
||||
SMLoc AlignmentLoc = Lexer.getLoc();
|
||||
int64_t Alignment;
|
||||
if (ParseAbsoluteExpression(Alignment))
|
||||
return true;
|
||||
@ -1070,15 +1071,19 @@ bool AsmParser::ParseDirectiveAlign(bool IsPow2, unsigned ValueSize) {
|
||||
// Compute alignment in bytes.
|
||||
if (IsPow2) {
|
||||
// FIXME: Diagnose overflow.
|
||||
Alignment = 1LL << Alignment;
|
||||
if (Alignment >= 32) {
|
||||
Error(AlignmentLoc, "invalid alignment value");
|
||||
Alignment = 31;
|
||||
}
|
||||
|
||||
Alignment = 1 << Alignment;
|
||||
}
|
||||
|
||||
// Diagnose non-sensical max bytes to fill, which are treated as missing (this
|
||||
// matches 'as').
|
||||
// Diagnose non-sensical max bytes to align.
|
||||
if (MaxBytesLoc.isValid()) {
|
||||
if (MaxBytesToFill < 1) {
|
||||
Warning(MaxBytesLoc, "alignment directive can never be satisfied in this "
|
||||
"many bytes, ignoring maximum bytes expression");
|
||||
Error(MaxBytesLoc, "alignment directive can never be satisfied in this "
|
||||
"many bytes, ignoring maximum bytes expression");
|
||||
MaxBytesToFill = 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user