projects
/
c11tester.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4c56d7b
)
fix a bug about get_reads_from_value
author
weiyu
<weiyuluo1232@gmail.com>
Mon, 12 Aug 2019 22:27:52 +0000
(15:27 -0700)
committer
weiyu
<weiyuluo1232@gmail.com>
Mon, 12 Aug 2019 22:27:52 +0000
(15:27 -0700)
action.cc
patch
|
blob
|
history
action.h
patch
|
blob
|
history
diff --git
a/action.cc
b/action.cc
index b9df297ebaf18197d5c9adc2922fcbb4c3d83835..b654a35422a6cb3533a3236159d9048f5ab661a7 100644
(file)
--- a/
action.cc
+++ b/
action.cc
@@
-40,6
+40,7
@@
ModelAction::ModelAction(action_type_t type, memory_order order, void *loc,
cv(NULL),
rf_cv(NULL),
value(value),
cv(NULL),
rf_cv(NULL),
value(value),
+ reads_from_value(VALUE_NONE),
type(type),
order(order),
original_order(order),
type(type),
order(order),
original_order(order),
@@
-72,6
+73,7
@@
ModelAction::ModelAction(action_type_t type, memory_order order, uint64_t value,
cv(NULL),
rf_cv(NULL),
value(value),
cv(NULL),
rf_cv(NULL),
value(value),
+ reads_from_value(VALUE_NONE),
type(type),
order(order),
original_order(order),
type(type),
order(order),
original_order(order),
@@
-103,6
+105,7
@@
ModelAction::ModelAction(action_type_t type, memory_order order, void *loc,
cv(NULL),
rf_cv(NULL),
value(value),
cv(NULL),
rf_cv(NULL),
value(value),
+ reads_from_value(VALUE_NONE),
type(type),
order(order),
original_order(order),
type(type),
order(order),
original_order(order),
@@
-138,6
+141,7
@@
ModelAction::ModelAction(action_type_t type, const char * position, memory_order
cv(NULL),
rf_cv(NULL),
value(value),
cv(NULL),
rf_cv(NULL),
value(value),
+ reads_from_value(VALUE_NONE),
type(type),
order(order),
original_order(order),
type(type),
order(order),
original_order(order),
@@
-174,6
+178,7
@@
ModelAction::ModelAction(action_type_t type, const char * position, memory_order
cv(NULL),
rf_cv(NULL),
value(value),
cv(NULL),
rf_cv(NULL),
value(value),
+ reads_from_value(VALUE_NONE),
type(type),
order(order),
original_order(order),
type(type),
order(order),
original_order(order),
@@
-184,7
+189,6
@@
ModelAction::ModelAction(action_type_t type, const char * position, memory_order
Thread *t = thread ? thread : thread_current();
this->tid = t->get_id();
Thread *t = thread ? thread : thread_current();
this->tid = t->get_id();
- // model_print("position: %s\n", position);
}
}
@@
-572,8
+576,12
@@
void ModelAction::set_try_lock(bool obtainedlock)
uint64_t ModelAction::get_reads_from_value() const
{
ASSERT(is_read());
uint64_t ModelAction::get_reads_from_value() const
{
ASSERT(is_read());
- if (reads_from)
- return reads_from->get_write_value();
+ if (reads_from) {
+ if (reads_from->is_uninitialized())
+ return reads_from_value;
+ else
+ return reads_from->get_write_value();
+ }
return VALUE_NONE; // Only for new actions with no reads-from
}
return VALUE_NONE; // Only for new actions with no reads-from
}
@@
-624,12
+632,12
@@
void ModelAction::set_read_from(ModelAction *act)
ASSERT(act);
reads_from = act;
ASSERT(act);
reads_from = act;
-
if (act->is_uninitialized()) { // WL
uint64_t val = *((uint64_t *) location);
ModelAction * act_uninitialized = (ModelAction *)act;
act_uninitialized->set_value(val);
reads_from = act_uninitialized;
if (act->is_uninitialized()) { // WL
uint64_t val = *((uint64_t *) location);
ModelAction * act_uninitialized = (ModelAction *)act;
act_uninitialized->set_value(val);
reads_from = act_uninitialized;
+ reads_from_value = val;
// disabled by WL, because LLVM IR is unable to detect atomic init
/* model->assert_bug("May read from uninitialized atomic:\n"
// disabled by WL, because LLVM IR is unable to detect atomic init
/* model->assert_bug("May read from uninitialized atomic:\n"
diff --git
a/action.h
b/action.h
index 00289355be9db60dd14c4cec2eace3381ac2e79a..fafa27cd1f4e68cee555917005f6e06af366c3cc 100644
(file)
--- a/
action.h
+++ b/
action.h
@@
-224,6
+224,10
@@
private:
/** @brief The value written (for write or RMW; undefined for read) */
uint64_t value;
/** @brief The value written (for write or RMW; undefined for read) */
uint64_t value;
+ /** @brief The value this action read from (only used when reads_from is an
+ * uninitialized action) */
+ uint64_t reads_from_value;
+
/** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
action_type type;
/** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
action_type type;