- Timestamp:
- Aug 22, 2017, 7:31:52 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 9aaac6e9
- Parents:
- fc56cdbf (diff), b3d413b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src/tests
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tests/.expect/32/KRfunctions.txt
rfc56cdbf r8135d4c 15 15 } 16 16 struct S { 17 17 int __i__i_1; 18 18 }; 19 19 static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1); … … 79 79 __attribute__ ((unused)) int (*___retval_f14__PA0A0i_1)[][((unsigned int )10)]; 80 80 } 81 int __f15__Fi_iii__1(int __a__i_1, int __b__i_1, int __c__i_1){ 82 __attribute__ ((unused)) int ___retval_f15__i_1; 83 } 81 84 const int __fred__FCi___1(){ 82 85 __attribute__ ((unused)) const int ___retval_fred__Ci_1; -
src/tests/.expect/64/KRfunctions.txt
rfc56cdbf r8135d4c 79 79 __attribute__ ((unused)) int (*___retval_f14__PA0A0i_1)[][((long unsigned int )10)]; 80 80 } 81 int __f15__Fi_iii__1(int __a__i_1, int __b__i_1, int __c__i_1){ 82 __attribute__ ((unused)) int ___retval_f15__i_1; 83 } 81 84 const int __fred__FCi___1(){ 82 85 __attribute__ ((unused)) const int ___retval_fred__Ci_1; -
src/tests/KRfunctions.c
rfc56cdbf r8135d4c 10 10 // Created On : Thu Feb 16 15:23:17 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 24 22:05:00201713 // Update Count : 312 // Last Modified On : Sun Aug 20 07:34:17 2017 13 // Update Count : 7 14 14 // 15 15 … … 37 37 int ((* f13( a, b, c ))[])[10] int a, * b, c[]; {} 38 38 int (((* f14( a, b, c ))[])[10]) int a, * b, c[]; {} 39 f15( a, b, c ) {} 39 40 40 41 const fred() { -
src/tests/except-0.c
rfc56cdbf r8135d4c 1 1 // Draft of tests for exception handling. 2 // Outdated: The integer constant exceptions need to be replaced with virtual 3 // exceptions for the new system. 2 4 3 5 // ERROR: exceptions do not interact with ^?{} properly. … … 5 7 #include <stdio.h> 6 8 #include <stdbool.h> 9 10 #include "except-mac.h" 11 TRIVIAL_EXCEPTION(yin) 12 TRIVIAL_EXCEPTION(yang) 13 TRIVIAL_EXCEPTION(zen) 14 7 15 8 16 // Local type to mark exits from scopes. (see ERROR) … … 21 29 22 30 23 // Local Exception Types and manual vtable types. 24 //#define TRIVIAL_EXCEPTION(name) //TRIVAL_EXCEPTION(yin) 25 struct yin; 26 struct yin_vtable { 27 struct exception_t_vtable const * parent; 28 size_t size; 29 void (*copy)(yin *this, yin * other); 30 void (*free)(yin *this); 31 const char (*msg)(yin *this); 32 }; 33 struct yin { 34 struct yin_vtable const * parent; 35 }; 36 void yin_msg(yin) { 37 return "in"; 38 } 39 yin_vtable _yin_vtable_instance = { 40 &_exception_t_vtable_instance, sizeof(yin), ?{}, ^?{}, yin_msg 41 } 42 43 44 void terminate(exception * except_value) { 31 // Mark throws: make sure to only pass in exception types. 32 forall(dtype T) 33 void terminate(T * except_value) { 45 34 signal_exit a = {"terminate function"}; 46 throw except_value;35 THROW(except_value); 47 36 printf("terminate returned\n"); 48 37 } 49 38 50 void resume(exception * except_value) { 39 forall(dtype T) 40 void resume(T * except_value) { 51 41 signal_exit a = {"resume function"}; 52 throwResume except_value;42 THROW_RESUME(except_value); 53 43 printf("resume returned\n"); 54 44 } … … 58 48 signal_exit a = {"bar function"}; 59 49 try { 60 terminate( 4);61 } catch ( 3) {62 printf("bar caught exception 3.\n");50 terminate(&(zen){}); 51 } catch (yin * error) { 52 printf("bar caught exception yin.\n"); 63 53 } 64 54 } … … 68 58 try { 69 59 bar(); 70 } catch ( 4) {71 printf("foo caught exception 4.\n");72 } catch ( 2) {73 printf("foo caught exception 2.\n");60 } catch (yang * error) { 61 printf("foo caught exception yang.\n"); 62 } catch (zen * error) { 63 printf("foo caught exception zen.\n"); 74 64 } 75 65 } … … 79 69 signal_exit a = {"beta function"}; 80 70 try { 81 resume(4); 82 } catchResume (3) { 83 printf("beta caught exception 3\n"); 71 zen x; 72 resume(&x); 73 } catchResume (yin * error) { 74 printf("beta caught exception yin\n"); 84 75 } 85 76 } … … 89 80 try { 90 81 beta(); 91 } catchResume ( 2) {92 printf("alpha caught exception 2\n");93 } catchResume ( 4) {94 printf("alpha caught exception 4\n");82 } catchResume (yang * error) { 83 printf("alpha caught exception yang\n"); 84 } catchResume (zen * error) { 85 printf("alpha caught exception zen\n"); 95 86 } 96 87 } … … 115 106 void fallback() { 116 107 try { 117 resume(2); 118 } catch (2) { 119 printf("fallback caught termination 2\n"); 108 zen x; 109 resume(&x); 110 } catch (zen * error) { 111 printf("fallback caught termination zen\n"); 120 112 } 121 113 } … … 125 117 signal_exit a = {"terminate_swap"}; 126 118 try { 127 terminate(2); 128 } catch (2) { 129 terminate(3); 119 yin x; 120 terminate(&x); 121 } catch (yin * error) { 122 yang y; 123 terminate(&y); 130 124 } 131 125 } … … 135 129 try { 136 130 terminate_swap(); 137 } catch ( 3) {138 printf("terminate_swapped caught exception 3\n");131 } catch (yang * error) { 132 printf("terminate_swapped caught exception yang\n"); 139 133 } 140 134 } … … 144 138 signal_exit a = {"resume_swap"}; 145 139 try { 146 resume(2); 147 } catchResume (2) { 148 resume(3); 140 yin x; 141 resume(&x); 142 } catchResume (yin * error) { 143 yang y; 144 resume(&y); 149 145 } 150 146 } … … 153 149 try { 154 150 resume_swap(); 155 } catchResume ( 3) {156 printf("resume_swapped caught exception 3\n");151 } catchResume (yang * error) { 152 printf("resume_swapped caught exception yang\n"); 157 153 } 158 154 } … … 162 158 try { 163 159 try { 164 terminate(2); 165 } catch (2) { 166 printf("reterminate 2 caught and " 167 "will rethrow exception 2\n"); 160 zen x; 161 terminate(&x); 162 } catch (zen * error) { 163 printf("reterminate zen caught and " 164 "will rethrow exception zen\n"); 168 165 throw; 169 166 } 170 } catch ( 2) {171 printf("reterminate 1 caught exception 2\n");167 } catch (zen * error) { 168 printf("reterminate 1 caught exception zen\n"); 172 169 } 173 170 } … … 177 174 try { 178 175 try { 179 resume(2); 180 } catchResume (2) { 181 printf("reresume 2 caught and rethrows exception 2\n"); 176 zen x; 177 resume(&x); 178 } catchResume (zen * error) { 179 printf("reresume zen caught and rethrows exception zen\n"); 182 180 throwResume; 183 181 } 184 } catchResume ( 2) {185 printf("reresume 1 caught exception 2\n");182 } catchResume (zen * error) { 183 printf("reresume 1 caught exception zen\n"); 186 184 } 187 185 } … … 191 189 // terminate block, call resume 192 190 try { 193 resume(3); 194 } catch (3) { 195 printf("fum caught exception 3\n"); 191 zen x; 192 resume(&x); 193 } catch (zen * error) { 194 printf("fum caught exception zen\n"); 196 195 } 197 196 } … … 200 199 // resume block, call terminate 201 200 try { 202 terminate(3); 203 } catchResume (3) { 204 printf("foe caught exception 3\n"); 201 zen y; 202 terminate(&y); 203 } catchResume (zen * error) { 204 printf("foe caught exception zen\n"); 205 205 } 206 206 } … … 210 210 try { 211 211 foe(); 212 } catch ( 3) {213 printf("fy caught exception 3\n");212 } catch (zen * error) { 213 printf("fy caught exception zen\n"); 214 214 fum(); 215 215 } … … 220 220 try { 221 221 fy(); 222 } catchResume ( 3) {223 printf("fee caught exception 3\n");222 } catchResume (zen * error) { 223 printf("fee caught exception zen\n"); 224 224 } 225 225 } … … 240 240 reresume(); printf("\n"); 241 241 fee(); printf("\n"); 242 242 243 // Uncaught termination test. 243 terminate(7); 244 } 244 printf("Throw uncaught.\n"); 245 yang z; 246 terminate(&z); 247 } -
src/tests/except-1.c
rfc56cdbf r8135d4c 1 1 // Draft memory management test. (remember -fexceptions) 2 // Outdated: The integer constant exceptions need to be replaced with virtual 3 // exceptions for the new system. 2 4 3 5 #include <stdio.h> 6 7 #include "except-mac.h" 8 TRIVIAL_EXCEPTION(yin) 9 TRIVIAL_EXCEPTION(yang) 4 10 5 11 int main() 6 12 { 7 13 try { 8 throw 3; 14 yin a; 15 THROW(&a); 9 16 } 10 catch( 3) {17 catch( yin * err ) { 11 18 printf("First Caught\n"); 12 19 try { 13 throw 4; 20 yang b; 21 THROW(&b); 14 22 } 15 catch( 4) {23 catch( yang * err ) { 16 24 printf("Both Caught\n"); 17 25 } … … 21 29 try { 22 30 try { 23 throw 2; 31 yang c; 32 THROW(&c); 24 33 } 25 catch( 2) {34 catch( yang * err ) { 26 35 printf("First Catch and rethrow\n"); 27 36 throw; 28 37 } 29 38 } 30 catch( 2) {39 catch( yang * err ) { 31 40 printf("Second Catch\n"); 32 41 } … … 35 44 try { 36 45 try { 37 throw 5; 46 yin d; 47 THROW(&d); 38 48 } 39 catch( 5) {49 catch( yin * err ) { 40 50 printf("Throw before cleanup\n"); 41 throw 6; 51 yang e; 52 THROW(&e); 42 53 } 43 54 } 44 catch( 6) {55 catch( yang * err ) { 45 56 printf("Catch after cleanup\n"); 46 57 } … … 49 60 try { 50 61 try { 51 throw 7; 62 yin f; 63 THROW(&f); 52 64 } 53 catch( 7) {65 catch( yin * err ) { 54 66 printf("Caught initial throw.\n"); 55 67 try { 56 throw 8; 68 yang g; 69 THROW(&g); 57 70 } 58 catch( 8) {71 catch( yang * err ) { 59 72 printf("Caught intermediate throw.\n"); 60 73 } … … 62 75 } 63 76 } 64 catch( 7) {77 catch( yin * err ) { 65 78 printf("Caught final throw.\n"); 66 79 } -
src/tests/except-2.c
rfc56cdbf r8135d4c 2 2 3 3 4 #include <string.h> 4 #include <stdlib> 5 #include "except-mac.h" 5 6 6 // Local Exception Types and manual vtable types.7 #define BASE_EXCEPT __cfaehm__base_exception_t8 #define TABLE(name) name##_vtable9 #define INSTANCE(name) _##name##_vtable_instance10 #define TRIVIAL_EXCEPTION(name) \11 struct name; \12 struct TABLE(name) { \13 struct __cfaehm__base_exception_t_vtable const * parent; \14 size_t size; \15 void (*copy)(name *this, name * other); \16 void (*free)(name *this); \17 const char * (*msg)(name *this); \18 }; \19 extern TABLE(name) INSTANCE(name); \20 struct name { \21 struct TABLE(name) const * virtual_table; \22 }; \23 const char * name##_msg(name * this) { \24 return #name; \25 } \26 void name##_copy(name * this, name * other) { \27 this->virtual_table = other->virtual_table; \28 } \29 TABLE(name) INSTANCE(name) @= { \30 .parent : &INSTANCE(__cfaehm__base_exception_t), \31 .size : sizeof(name), .copy : name##_copy, \32 .free : ^?{}, .msg : name##_msg \33 }; \34 void ?{}(name * this) { \35 this->virtual_table = &INSTANCE(name); \36 }37 7 TRIVIAL_EXCEPTION(yin) 38 8 TRIVIAL_EXCEPTION(yang) … … 40 10 struct num_error; 41 11 struct num_error_vtable { 42 struct exception_t_vtableconst * parent;12 struct TABLE(BASE_EXCEPT) const * parent; 43 13 size_t size; 44 14 void (*copy)(num_error *this, num_error * other); … … 48 18 }; 49 19 extern num_error_vtable INSTANCE(num_error); 20 50 21 struct num_error { 51 22 struct num_error_vtable const * virtual_table; … … 53 24 int num; 54 25 }; 26 55 27 void num_error_msg(num_error * this) { 56 28 if ( ! this->msg ) { 57 const char * base = "Num Error with code: X"; 58 this->msg = strdup( base ); 29 static const char * base = "Num Error with code: X"; 30 this->msg = malloc(22); 31 for (int i = 0 ; (this->msg[i] = base[i]) ; ++i); 59 32 } 60 33 this->msg[21] = '0' + this->num; … … 62 35 } 63 36 void ?{}(num_error * this, int num) { 64 this->virtual_table = & _num_error_vtable_instance;37 this->virtual_table = &INSTANCE(num_error); 65 38 this->msg = 0; 66 39 this->num = num; … … 78 51 } 79 52 num_error_vtable _num_error_vtable_instance @= { 80 & ___cfaehm__base_exception_t_vtable_instance,53 &INSTANCE(BASE_EXCEPT), 81 54 sizeof(num_error), ?{}, ^?{}, 82 55 num_error_msg, num_error_code … … 88 61 try { 89 62 yin black; 90 throw (BASE_EXCEPT *)&black;91 } catch ( yin * error ) {63 THROW(&black); 64 } catch ( yin * error ) { 92 65 printf("throw yin caught.\n"); 93 66 } … … 95 68 try { 96 69 yang white; 97 throwResume (BASE_EXCEPT *)&white;70 THROW_RESUME(&white); 98 71 printf("> throwResume returned.\n"); 99 } catchResume ( yang * error ) {72 } catchResume ( yang * error ) { 100 73 printf("throwResume yang caught <"); 101 74 } 102 75 103 /* Conditional catches are still a work in progress.104 76 try { 105 77 num_error x = { 2 }; 106 throw (struct exception_t *)&x;78 THROW(&x); 107 79 } 108 catch (num_error * error 0 ; 3 == error0->virtual_table->code( error0) ) {109 printf("exception at %p\n", error 0);80 catch (num_error * error ; 3 == error->virtual_table->code( error ) ) { 81 printf("exception at %p\n", error ); 110 82 printf("Should not be printed.\n"); 111 83 } 112 catch (num_error * error 1 ; 2 == error1->virtual_table->code( error1) ) {84 catch (num_error * error ; 2 == error->virtual_table->code( error ) ) { 113 85 printf("Should be printed.\n"); 114 } */86 } 115 87 } 116 88
Note: See TracChangeset
for help on using the changeset viewer.