00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include "stdio.h"
00026
#include "nt.h"
00027
#include "ntrtl.h"
00028
#include "setjmpex.h"
00029
00030
#include "float.h"
00031
00032
00033
00034
00035
00036
00037
00038 #define BLUE 0
00039 #define RED 1
00040
00041
00042
00043
00044
00045
VOID
00046
addtwo (
00047 IN LONG First,
00048 IN LONG Second,
00049 IN PLONG Place
00050 );
00051
00052
VOID
00053
bar1 (
00054 IN NTSTATUS Status,
00055 IN PLONG Counter
00056 );
00057
00058
VOID
00059
bar2 (
00060 IN PLONG BlackHole,
00061 IN PLONG BadAddress,
00062 IN PLONG Counter
00063 );
00064
00065
VOID
00066
dojump (
00067 IN jmp_buf JumpBuffer,
00068 IN PLONG Counter
00069 );
00070
00071 LONG
00072
Echo(
00073 IN LONG Value
00074 );
00075
00076
VOID
00077
eret (
00078 IN NTSTATUS Status,
00079 IN PLONG Counter
00080 );
00081
00082
VOID
00083
except1 (
00084 IN PLONG Counter
00085 );
00086
00087 ULONG
00088
except2 (
00089 IN PEXCEPTION_POINTERS ExceptionPointers,
00090 IN PLONG Counter
00091 );
00092
00093 ULONG
00094
except3 (
00095 IN PEXCEPTION_POINTERS ExceptionPointers,
00096 IN PLONG Counter
00097 );
00098
00099
VOID
00100
foo1 (
00101 IN NTSTATUS Status
00102 );
00103
00104
VOID
00105
foo2 (
00106 IN PLONG BlackHole,
00107 IN PLONG BadAddress
00108 );
00109
00110
VOID
00111
fret (
00112 IN PLONG Counter
00113 );
00114
00115 BOOLEAN
00116
Tkm (
00117 VOID
00118 );
00119
00120
VOID
00121
Test61Part2 (
00122 IN OUT PULONG Counter
00123 );
00124
00125
VOID
00126
PerformFpTest(
00127 VOID
00128 );
00129
00130
double
00131
SquareDouble (
00132 IN
double op
00133 );
00134
00135
VOID
00136
SquareDouble17E300 (
00137 OUT PVOID ans
00138 );
00139
00140
00141
VOID
00142 __cdecl
00143 main(
00144
int argc,
00145
char *argv[]
00146 )
00147
00148 {
00149
00150 PLONG BadAddress;
00151 PCHAR BadByte;
00152 PLONG BlackHole;
00153 ULONG Index1;
00154 ULONG Index2 =
RED;
00155 jmp_buf JumpBuffer;
00156 LONG Counter;
00157 EXCEPTION_RECORD ExceptionRecord;
00158
double doubleresult;
00159
00160
00161
00162
00163
00164 printf(
"Start of exception test\n");
00165
00166
00167
00168
00169
00170 ExceptionRecord.ExceptionCode = STATUS_INTEGER_OVERFLOW;
00171 ExceptionRecord.ExceptionFlags = 0;
00172 ExceptionRecord.ExceptionRecord =
NULL;
00173 ExceptionRecord.NumberParameters = 0;
00174
00175
00176
00177
00178
00179 BadAddress = (PLONG)
NULL;
00180 BadByte = (PCHAR)
NULL;
00181 BadByte += 1;
00182 BlackHole = &Counter;
00183
00184
00185
00186
00187
00188 printf(
" test1...");
00189 Counter = 0;
00190
try {
00191 Counter += 1;
00192
00193 } finally {
00194
if (abnormal_termination() ==
FALSE) {
00195 Counter += 1;
00196 }
00197 }
00198
00199
if (Counter != 2) {
00200 printf(
"failed, count = %d\n", Counter);
00201
00202 }
else {
00203 printf(
"succeeded\n");
00204 }
00205
00206
00207
00208
00209
00210
00211 printf(
" test2...");
00212 Counter = 0;
00213
try {
00214 Counter += 1;
00215
00216 } except (Counter) {
00217 Counter += 1;
00218 }
00219
00220
if (Counter != 1) {
00221 printf(
"failed, count = %d\n", Counter);
00222
00223 }
else {
00224 printf(
"succeeded\n");
00225 }
00226
00227
00228
00229
00230
00231
00232 printf(
" test3...");
00233 Counter = 0;
00234
try {
00235 Counter -= 1;
00236
RtlRaiseException(&ExceptionRecord);
00237
00238 } except (Counter) {
00239 Counter -= 1;
00240 }
00241
00242
if (Counter != - 1) {
00243 printf(
"failed, count = %d\n", Counter);
00244
00245 }
else {
00246 printf(
"succeeded\n");
00247 }
00248
00249
00250
00251
00252
00253 printf(
" test4...");
00254 Counter = 0;
00255
try {
00256 Counter += 1;
00257
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
00258
00259 } except (Counter) {
00260 Counter += 1;
00261 }
00262
00263
if (Counter != 2) {
00264 printf(
"failed, count = %d\n", Counter);
00265
00266 }
else {
00267 printf(
"succeeded\n");
00268 }
00269
00270
00271
00272
00273
00274 printf(
" test5...");
00275 Counter = 0;
00276
try {
00277 Counter += 1;
00278 *BlackHole += *BadAddress;
00279
00280 } except (Counter) {
00281 Counter += 1;
00282 }
00283
00284
if (Counter != 2) {
00285 printf(
"failed, count = %d\n", Counter);
00286
00287 }
else {
00288 printf(
"succeeded\n");
00289 }
00290
00291
00292
00293
00294
00295
00296 printf(
" test6...");
00297 Counter = 0;
00298
try {
00299
try {
00300 Counter += 1;
00301
RtlRaiseException(&ExceptionRecord);
00302
00303 } finally {
00304
if (abnormal_termination() !=
FALSE) {
00305 Counter += 1;
00306 }
00307 }
00308
00309 } except (Counter) {
00310
if (Counter == 2) {
00311 Counter += 1;
00312 }
00313 }
00314
00315
if (Counter != 3) {
00316 printf(
"failed, count = %d\n", Counter);
00317
00318 }
else {
00319 printf(
"succeeded\n");
00320 }
00321
00322
00323
00324
00325
00326
00327 printf(
" test7...");
00328 Counter = 0;
00329
try {
00330
try {
00331 Counter += 1;
00332 *BlackHole += *BadAddress;
00333
00334 } finally {
00335
if (abnormal_termination() !=
FALSE) {
00336 Counter += 1;
00337 }
00338 }
00339
00340 } except (Counter) {
00341
if (Counter == 2) {
00342 Counter += 1;
00343 }
00344 }
00345
00346
if (Counter != 3) {
00347 printf(
"failed, count = %d\n", Counter);
00348
00349 }
else {
00350 printf(
"succeeded\n");
00351 }
00352
00353
00354
00355
00356
00357 printf(
" test8...");
00358 Counter = 0;
00359
try {
00360 Counter += 1;
00361
foo1(STATUS_ACCESS_VIOLATION);
00362
00363 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00364
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00365 Counter += 1;
00366 }
00367
00368
if (Counter != 2) {
00369 printf(
"failed, count = %d\n", Counter);
00370
00371 }
else {
00372 printf(
"succeeded\n");
00373 }
00374
00375
00376
00377
00378
00379 printf(
" test9...");
00380 Counter = 0;
00381
try {
00382 Counter += 1;
00383
foo2(BlackHole, BadAddress);
00384
00385 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00386
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00387 Counter += 1;
00388 }
00389
00390
if (Counter != 2) {
00391 printf(
"failed, count = %d\n", Counter);
00392
00393 }
else {
00394 printf(
"succeeded\n");
00395 }
00396
00397
00398
00399
00400
00401
00402
00403 printf(
" test10...");
00404 Counter = 0;
00405
try {
00406
bar1(STATUS_ACCESS_VIOLATION, &Counter);
00407
00408 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00409
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00410 Counter -= 1;
00411 }
00412
00413
if (Counter != 98) {
00414 printf(
"failed, count = %d\n", Counter);
00415
00416 }
else {
00417 printf(
"succeeded\n");
00418 }
00419
00420
00421
00422
00423
00424
00425
00426 printf(
" test11...");
00427 Counter = 0;
00428
try {
00429
bar2(BlackHole, BadAddress, &Counter);
00430
00431 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00432
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00433 Counter -= 1;
00434 }
00435
00436
if (Counter != 98) {
00437 printf(
"failed, count = %d\n", Counter);
00438
00439 }
else {
00440 printf(
"succeeded\n");
00441 }
00442
00443
00444
00445
00446
00447 printf(
" test12...");
00448 Counter = 0;
00449
try {
00450
foo1(STATUS_ACCESS_VIOLATION);
00451
00452 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00453
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00454 Counter += 1;
00455
try {
00456
foo1(STATUS_SUCCESS);
00457
00458 } except ((GetExceptionCode() == STATUS_SUCCESS) ?
00459
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00460
if (Counter != 1) {
00461 printf(
"failed, count = %d\n", Counter);
00462
00463 }
else {
00464 printf(
"succeeded...");
00465 }
00466
00467 Counter += 1;
00468 }
00469 }
00470
00471
if (Counter != 2) {
00472 printf(
"failed, count = %d\n", Counter);
00473
00474 }
else {
00475 printf(
"succeeded\n");
00476 }
00477
00478
00479
00480
00481
00482 printf(
" test13...");
00483 Counter = 0;
00484
try {
00485
foo2(BlackHole, BadAddress);
00486
00487 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00488
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00489 Counter += 1;
00490
try {
00491
foo1(STATUS_SUCCESS);
00492
00493 } except ((GetExceptionCode() == STATUS_SUCCESS) ?
00494
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00495
if (Counter != 1) {
00496 printf(
"failed, count = %d\n", Counter);
00497
00498 }
else {
00499 printf(
"succeeded...");
00500 }
00501
00502 Counter += 1;
00503 }
00504 }
00505
00506
if (Counter != 2) {
00507 printf(
"failed, count = %d\n", Counter);
00508
00509 }
else {
00510 printf(
"succeeded\n");
00511 }
00512
00513
00514
00515
00516
00517
00518 printf(
" test14...");
00519 Counter = 0;
00520
try {
00521
try {
00522
foo1(STATUS_ACCESS_VIOLATION);
00523
00524 } except ((GetExceptionCode() == STATUS_ACCESS_VIOLATION) ?
00525
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00526 Counter += 1;
00527
goto t9;
00528 }
00529
00530 } finally {
00531 Counter += 1;
00532 }
00533
00534 t9:;
00535
if (Counter != 2) {
00536 printf(
"failed, count = %d\n", Counter);
00537
00538 }
else {
00539 printf(
"succeeded\n");
00540 }
00541
00542
00543
00544
00545
00546
00547 printf(
" test15...");
00548 Counter = 0;
00549
try {
00550
try {
00551 Counter += 1;
00552
00553 } finally {
00554 Counter += 1;
00555
goto t10;
00556 }
00557
00558 } finally {
00559 Counter += 1;
00560 }
00561
00562 t10:;
00563
if (Counter != 3) {
00564 printf(
"failed, count = %d\n", Counter);
00565
00566 }
else {
00567 printf(
"succeeded\n");
00568 }
00569
00570
00571
00572
00573
00574
00575 printf(
" test16...");
00576 Counter = 0;
00577
try {
00578
try {
00579
try {
00580 Counter += 1;
00581
foo1(STATUS_INTEGER_OVERFLOW);
00582
00583 } except (
EXCEPTION_EXECUTE_HANDLER) {
00584 Counter += 1;
00585
goto t11;
00586 }
00587
00588 } finally {
00589 Counter += 1;
00590 }
00591 t11:;
00592 } finally {
00593 Counter += 1;
00594 }
00595
00596
if (Counter != 4) {
00597 printf(
"failed, count = %d\n", Counter);
00598
00599 }
else {
00600 printf(
"succeeded\n");
00601 }
00602
00603
00604
00605
00606
00607
00608 printf(
" test17...");
00609 Counter = 0;
00610
try {
00611
try {
00612 Counter += 1;
00613
00614 } finally {
00615 Counter += 1;
00616
goto t12;
00617 }
00618 t12:;
00619 } finally {
00620 Counter += 1;
00621 }
00622
00623
if (Counter != 3) {
00624 printf(
"failed, count = %d\n", Counter);
00625
00626 }
else {
00627 printf(
"succeeded\n");
00628 }
00629
00630
00631
00632
00633
00634 printf(
" test18...");
00635 Counter = 0;
00636
try {
00637 Counter += 1;
00638
eret(STATUS_ACCESS_VIOLATION, &Counter);
00639
00640 } finally {
00641 Counter += 1;
00642 }
00643
00644
if (Counter != 4) {
00645 printf(
"failed, count = %d\n", Counter);
00646
00647 }
else {
00648 printf(
"succeeded\n");
00649 }
00650
00651
00652
00653
00654
00655 printf(
" test19...");
00656 Counter = 0;
00657
try {
00658 Counter += 1;
00659
fret(&Counter);
00660
00661 } finally {
00662 Counter += 1;
00663 }
00664
00665
if (Counter != 5) {
00666 printf(
"failed, count = %d\n", Counter);
00667
00668 }
else {
00669 printf(
"succeeded\n");
00670 }
00671
00672
00673
00674
00675
00676 printf(
" test20...");
00677 Counter = 0;
00678
if (
setjmp(JumpBuffer) == 0) {
00679 Counter += 1;
00680
longjmp(JumpBuffer, 1);
00681
00682 }
else {
00683 Counter += 1;
00684 }
00685
00686
if (Counter != 2) {
00687 printf(
"failed, count = %d\n", Counter);
00688
00689 }
else {
00690 printf(
"succeeded\n");
00691 }
00692
00693
00694
00695
00696
00697
00698 printf(
" test21...");
00699 Counter = 0;
00700
if (
setjmp(JumpBuffer) == 0) {
00701
try {
00702 Counter += 1;
00703
00704 } finally {
00705 Counter += 1;
00706
longjmp(JumpBuffer, 1);
00707 }
00708
00709 }
else {
00710 Counter += 1;
00711 }
00712
00713
if (Counter != 3) {
00714 printf(
"failed, count = %d\n", Counter);
00715
00716 }
else {
00717 printf(
"succeeded\n");
00718 }
00719
00720
00721
00722
00723
00724
00725 printf(
" test22...");
00726 Counter = 0;
00727
try {
00728
if (
setjmp(JumpBuffer) == 0) {
00729 Counter += 1;
00730
00731 }
else {
00732 Counter += 1;
00733 }
00734
00735 } finally {
00736 Counter += 1;
00737
if (Counter == 2) {
00738 Counter += 1;
00739
longjmp(JumpBuffer, 1);
00740 }
00741 }
00742
00743
if (Counter != 5) {
00744 printf(
"failed, count = %d\n", Counter);
00745
00746 }
else {
00747 printf(
"succeeded\n");
00748 }
00749
00750
00751
00752
00753
00754
00755
00756
00757 printf(
" test23...");
00758 Counter = 0;
00759
if (
setjmp(JumpBuffer) == 0) {
00760
try {
00761
try {
00762 Counter += 1;
00763
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
00764
00765 } finally {
00766 Counter += 1;
00767
longjmp(JumpBuffer, 1);
00768 }
00769
00770 } except(
EXCEPTION_EXECUTE_HANDLER) {
00771 Counter += 1;
00772 }
00773
00774 }
else {
00775 Counter += 1;
00776 }
00777
00778
if (Counter != 3) {
00779 printf(
"failed, count = %d\n", Counter);
00780
00781 }
else {
00782 printf(
"succeeded\n");
00783 }
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793 printf(
" test24...");
00794 Counter = 0;
00795
if (
setjmp(JumpBuffer) == 0) {
00796
try {
00797
try {
00798
try {
00799
try {
00800 Counter += 1;
00801
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
00802
00803 } finally {
00804 Counter += 1;
00805 }
00806
00807 } finally {
00808 Counter += 1;
00809
longjmp(JumpBuffer, 1);
00810 }
00811
00812 } finally {
00813 Counter += 1;
00814 }
00815
00816 } except(
EXCEPTION_EXECUTE_HANDLER) {
00817 Counter += 1;
00818 }
00819
00820 }
else {
00821 Counter += 1;
00822 }
00823
00824
if (Counter != 5) {
00825 printf(
"failed, count = %d\n", Counter);
00826
00827 }
else {
00828 printf(
"succeeded\n");
00829 }
00830
00831
00832
00833
00834
00835
00836
00837 printf(
" test25...");
00838 Counter = 0;
00839
if (
setjmp(JumpBuffer) == 0) {
00840
try {
00841
try {
00842
try {
00843 Counter += 1;
00844
dojump(JumpBuffer, &Counter);
00845
00846 } finally {
00847 Counter += 1;
00848 }
00849
00850 } finally {
00851 Counter += 1;
00852 }
00853
00854 } except(
EXCEPTION_EXECUTE_HANDLER) {
00855 Counter += 1;
00856 }
00857
00858 }
else {
00859 Counter += 1;
00860 }
00861
00862
if (Counter != 7) {
00863 printf(
"failed, count = %d\n", Counter);
00864
00865 }
else {
00866 printf(
"succeeded\n");
00867 }
00868
00869
00870
00871
00872
00873
00874
00875 printf(
" test26...");
00876 Counter = 0;
00877
if (
setjmp(JumpBuffer) == 0) {
00878
try {
00879
try {
00880
try {
00881
try {
00882 Counter += 1;
00883
dojump(JumpBuffer, &Counter);
00884
00885 } finally {
00886 Counter += 1;
00887 }
00888
00889 } finally {
00890 Counter += 1;
00891
longjmp(JumpBuffer, 1);
00892 }
00893
00894 } finally {
00895 Counter += 1;
00896 }
00897
00898 } except(
EXCEPTION_EXECUTE_HANDLER) {
00899 Counter += 1;
00900 }
00901
00902 }
else {
00903 Counter += 1;
00904 }
00905
00906
if (Counter != 8) {
00907 printf(
"failed, count = %d\n", Counter);
00908
00909 }
else {
00910 printf(
"succeeded\n");
00911 }
00912
00913
00914
00915
00916
00917 printf(
" test27...");
00918 Counter = 0;
00919
try {
00920
try {
00921 Counter += 1;
00922
except1(&Counter);
00923
00924 } except(
except2(GetExceptionInformation(), &Counter)) {
00925 Counter += 2;
00926 }
00927
00928 } except(
EXCEPTION_EXECUTE_HANDLER) {
00929 Counter += 3;
00930 }
00931
00932
if (Counter != 55) {
00933 printf(
"failed, count = %d\n", Counter);
00934
00935 }
else {
00936 printf(
"succeeded\n");
00937 }
00938
00939
00940
00941
00942
00943 printf(
" test28...");
00944 Counter = 0;
00945
try {
00946 Counter += 1;
00947
addtwo(0x7fff0000, 0x10000, &Counter);
00948
00949 } except ((GetExceptionCode() == STATUS_INTEGER_OVERFLOW) ?
00950
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00951 Counter += 1;
00952 }
00953
00954
if (Counter != 2) {
00955 printf(
"failed, count = %d\n", Counter);
00956
00957 }
else {
00958 printf(
"succeeded\n");
00959 }
00960
00961
00962
00963
00964
00965
#ifndef i386
00966
printf(
" test29...");
00967 Counter = 0;
00968
try {
00969 Counter += 1;
00970
foo2(BlackHole, (PLONG)BadByte);
00971
00972 } except ((GetExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) ?
00973
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
00974 Counter += 1;
00975 }
00976
00977
if (Counter != 2) {
00978 printf(
"failed, count = %d\n", Counter);
00979
00980 }
else {
00981 printf(
"succeeded\n");
00982 }
00983
00984
#endif
00985
00986
00987
00988
00989
00990 printf(
" test30...");
00991 Counter = 0;
00992
for (Index1 = 0; Index1 < 10; Index1 += 1) {
00993
try {
00994
if ((Index1 & 0x1) == 0) {
00995
continue;
00996
00997 }
else {
00998 Counter += 1;
00999 }
01000
01001 } except (
EXCEPTION_EXECUTE_HANDLER) {
01002 Counter += 40;
01003 }
01004
01005 Counter += 2;
01006 }
01007
01008
if (Counter != 15) {
01009 printf(
"failed, count = %d\n", Counter);
01010
01011 }
else {
01012 printf(
"succeeded\n");
01013 }
01014
01015
01016
01017
01018
01019 printf(
" test31...");
01020 Counter = 0;
01021
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01022
try {
01023
if ((Index1 & 0x1) == 0) {
01024
continue;
01025
01026 }
else {
01027 Counter += 1;
01028 }
01029
01030 } finally {
01031 Counter += 2;
01032 }
01033
01034 Counter += 3;
01035 }
01036
01037
if (Counter != 40) {
01038 printf(
"failed, count = %d\n", Counter);
01039
01040 }
else {
01041 printf(
"succeeded\n");
01042 }
01043
01044
01045
01046
01047
01048
01049 printf(
" test32...");
01050 Counter = 0;
01051
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01052
try {
01053
try {
01054
if ((Index1 & 0x1) == 0) {
01055
continue;
01056
01057 }
else {
01058 Counter += 1;
01059 }
01060
01061 } except (
EXCEPTION_EXECUTE_HANDLER) {
01062 Counter += 10;
01063 }
01064
01065 Counter += 2;
01066
01067 } except (
EXCEPTION_EXECUTE_HANDLER) {
01068 Counter += 20;
01069 }
01070
01071 Counter += 3;
01072 }
01073
01074
if (Counter != 30) {
01075 printf(
"failed, count = %d\n", Counter);
01076
01077 }
else {
01078 printf(
"succeeded\n");
01079 }
01080
01081
01082
01083
01084
01085 printf(
" test33...");
01086 Counter = 0;
01087
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01088
try {
01089
try {
01090
if ((Index1 & 0x1) == 0) {
01091
continue;
01092
01093 }
else {
01094 Counter += 1;
01095 }
01096
01097 } finally {
01098 Counter += 2;
01099 }
01100
01101 Counter += 3;
01102
01103 } finally {
01104 Counter += 4;
01105 }
01106
01107 Counter += 5;
01108 }
01109
01110
if (Counter != 105) {
01111 printf(
"failed, count = %d\n", Counter);
01112
01113 }
else {
01114 printf(
"succeeded\n");
01115 }
01116
01117
01118
01119
01120
01121 printf(
" test34...");
01122 Counter = 0;
01123
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01124
try {
01125
if ((Index1 & 0x1) == 0) {
01126 Counter += 1;
01127 }
01128
01129 } finally {
01130 Counter += 2;
01131
continue;
01132 }
01133
01134 Counter += 4;
01135 }
01136
01137
if (Counter != 25) {
01138 printf(
"failed, count = %d\n", Counter);
01139
01140 }
else {
01141 printf(
"succeeded\n");
01142 }
01143
01144
01145
01146
01147
01148 printf(
" test35...");
01149 Counter = 0;
01150
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01151
try {
01152
try {
01153
if ((Index1 & 0x1) == 0) {
01154 Counter += 1;
01155 }
01156
01157 } finally {
01158 Counter += 2;
01159
continue;
01160 }
01161
01162 Counter += 4;
01163
01164 } finally {
01165 Counter += 5;
01166 }
01167
01168 Counter += 6;
01169 }
01170
01171
if (Counter != 75) {
01172 printf(
"failed, count = %d\n", Counter);
01173
01174 }
else {
01175 printf(
"succeeded\n");
01176 }
01177
01178
01179
01180
01181
01182 printf(
" test36...");
01183 Counter = 0;
01184
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01185
try {
01186
try {
01187
if ((Index1 & 0x1) == 0) {
01188 Counter += 1;
01189 }
01190
01191 } finally {
01192 Counter += 2;
01193 }
01194
01195 Counter += 4;
01196
01197 } finally {
01198 Counter += 5;
01199
continue;
01200 }
01201
01202 Counter += 6;
01203 }
01204
01205
if (Counter != 115) {
01206 printf(
"failed, count = %d\n", Counter);
01207
01208 }
else {
01209 printf(
"succeeded\n");
01210 }
01211
01212
01213
01214
01215
01216 printf(
" test37...");
01217 Counter = 0;
01218
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01219
try {
01220
if ((Index1 & 0x1) == 1) {
01221
break;
01222
01223 }
else {
01224 Counter += 1;
01225 }
01226
01227 } except (
EXCEPTION_EXECUTE_HANDLER) {
01228 Counter += 40;
01229 }
01230
01231 Counter += 2;
01232 }
01233
01234
if (Counter != 3) {
01235 printf(
"failed, count = %d\n", Counter);
01236
01237 }
else {
01238 printf(
"succeeded\n");
01239 }
01240
01241
01242
01243
01244
01245 printf(
" test38...");
01246 Counter = 0;
01247
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01248
try {
01249
if ((Index1 & 0x1) == 1) {
01250
break;
01251
01252 }
else {
01253 Counter += 1;
01254 }
01255
01256 } finally {
01257 Counter += 2;
01258 }
01259
01260 Counter += 3;
01261 }
01262
01263
if (Counter != 8) {
01264 printf(
"failed, count = %d\n", Counter);
01265
01266 }
else {
01267 printf(
"succeeded\n");
01268 }
01269
01270
01271
01272
01273
01274
01275 printf(
" test39...");
01276 Counter = 0;
01277
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01278
try {
01279
try {
01280
if ((Index1 & 0x1) == 1) {
01281
break;
01282
01283 }
else {
01284 Counter += 1;
01285 }
01286
01287 } except (
EXCEPTION_EXECUTE_HANDLER) {
01288 Counter += 10;
01289 }
01290
01291 Counter += 2;
01292
01293 } except (
EXCEPTION_EXECUTE_HANDLER) {
01294 Counter += 20;
01295 }
01296
01297 Counter += 3;
01298 }
01299
01300
if (Counter != 6) {
01301 printf(
"failed, count = %d\n", Counter);
01302
01303 }
else {
01304 printf(
"succeeded\n");
01305 }
01306
01307
01308
01309
01310
01311 printf(
" test40...");
01312 Counter = 0;
01313
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01314
try {
01315
try {
01316
if ((Index1 & 0x1) == 1) {
01317
break;
01318
01319 }
else {
01320 Counter += 1;
01321 }
01322
01323 } finally {
01324 Counter += 2;
01325 }
01326
01327 Counter += 3;
01328
01329 } finally {
01330 Counter += 4;
01331 }
01332
01333 Counter += 5;
01334 }
01335
01336
if (Counter != 21) {
01337 printf(
"failed, count = %d\n", Counter);
01338
01339 }
else {
01340 printf(
"succeeded\n");
01341 }
01342
01343
01344
01345
01346
01347 printf(
" test41...");
01348 Counter = 0;
01349
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01350
try {
01351
if ((Index1 & 0x1) == 1) {
01352 Counter += 1;
01353 }
01354
01355 } finally {
01356 Counter += 2;
01357
break;
01358 }
01359
01360 Counter += 4;
01361 }
01362
01363
if (Counter != 2) {
01364 printf(
"failed, count = %d\n", Counter);
01365
01366 }
else {
01367 printf(
"succeeded\n");
01368 }
01369
01370
01371
01372
01373
01374 printf(
" test42...");
01375 Counter = 0;
01376
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01377
try {
01378
try {
01379
if ((Index1 & 0x1) == 1) {
01380 Counter += 1;
01381 }
01382
01383 } finally {
01384 Counter += 2;
01385
break;
01386 }
01387
01388 Counter += 4;
01389
01390 } finally {
01391 Counter += 5;
01392 }
01393
01394 Counter += 6;
01395 }
01396
01397
if (Counter != 7) {
01398 printf(
"failed, count = %d\n", Counter);
01399
01400 }
else {
01401 printf(
"succeeded\n");
01402 }
01403
01404
01405
01406
01407
01408 printf(
" test43...");
01409 Counter = 0;
01410
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01411
try {
01412
try {
01413
if ((Index1 & 0x1) == 1) {
01414 Counter += 1;
01415 }
01416
01417 } finally {
01418 Counter += 2;
01419 }
01420
01421 Counter += 4;
01422
01423 } finally {
01424 Counter += 5;
01425
break;
01426 }
01427
01428 Counter += 6;
01429 }
01430
01431
if (Counter != 11) {
01432 printf(
"failed, count = %d\n", Counter);
01433
01434 }
else {
01435 printf(
"succeeded\n");
01436 }
01437
01438
01439
01440
01441
01442 printf(
" test44...");
01443 Counter = 0;
01444 Index1 = 1;
01445
switch (Index2) {
01446
case BLUE:
01447 Counter += 100;
01448
break;
01449
01450
case RED:
01451
try {
01452
if ((Index1 & 0x1) == 1) {
01453
break;
01454
01455 }
else {
01456 Counter += 1;
01457 }
01458
01459 } except (
EXCEPTION_EXECUTE_HANDLER) {
01460 Counter += 40;
01461 }
01462
01463 Counter += 2;
01464
break;
01465 }
01466
01467
if (Counter != 0) {
01468 printf(
"failed, count = %d\n", Counter);
01469
01470 }
else {
01471 printf(
"succeeded\n");
01472 }
01473
01474
01475
01476
01477
01478 printf(
" test45...");
01479 Counter = 0;
01480 Index1 = 1;
01481
switch (Index2) {
01482
case BLUE:
01483 Counter += 100;
01484
break;
01485
01486
case RED:
01487
try {
01488
if ((Index1 & 0x1) == 1) {
01489
break;
01490
01491 }
else {
01492 Counter += 1;
01493 }
01494
01495 } finally {
01496 Counter += 2;
01497 }
01498
01499 Counter += 3;
01500 }
01501
01502
if (Counter != 2) {
01503 printf(
"failed, count = %d\n", Counter);
01504
01505 }
else {
01506 printf(
"succeeded\n");
01507 }
01508
01509
01510
01511
01512
01513
01514 printf(
" test46...");
01515 Counter = 0;
01516 Index1 = 1;
01517
switch (Index2) {
01518
case BLUE:
01519 Counter += 100;
01520
break;
01521
01522
case RED:
01523
try {
01524
try {
01525
if ((Index1 & 0x1) == 1) {
01526
break;
01527
01528 }
else {
01529 Counter += 1;
01530 }
01531
01532 } except (
EXCEPTION_EXECUTE_HANDLER) {
01533 Counter += 10;
01534 }
01535
01536 Counter += 2;
01537
01538 } except (
EXCEPTION_EXECUTE_HANDLER) {
01539 Counter += 20;
01540 }
01541
01542 Counter += 3;
01543 }
01544
01545
if (Counter != 0) {
01546 printf(
"failed, count = %d\n", Counter);
01547
01548 }
else {
01549 printf(
"succeeded\n");
01550 }
01551
01552
01553
01554
01555
01556 printf(
" test47...");
01557 Counter = 0;
01558 Index1 = 1;
01559
switch (Index2) {
01560
case BLUE:
01561 Counter += 100;
01562
break;
01563
01564
case RED:
01565
try {
01566
try {
01567
if ((Index1 & 0x1) == 1) {
01568
break;
01569
01570 }
else {
01571 Counter += 1;
01572 }
01573
01574 } finally {
01575 Counter += 2;
01576 }
01577
01578 Counter += 3;
01579
01580 } finally {
01581 Counter += 4;
01582 }
01583
01584 Counter += 5;
01585 }
01586
01587
if (Counter != 6) {
01588 printf(
"failed, count = %d\n", Counter);
01589
01590 }
else {
01591 printf(
"succeeded\n");
01592 }
01593
01594
01595
01596
01597
01598 printf(
" test48...");
01599 Counter = 0;
01600 Index1 = 1;
01601
switch (Index2) {
01602
case BLUE:
01603 Counter += 100;
01604
break;
01605
01606
case RED:
01607
try {
01608
if ((Index1 & 0x1) == 1) {
01609 Counter += 1;
01610 }
01611
01612 } finally {
01613 Counter += 2;
01614
break;
01615 }
01616
01617 Counter += 4;
01618 }
01619
01620
if (Counter != 3) {
01621 printf(
"failed, count = %d\n", Counter);
01622
01623 }
else {
01624 printf(
"succeeded\n");
01625 }
01626
01627
01628
01629
01630
01631 printf(
" test49...");
01632 Counter = 0;
01633 Index1 = 1;
01634
switch (Index2) {
01635
case BLUE:
01636 Counter += 100;
01637
break;
01638
01639
case RED:
01640
try {
01641
try {
01642
if ((Index1 & 0x1) == 1) {
01643 Counter += 1;
01644 }
01645
01646 } finally {
01647 Counter += 2;
01648
break;
01649 }
01650
01651 Counter += 4;
01652
01653 } finally {
01654 Counter += 5;
01655 }
01656
01657 Counter += 6;
01658 }
01659
01660
if (Counter != 8) {
01661 printf(
"failed, count = %d\n", Counter);
01662
01663 }
else {
01664 printf(
"succeeded\n");
01665 }
01666
01667
01668
01669
01670
01671 printf(
" test50...");
01672 Counter = 0;
01673 Index1 = 1;
01674
switch (Index2) {
01675
case BLUE:
01676 Counter += 100;
01677
break;
01678
01679
case RED:
01680
try {
01681
try {
01682
if ((Index1 & 0x1) == 1) {
01683 Counter += 1;
01684 }
01685
01686 } finally {
01687 Counter += 2;
01688 }
01689
01690 Counter += 4;
01691
01692 } finally {
01693 Counter += 5;
01694
break;
01695 }
01696
01697 Counter += 6;
01698 }
01699
01700
if (Counter != 12) {
01701 printf(
"failed, count = %d\n", Counter);
01702
01703 }
else {
01704 printf(
"succeeded\n");
01705 }
01706
01707
01708
01709
01710
01711 printf(
" test51...");
01712 Counter = 0;
01713
try {
01714
if (
Echo(Counter) == Counter) {
01715 Counter += 3;
01716 leave;
01717
01718 }
else {
01719 Counter += 100;
01720 }
01721
01722 } finally {
01723
if (abnormal_termination() ==
FALSE) {
01724 Counter += 5;
01725 }
01726 }
01727
01728
if (Counter != 8) {
01729 printf(
"failed, count = %d\n", Counter);
01730
01731 }
else {
01732 printf(
"succeeded\n");
01733 }
01734
01735
01736
01737
01738
01739 printf(
" test52...");
01740 Counter = 0;
01741
try {
01742
for (Index1 = 0; Index1 < 10; Index1 += 1) {
01743
if (
Echo(Index1) == Index1) {
01744 Counter += 3;
01745 leave;
01746 }
01747
01748 Counter += 100;
01749 }
01750
01751 } finally {
01752
if (abnormal_termination() ==
FALSE) {
01753 Counter += 5;
01754 }
01755 }
01756
01757
if (Counter != 8) {
01758 printf(
"failed, count = %d\n", Counter);
01759
01760 }
else {
01761 printf(
"succeeded\n");
01762 }
01763
01764
01765
01766
01767
01768 printf(
" test53...");
01769 Counter = 0;
01770
try {
01771
switch (Index2) {
01772
case BLUE:
01773
break;
01774
01775
case RED:
01776 Counter += 3;
01777 leave;
01778 }
01779
01780 Counter += 100;
01781
01782 } finally {
01783
if (abnormal_termination() ==
FALSE) {
01784 Counter += 5;
01785 }
01786 }
01787
01788
if (Counter != 8) {
01789 printf(
"failed, count = %d\n", Counter);
01790
01791 }
else {
01792 printf(
"succeeded\n");
01793 }
01794
01795
01796
01797
01798
01799
01800 printf(
" test54...");
01801 Counter = 0;
01802
try {
01803
try {
01804
if (
Echo(Counter) == Counter) {
01805 Counter += 3;
01806 leave;
01807
01808 }
else {
01809 Counter += 100;
01810 }
01811
01812 } finally {
01813
if (abnormal_termination() ==
FALSE) {
01814 Counter += 5;
01815 }
01816 }
01817
01818
if (
Echo(Counter) == Counter) {
01819 Counter += 3;
01820 leave;
01821
01822 }
else {
01823 Counter += 100;
01824 }
01825
01826
01827 } finally {
01828
if (abnormal_termination() ==
FALSE) {
01829 Counter += 5;
01830 }
01831 }
01832
01833
if (Counter != 16) {
01834 printf(
"failed, count = %d\n", Counter);
01835
01836 }
else {
01837 printf(
"succeeded\n");
01838 }
01839
01840
01841
01842
01843
01844
01845 printf(
" test55...");
01846 Counter = 0;
01847
try {
01848
try {
01849
if (
Echo(Counter) == Counter) {
01850 Counter += 3;
01851 leave;
01852
01853 }
else {
01854 Counter += 100;
01855 }
01856
01857 } finally {
01858
if (abnormal_termination() ==
FALSE) {
01859 Counter += 5;
01860 leave;
01861 }
01862 }
01863
01864 Counter += 100;
01865
01866 } finally {
01867
if (abnormal_termination() ==
FALSE) {
01868 Counter += 5;
01869 }
01870 }
01871
01872
if (Counter != 13) {
01873 printf(
"failed, count = %d\n", Counter);
01874
01875 }
else {
01876 printf(
"succeeded\n");
01877 }
01878
01879
01880
01881
01882
01883
01884 printf(
" test56...");
01885 Counter = 0;
01886
try {
01887 Counter += 1;
01888
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
01889
01890 } except (Counter) {
01891
try {
01892 Counter += 3;
01893
01894 } finally {
01895
if (abnormal_termination() ==
FALSE) {
01896 Counter += 5;
01897 }
01898 }
01899 }
01900
01901
if (Counter != 9) {
01902 printf(
"failed, count = %d\n", Counter);
01903
01904 }
else {
01905 printf(
"succeeded\n");
01906 }
01907
01908
01909
01910
01911
01912 printf(
" test57...");
01913 Counter = 0;
01914
try {
01915 Counter += 1;
01916
01917 } finally {
01918
if (abnormal_termination() ==
FALSE) {
01919
try {
01920 Counter += 3;
01921
01922 } finally {
01923
if (abnormal_termination() ==
FALSE) {
01924 Counter += 5;
01925 }
01926 }
01927 }
01928 }
01929
01930
if (Counter != 9) {
01931 printf(
"failed, count = %d\n", Counter);
01932
01933 }
else {
01934 printf(
"succeeded\n");
01935 }
01936
01937
01938
01939
01940
01941
01942
01943
01944
01945
01946
01947
01948
01949
01950
01951
01952
01953
01954
01955
01956
01957
01958
01959
01960
01961
01962
01963
01964
01965
01966
01967
01968
01969
01970
01971
01972
01973
01974
01975 printf(
" test59...");
01976 Counter = 0;
01977
try {
01978 Counter += 1;
01979
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
01980
01981 } except (Counter) {
01982
try {
01983 Counter += 3;
01984
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
01985
01986 } except(Counter - 3) {
01987 Counter += 5;
01988 }
01989 }
01990
01991
if (Counter != 9) {
01992 printf(
"failed, count = %d\n", Counter);
01993
01994 }
else {
01995 printf(
"succeeded\n");
01996 }
01997
01998
01999
02000
02001
02002 printf(
" test60...");
02003 Counter = 0;
02004
try {
02005
try {
02006
goto outside;
02007
02008 } except(1) {
02009 Counter += 1;
02010 }
02011
02012 outside:
02013
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
02014
02015 } except(1) {
02016 Counter += 3;
02017 }
02018
02019
if (Counter != 3) {
02020 printf(
"failed, count = %d\n", Counter);
02021 }
else {
02022 printf(
"succeeded\n");
02023 }
02024
02025
02026
02027
02028
02029
02030 printf(
" test61...");
02031 Counter = 0;
02032
try {
02033
Test61Part2 (&Counter);
02034 } except (
EXCEPTION_EXECUTE_HANDLER) {
02035 Counter += 11;
02036 }
02037
02038
if (Counter != 24) {
02039 printf(
"failed, count = %d\n", Counter);
02040
02041 }
else {
02042 printf(
"succeeded\n");
02043 }
02044
02045
02046
02047
02048
02049 printf(
" test62...");
02050
02051
02052 _controlfp(_controlfp(0,0) & ~EM_OVERFLOW, _MCW_EM);
02053
02054 Counter = 0;
02055
try {
02056 doubleresult =
SquareDouble (1.7e300);
02057
02058
try {
02059 doubleresult =
SquareDouble (1.0);
02060
02061 } except (1) {
02062 Counter += 3;
02063 }
02064
02065 } except (1) {
02066 Counter += 1;
02067 }
02068
02069
if (Counter != 1) {
02070 printf(
"failed, count = %d\n", Counter);
02071
02072 }
else {
02073 printf(
"succeeded\n");
02074 }
02075
02076 _clearfp ();
02077
02078
02079
02080
02081
02082
PerformFpTest ();
02083
02084
02085
02086
02087
02088 printf(
"End of exception test\n");
02089
return;
02090 }
02091
02092
VOID
02093 PerformFpTest()
02094 {
02095 LONG Counter;
02096
double doubleresult;
02097
02098
02099
02100
02101
02102 printf(
" test63...");
02103
02104 Counter = 0;
02105
try {
02106
SquareDouble17E300 ((PVOID) &doubleresult);
02107
02108
try {
02109
SquareDouble17E300 ((PVOID) &doubleresult);
02110
02111 } except (1) {
02112 Counter += 3;
02113 }
02114
02115 } except (1) {
02116 Counter += 1;
02117 }
02118
02119
if (Counter != 1) {
02120 printf(
"failed, count = %d\n", Counter);
02121
02122 }
else {
02123 printf(
"succeeded\n");
02124 }
02125
02126 _clearfp ();
02127
02128 }
02129
02130
VOID
02131 addtwo (
02132
long First,
02133
long Second,
02134
long *Place
02135 )
02136
02137 {
02138
02139
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
02140 *Place = First + Second;
02141
return;
02142 }
02143
02144
VOID
02145 bar1 (
02146 IN NTSTATUS Status,
02147 IN PLONG Counter
02148 )
02149 {
02150
02151
try {
02152
foo1(
Status);
02153
02154 } finally {
02155
if (abnormal_termination() !=
FALSE) {
02156 *Counter = 99;
02157
02158 }
else {
02159 *Counter = 100;
02160 }
02161 }
02162
02163
return;
02164 }
02165
02166
VOID
02167 bar2 (
02168 IN PLONG BlackHole,
02169 IN PLONG BadAddress,
02170 IN PLONG Counter
02171 )
02172 {
02173
02174
try {
02175
foo2(BlackHole, BadAddress);
02176
02177 } finally {
02178
if (abnormal_termination() !=
FALSE) {
02179 *Counter = 99;
02180
02181 }
else {
02182 *Counter = 100;
02183 }
02184 }
02185
02186
return;
02187 }
02188
02189
VOID
02190 dojump (
02191 IN jmp_buf JumpBuffer,
02192 IN PLONG Counter
02193 )
02194
02195 {
02196
02197
try {
02198
try {
02199 *Counter += 1;
02200
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
02201
02202 } finally {
02203 *Counter += 1;
02204 }
02205
02206 } finally {
02207 *Counter += 1;
02208
longjmp(JumpBuffer, 1);
02209 }
02210 }
02211
02212
VOID
02213 eret(
02214 IN NTSTATUS Status,
02215 IN PLONG Counter
02216 )
02217
02218 {
02219
02220
try {
02221
try {
02222
foo1(
Status);
02223
02224 } except ((GetExceptionCode() ==
Status) ?
02225
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH) {
02226 *Counter += 1;
02227
return;
02228 }
02229
02230 } finally {
02231 *Counter += 1;
02232 }
02233
02234
return;
02235 }
02236
02237
VOID
02238 except1 (
02239 IN PLONG Counter
02240 )
02241
02242 {
02243
02244
try {
02245 *Counter += 5;
02246
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
02247
02248 } except (
except3(GetExceptionInformation(), Counter)) {
02249 *Counter += 7;
02250 }
02251
02252 *Counter += 9;
02253
return;
02254 }
02255
02256 ULONG
02257 except2 (
02258 IN PEXCEPTION_POINTERS ExceptionPointers,
02259 IN PLONG Counter
02260 )
02261
02262 {
02263
02264 PEXCEPTION_RECORD ExceptionRecord;
02265
02266 ExceptionRecord = ExceptionPointers->ExceptionRecord;
02267
if ((ExceptionRecord->ExceptionCode == STATUS_UNSUCCESSFUL) &&
02268 ((ExceptionRecord->ExceptionFlags &
EXCEPTION_NESTED_CALL) == 0)) {
02269 *Counter += 11;
02270
return EXCEPTION_EXECUTE_HANDLER;
02271
02272 }
else {
02273 *Counter += 13;
02274
return EXCEPTION_CONTINUE_SEARCH;
02275 }
02276 }
02277
02278 ULONG
02279 except3 (
02280 IN PEXCEPTION_POINTERS ExceptionPointers,
02281 IN PLONG Counter
02282 )
02283
02284 {
02285
02286 PEXCEPTION_RECORD ExceptionRecord;
02287
02288 ExceptionRecord = ExceptionPointers->ExceptionRecord;
02289
if ((ExceptionRecord->ExceptionCode == STATUS_INTEGER_OVERFLOW) &&
02290 ((ExceptionRecord->ExceptionFlags &
EXCEPTION_NESTED_CALL) == 0)) {
02291 *Counter += 17;
02292
RtlRaiseStatus(STATUS_UNSUCCESSFUL);
02293
02294 }
else if ((ExceptionRecord->ExceptionCode == STATUS_UNSUCCESSFUL) &&
02295 ((ExceptionRecord->ExceptionFlags &
EXCEPTION_NESTED_CALL) != 0)) {
02296 *Counter += 19;
02297
return EXCEPTION_CONTINUE_SEARCH;
02298 }
02299
02300 *Counter += 23;
02301
return EXCEPTION_EXECUTE_HANDLER;
02302 }
02303
02304
VOID
02305 foo1 (
02306 IN NTSTATUS Status
02307 )
02308
02309 {
02310
02311
02312
02313
02314
02315
RtlRaiseStatus(
Status);
02316
return;
02317 }
02318
02319
VOID
02320 foo2 (
02321 IN PLONG BlackHole,
02322 IN PLONG BadAddress
02323 )
02324
02325 {
02326
02327
02328
02329
02330
02331 *BlackHole += *BadAddress;
02332
return;
02333 }
02334
02335
VOID
02336 fret(
02337 IN PLONG Counter
02338 )
02339
02340 {
02341
02342
try {
02343
try {
02344 *Counter += 1;
02345
02346 } finally {
02347 *Counter += 1;
02348
return;
02349 }
02350 } finally {
02351 *Counter += 1;
02352 }
02353
02354
return;
02355 }
02356
02357 LONG
02358 Echo(
02359 IN LONG Value
02360 )
02361
02362 {
02363
return Value;
02364 }
02365
02366
VOID
02367 Test61Part2 (
02368 IN OUT PULONG Counter
02369 )
02370 {
02371
02372
try {
02373 *Counter -= 1;
02374
RtlRaiseStatus(STATUS_INTEGER_OVERFLOW);
02375 } finally {
02376 *Counter += 2;
02377 *Counter += 5;
02378 *Counter += 7;
02379 }
02380 }
02381
02382
02383
double
02384 SquareDouble (
02385 IN
double op
02386 )
02387 {
02388
return op * op;
02389 }
02390
02391
VOID
02392 SquareDouble17E300 (
02393 OUT PVOID output
02394 )
02395 {
02396
double ans;
02397
02398 ans =
SquareDouble (1.7e300);
02399 *(
double *) output = ans;
02400 }