summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-08-09 17:37:10 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-08-09 17:37:10 +0800
commit657a5a99edf0722c9db5956ca9d42db65c9e683e (patch)
treee6e80df4812cc8c66a69c53882b8d4bdf319dfed /tools
parent1f94832ee98d0a6000b3fe7128829b31dc172bb0 (diff)
downloadmrust-657a5a99edf0722c9db5956ca9d42db65c9e683e.tar.gz
Standalone MIRI - More thread hackery
Diffstat (limited to 'tools')
-rw-r--r--tools/standalone_miri/lex.cpp4
-rw-r--r--tools/standalone_miri/miri.cpp5
-rw-r--r--tools/standalone_miri/module_tree.cpp2
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;
}