Forgetting to include the redeemscript when invoking signrawtransactionwithkey used to give a useful error:

    $ bitcoin-cli -regtest signrawtransactionwithkey "02000000018a24833c36be23272080d6be8a53e36586b81e0ac447e1298ee58e18cc96bdee0100000000ffffffff0118246bee0000000017a914e139e3904e9e69ecbce87b0fcfb73b1b0e3b9e818700000000" '["cUJ7bUweEgENv4ixezsSyZa2uBJxR37iFLtCt18gSvkjpkj7CmMr"]'  '[{"txid":"eebd96cc188ee58e29e147c40a1eb88665e3538abed680202723be363c83248a","vout":1,"scriptPubKey":"0020f89f2138a58a2042310f297259ca8050bcaecd3a0f3c936edffb7e38e31d775a","amount":"40.00000000"}]'

With 0.17:

    error code: -3
    error message:
    Missing redeemScript

With master/0.18:

    {
      "hex": "02000000018a24833c36be23272080d6be8a53e36586b81e0ac447e1298ee58e18cc96bdee0100000000ffffffff0118246bee0000000017a914e139e3904e9e69ecbce87b0fcfb73b1b0e3b9e818700000000",
      "complete": false,
      "errors": [
        {
          "txid": "eebd96cc188ee58e29e147c40a1eb88665e3538abed680202723be363c83248a",
          "vout": 1,
          "witness": [
          ],
          "scriptSig": "",
          "sequence": 4294967295,
          "error": "Witness program was passed an empty witness"
        }
      ]
    }


<!--- What behavior did you expect? -->

<!--- What was the actual behavior (provide screenshots if the issue is GUI-related)? -->

<!--- How reliably can you reproduce the issue, what are the steps to do so? -->

<!-- What version of Bitcoin Core are you using, where did you get it (website, self-compiled, etc)? -->

<!-- What type of machine are you observing the error on (OS/CPU and disk type)? -->

<!-- For the GUI-related issue on Linux provide names and versions of a distro, a desktop environment and a graphical shell (if relevant). -->

<!-- Any extra information that might be useful in the debugging process. -->
<!--- This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred. -->

if (!destinations.insert(destination).second) {
                throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ") + name_);
            }
            CScript scriptPubKey = GetScriptForDestination(destination);
            CAmount nAmount = AmountFromValue(outputs[name_]);
            CTxOut out(nAmount, scriptPubKey);
            rawTx.vout.push_back(out);
        }
    }
    if (!rbf.isNull() && rawTx.vin.size() > 0 && rbfOptIn != SignalsOptInRBF(CTransaction(rawTx))) {
        throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter combination: Sequence number(s) contradict replaceable option");
    }
    return rawTx;
}
static void TxInErrorToJSON(const CTxIn& txin, UniValue& vErrorsRet, const std::string& strMessage)
{
    UniValue entry(UniValue::VOBJ);
    entry.pushKV("txid", txin.prevout.hash.ToString());
    entry.pushKV("vout", (uint64_t)txin.prevout.n);
    UniValue witness(UniValue::VARR);
    for (unsigned int i = 0; i < txin.scriptWitness.stack.size(); i++) {
        witness.push_back(HexStr(txin.scriptWitness.stack[i].begin(), txin.scriptWitness.stack[i].end()));
    }
    entry.pushKV("witness", witness);
    entry.pushKV("scriptSig", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()));
    entry.pushKV("sequence", (uint64_t)txin.nSequence);
    entry.pushKV("error", strMessage);
    vErrorsRet.push_back(entry);
}
UniValue SignTransaction(CMutableTransaction& mtx, const UniValue& prevTxsUnival, CBasicKeyStore* keystore, std::map<COutPoint, Coin>& coins, bool is_temp_keystore, const UniValue& hashType)