diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-06-25 23:51:38 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-06-25 23:51:38 +0000 |
commit | 4d3b1affd5e32a7db18745f72ca16917458c36b0 (patch) | |
tree | 44f6e26188054b04d7090de73d87574d74c98acf /lib/Checker/GRExprEngine.cpp | |
parent | f683976830768f207ad70150d14e08b04fe532be (diff) |
Relax assertion since non-pod C++ classes are not aggregates, but still can appear in this context.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106919 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/GRExprEngine.cpp')
-rw-r--r-- | lib/Checker/GRExprEngine.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/Checker/GRExprEngine.cpp b/lib/Checker/GRExprEngine.cpp index 4c2512dfa4..0519c0f79c 100644 --- a/lib/Checker/GRExprEngine.cpp +++ b/lib/Checker/GRExprEngine.cpp @@ -1059,16 +1059,21 @@ void GRExprEngine::VisitLValue(Expr* Ex, ExplodedNode* Pred, CreateCXXTemporaryObject(Ex, Pred, Dst); return; - default: + default: { // Arbitrary subexpressions can return aggregate temporaries that // can be used in a lvalue context. We need to enhance our support // of such temporaries in both the environment and the store, so right // now we just do a regular visit. - assert ((Ex->getType()->isAggregateType()) && - "Other kinds of expressions with non-aggregate/union types do" - " not have lvalues."); + + // NOTE: Do not use 'isAggregateType()' here as CXXRecordDecls that + // are non-pod are not aggregates. + assert ((isa<RecordType>(Ex->getType().getDesugaredType()) || + isa<ArrayType>(Ex->getType().getDesugaredType())) && + "Other kinds of expressions with non-aggregate/union/class types" + " do not have lvalues."); Visit(Ex, Pred, Dst); + } } } |