Author: Fangrui Song Date: 2020-12-20T14:17:00-08:00 New Revision: 01d1de81963d91773c92b29e2d08605293c59750
URL: https://github.com/llvm/llvm-project/commit/01d1de81963d91773c92b29e2d08605293c59750 DIFF: https://github.com/llvm/llvm-project/commit/01d1de81963d91773c92b29e2d08605293c59750.diff LOG: [MC] Reject byte alignment if larger than or equal to 2**32 This is consistent with the resolution to power-of-2 alignments. Otherwise, emitCodeAlignment and emitValueToAlignment cannot handle alignments larger than 2**32 and will trigger assertion failure (PR35218). Note: GNU as as of 2.35 will use 1 for such a large byte `.align` Added: Modified: llvm/lib/MC/MCParser/AsmParser.cpp llvm/test/MC/AsmParser/align_invalid.s Removed: ################################################################################ diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index bf50a95bc70c..55b0003e9909 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -3342,6 +3342,8 @@ bool AsmParser::parseDirectiveAlign(bool IsPow2, unsigned ValueSize) { Alignment = 1; if (!isPowerOf2_64(Alignment)) ReturnVal |= Error(AlignmentLoc, "alignment must be a power of 2"); + if (!isUInt<32>(Alignment)) + ReturnVal |= Error(AlignmentLoc, "alignment must be smaller than 2**32"); } // Diagnose non-sensical max bytes to align. diff --git a/llvm/test/MC/AsmParser/align_invalid.s b/llvm/test/MC/AsmParser/align_invalid.s index 7ffbed42635a..fc9d3207ddab 100644 --- a/llvm/test/MC/AsmParser/align_invalid.s +++ b/llvm/test/MC/AsmParser/align_invalid.s @@ -8,3 +8,7 @@ .align 32 # ELF-NOT: error # DARWIN: error: invalid alignment value + +.align 0x100000000 +# ELF: error: alignment must be smaller than 2**32 +# DARWIN: error: invalid alignment value _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits