diff options
author | Nguyễn Gia Phong <cnx@loang.net> | 2023-07-31 15:22:48 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <cnx@loang.net> | 2023-07-31 15:22:48 +0900 |
commit | 4062c1afe336c8ff1610950839ff36a7ff3829a8 (patch) | |
tree | 031aeb35cf881a35eb10b9500e1c31857373d5ff | |
parent | 066a6031c1ab72991e872bad8b48eb258a32acb0 (diff) | |
download | klee-4062c1afe336c8ff1610950839ff36a7ff3829a8.tar.gz |
Support 1-byte metavariables
-rw-r--r-- | lib/Core/ExecutionState.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/Core/ExecutionState.cpp b/lib/Core/ExecutionState.cpp index f635c40c..163d82e9 100644 --- a/lib/Core/ExecutionState.cpp +++ b/lib/Core/ExecutionState.cpp @@ -386,13 +386,18 @@ std::string extractMetaEnvVar(ref<Expr> e) { if (constant->isFalse()) // the else branch return extractMetaEnvVar(eq->right); - if (eq->right.get()->getKind() != Expr::Concat) - return ""; - const auto concat = dyn_cast<ConcatExpr>(eq->right.get()); - if (concat->getLeft().get()->getKind() != Expr::Read) - return ""; + ReadExpr* read; + if (eq->right.get()->getKind() == Expr::Read) { + read = dyn_cast<ReadExpr>(eq->right.get()); + } else { + if (eq->right.get()->getKind() != Expr::Concat) + return ""; + const auto concat = dyn_cast<ConcatExpr>(eq->right.get()); + if (concat->getLeft().get()->getKind() != Expr::Read) + return ""; + read = dyn_cast<ReadExpr>(concat->getLeft().get()); + } - const auto read = dyn_cast<ReadExpr>(concat->getLeft().get()); const auto& name = read->updates.root->name; // string::starts_with requires C++20 if (name.substr(0, 8) != "__choose") |