Let StackFrameContext represent if the call expr is evaluated as lvalue.
This is required for supporting const reference to temporary objects.
llvm-svn: 120093
diff --git a/clang/lib/Checker/Environment.cpp b/clang/lib/Checker/Environment.cpp
index 914070e..0bbe40d 100644
--- a/clang/lib/Checker/Environment.cpp
+++ b/clang/lib/Checker/Environment.cpp
@@ -65,11 +65,22 @@
if (CT->isVoidType())
return UnknownVal();
+ if (C->getCastKind() == CK_NoOp) {
+ E = C->getSubExpr();
+ continue;
+ }
break;
}
- // Handle all other Stmt* using a lookup.
+ case Stmt::CXXExprWithTemporariesClass:
+ E = cast<CXXExprWithTemporaries>(E)->getSubExpr();
+ continue;
+ case Stmt::CXXBindTemporaryExprClass:
+ E = cast<CXXBindTemporaryExpr>(E)->getSubExpr();
+ continue;
+
+ // Handle all other Stmt* using a lookup.
default:
break;
};