From 25ae09a37475bd249d8b5baedde1755ec47ae554 Mon Sep 17 00:00:00 2001 From: Sergey Andreenko Date: Mon, 10 Apr 2017 09:41:49 -0700 Subject: [PATCH] Forbid lea without index and base. (#10771) --- src/jit/codegencommon.cpp | 33 +++++++++++++++++++-------------- src/jit/gentree.h | 1 + 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp index 29a76c4..89d6a4c 100644 --- a/src/jit/codegencommon.cpp +++ b/src/jit/codegencommon.cpp @@ -1869,26 +1869,26 @@ bool CodeGen::genCreateAddrMode(GenTreePtr addr, The following indirections are valid address modes on x86/x64: [ icon] * not handled here - [reg ] * not handled here + [reg ] [reg + icon] - [reg2 + reg1 ] - [reg2 + reg1 + icon] - [reg2 + 2 * reg1 ] - [reg2 + 4 * reg1 ] - [reg2 + 8 * reg1 ] - [ 2 * reg1 + icon] - [ 4 * reg1 + icon] - [ 8 * reg1 + icon] - [reg2 + 2 * reg1 + icon] - [reg2 + 4 * reg1 + icon] - [reg2 + 8 * reg1 + icon] + [reg1 + reg2 ] + [reg1 + reg2 + icon] + [reg1 + 2 * reg2 ] + [reg1 + 4 * reg2 ] + [reg1 + 8 * reg2 ] + [ 2 * reg2 + icon] + [ 4 * reg2 + icon] + [ 8 * reg2 + icon] + [reg1 + 2 * reg2 + icon] + [reg1 + 4 * reg2 + icon] + [reg1 + 8 * reg2 + icon] The following indirections are valid address modes on arm64: [reg] [reg + icon] - [reg2 + reg1] - [reg2 + reg1 * natural-scale] + [reg1 + reg2] + [reg1 + reg2 * natural-scale] */ @@ -2448,6 +2448,11 @@ FOUND_AM: noway_assert(FitsIn(cns)); + if (rv1 == nullptr && rv2 == nullptr) + { + return false; + } + /* Success - return the various components to the caller */ *revPtr = rev; diff --git a/src/jit/gentree.h b/src/jit/gentree.h index 5badd06..1d52248 100644 --- a/src/jit/gentree.h +++ b/src/jit/gentree.h @@ -4165,6 +4165,7 @@ struct GenTreeAddrMode : public GenTreeOp GenTreeAddrMode(var_types type, GenTreePtr base, GenTreePtr index, unsigned scale, unsigned offset) : GenTreeOp(GT_LEA, type, base, index) { + assert(base != nullptr || index != nullptr); gtScale = scale; gtOffset = offset; } -- 2.7.4