source: tests/exceptions/cancel/thread.cfa@ cf444b6

ADT ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since cf444b6 was 8edbe40, checked in by Andrew Beach <ajbeach@…>, 4 years ago

SomeThreadCancelled -> ThreadCancelled: thread cancellations carry type information again.

  • Property mode set to 100644
File size: 992 bytes
Line 
1// Try cancelling a thread.
2
3#include <thread.hfa>
4#include <exception.hfa>
5
6EHM_EXCEPTION(internal_error)();
7EHM_VIRTUAL_TABLE(internal_error, internal_vt);
8
9thread WillCancel {};
10
11const char * msg(ThreadCancelled(WillCancel) * this) {
12 return "ThreadCancelled(WillCancel)";
13}
14
15void main(WillCancel &) {
16 printf("1");
17 cancel_stack((internal_error){&internal_vt});
18 printf("!");
19}
20
21void explicit() {
22 try {
23 printf("0");
24 WillCancel cancel;
25 printf("1");
26 join(cancel);
27 printf("4");
28 } catchResume (ThreadCancelled(WillCancel) * error) {
29 printf("2");
30 if ((virtual internal_error *)error->the_exception) {
31 printf("3");
32 }
33 }
34 printf("5\n");
35}
36
37void implicit() {
38 try {
39 {
40 printf("0");
41 WillCancel cancel;
42 printf("1");
43 }
44 printf("4");
45 } catchResume (ThreadCancelled(WillCancel) * error) {
46 printf("2");
47 if ((virtual internal_error *)error->the_exception) {
48 printf("3");
49 }
50 }
51 printf("5\n");
52}
53
54int main(int argc, char * argv[]) {
55 explicit();
56 implicit();
57}
Note: See TracBrowser for help on using the repository browser.