4 void spsc_queue<T>::enqueue(T data)
6 node* n = new node (data);
7 // XXX-injection-#1: Weaken the parameter "memory_order_release" to
8 // "memory_order_relaxed", run "make" to recompile, and then run:
9 // "./run.sh ./spsc-bugfix/testcase1 -m2 -y -u3 -tSPEC"
10 /********** Detected Correctness **********/
11 //head($)->next.store(n, std::memory_order_release);
12 head->next.store(n, std::memory_order_release);
13 /** @OPDefine: true */
20 T spsc_queue<T>::dequeue()
22 T data = try_dequeue();
38 T spsc_queue<T>::try_dequeue()
42 // XXX-injection-#2: Weaken the parameter "memory_order_acquire" to
43 // "memory_order_relaxed", run "make" to recompile, and then run:
44 // "./run.sh ./spsc-bugfix/testcase1 -m2 -y -u3 -tSPEC"
45 /********** Detected Correctness **********/
46 node* n = t->next.load(std::memory_order_acquire);
47 /** @OPClearDefine: true */
50 //T data = n->data($);
57 /** @DeclareState: IntList *q; */
59 /** @Transition: STATE(q)->push_back(data); */
60 void enqueue(spsc_queue<int> *q, int data) {
64 /** @PreCondition: return STATE(q)->empty() ? !C_RET : STATE(q)->front() == C_RET;
65 @Transition: if (!C_RET) STATE(q)->pop_front(); */
66 int dequeue(spsc_queue<int> *q) {