diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-08-09 17:37:10 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-08-09 17:37:10 +0800 |
commit | 657a5a99edf0722c9db5956ca9d42db65c9e683e (patch) | |
tree | e6e80df4812cc8c66a69c53882b8d4bdf319dfed /tools | |
parent | 1f94832ee98d0a6000b3fe7128829b31dc172bb0 (diff) | |
download | mrust-657a5a99edf0722c9db5956ca9d42db65c9e683e.tar.gz |
Standalone MIRI - More thread hackery
Diffstat (limited to 'tools')
-rw-r--r-- | tools/standalone_miri/lex.cpp | 4 | ||||
-rw-r--r-- | tools/standalone_miri/miri.cpp | 5 | ||||
-rw-r--r-- | tools/standalone_miri/module_tree.cpp | 2 |
3 files changed, 9 insertions, 2 deletions
diff --git a/tools/standalone_miri/lex.cpp b/tools/standalone_miri/lex.cpp index 07427bde..79e94224 100644 --- a/tools/standalone_miri/lex.cpp +++ b/tools/standalone_miri/lex.cpp @@ -7,6 +7,8 @@ */ #include "lex.hpp" #include <cctype> +#include <sstream> +#include "debug.hpp" #include <iostream> bool Token::operator==(TokenClass tc) const @@ -25,7 +27,7 @@ bool Token::operator==(const char* s) const uint64_t Token::integer() const { if( this->type != TokenClass::Integer ) - throw ""; + throw ::std::runtime_error(FMT_STRING("Expected interger, got " << *this)); return this->numbers.int_val; } double Token::real() const diff --git a/tools/standalone_miri/miri.cpp b/tools/standalone_miri/miri.cpp index c8326283..7407baf7 100644 --- a/tools/standalone_miri/miri.cpp +++ b/tools/standalone_miri/miri.cpp @@ -2272,6 +2272,11 @@ bool InterpreterThread::call_extern(Value& rv, const ::std::string& link_name, c rv = Value::new_i32(EPERM); } } + else if( link_name == "pthread_detach" ) + { + // "detach" - Prevent the need to explitly join a thread + rv = Value::new_i32(0); + } else if( link_name == "pthread_cond_init" || link_name == "pthread_cond_destroy" ) { rv = Value::new_i32(0); diff --git a/tools/standalone_miri/module_tree.cpp b/tools/standalone_miri/module_tree.cpp index f6b20fae..71a545fa 100644 --- a/tools/standalone_miri/module_tree.cpp +++ b/tools/standalone_miri/module_tree.cpp @@ -884,7 +884,7 @@ bool Parser::parse_one() ::std::vector<unsigned> targets; while(lex.next() != '{') { - targets.push_back( static_cast<unsigned>(lex.consume().integer()) ); + targets.push_back( static_cast<unsigned>(lex.check_consume(TokenClass::Integer).integer()) ); if( !lex.consume_if(',') ) break; } |