Skip to content

Commit

Permalink
Handle variadics properly in opt_foldable
Browse files Browse the repository at this point in the history
Summary: HHBBC can generate FCallBuiltins where the variadic parameter is not a container, so have opt_foldable refuse to optimize functions with type mismatches.

Reviewed By: markw65

Differential Revision: D13901514

fbshipit-source-id: 215e777e00dea6a2d254a4b6562a2052581a11b1
  • Loading branch information
paulbiss authored and hhvm-bot committed Feb 3, 2019
1 parent d64c577 commit 7a397fd
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions hphp/runtime/vm/jit/irgen-builtin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -653,12 +653,15 @@ SSATmp* opt_foldable(IRGS& env,
if (numNonDefaultArgs > func->numNonVariadicParams()) {
assertx(params.size() == func->numParams());
auto const variadic = params.info.back().value;
if (!variadic->type().hasConstVal()) return nullptr;
auto const ty = RuntimeOption::EvalHackArrDVArrs ? TVec : TArr;
if (!variadic->type().hasConstVal(ty)) return nullptr;

variadicArgs = variadic->variantVal().asCArrRef().get();
numVariadicArgs = variadicArgs->size();
assertx(variadicArgs->isStatic() &&
(!numVariadicArgs || variadicArgs->isVecOrVArray()));

if (numVariadicArgs && !variadicArgs->isVecOrVArray()) return nullptr;

assertx(variadicArgs->isStatic());
numNonDefaultArgs = func->numNonVariadicParams();
}

Expand Down

0 comments on commit 7a397fd

Please sign in to comment.