diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 7264aecaf..0de86bb27 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -407,6 +407,8 @@ bool isTemporary(bool cpp, const Token* tok, const Library* library, bool unknow const Token* branchTok = tok->astOperand2(); if (!branchTok->astOperand1()->valueType()) return false; + if (!branchTok->astOperand2()->valueType()) + return false; return !branchTok->astOperand1()->valueType()->isTypeEqual(branchTok->astOperand2()->valueType()); } if (Token::simpleMatch(tok, "(") && tok->astOperand1() && diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 2efdb20d0..3ddc8325b 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -3733,6 +3733,14 @@ private: "}\n", true); ASSERT_EQUALS("", errout.str()); + + // #11442 + check("const std::string& f(const P< std::string >& value) {\n" + " static const std::string empty;\n" + " return value.get() == nullptr ? empty : *value;\n" + "}\n", + true); + ASSERT_EQUALS("", errout.str()); } void danglingLifetimeBorrowedMembers()