diff options
Diffstat (limited to 'src/jit/lclvars.cpp')
-rw-r--r-- | src/jit/lclvars.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/jit/lclvars.cpp b/src/jit/lclvars.cpp index 765a2eee3f..866b7117ce 100644 --- a/src/jit/lclvars.cpp +++ b/src/jit/lclvars.cpp @@ -1626,6 +1626,18 @@ void Compiler::lvaCanPromoteStructType(CORINFO_CLASS_HANDLE typeHnd, // natural boundary. if (fieldSize == 0 || fieldSize != TARGET_POINTER_SIZE || varTypeIsFloating(fieldVarType)) { + JITDUMP("Promotion blocked: struct contains struct field with one field," + " but that field has invalid size or type"); + return; + } + + // Insist this wrapped field occupy all of its parent storage. + unsigned innerStructSize = info.compCompHnd->getClassSize(pFieldInfo->fldTypeHnd); + + if (fieldSize != innerStructSize) + { + JITDUMP("Promotion blocked: struct contains struct field with one field," + " but that field is not the same size as its parent."); return; } |