From 6b2d653d848b3107271fa7555ca055ebd85b91b6 Mon Sep 17 00:00:00 2001 From: Alex Antonov Date: Wed, 15 Dec 2021 16:17:01 +0300 Subject: [PATCH] [CI] Use maple driver for all available tests --- .../AST0001-HelloWorld/HelloWorld.c | 20 + .../AST0001-HelloWorld/expected.txt | 1 + .../driver_test/AST0001-HelloWorld/test.cfg | 2 + .../driver_test/AST0002-IntPrint/IntPrint.c | 22 + .../driver_test/AST0002-IntPrint/expected.txt | 1 + .../driver_test/AST0002-IntPrint/test.cfg | 2 + .../driver_test/AST0003-CallExpr/CallExpr.c | 59 +++ .../driver_test/AST0003-CallExpr/expected.txt | 2 + .../driver_test/AST0003-CallExpr/test.cfg | 2 + .../AST0004-SameVarName/SameVarName.c | 24 + .../AST0004-SameVarName/expected.txt | 1 + .../driver_test/AST0004-SameVarName/test.cfg | 2 + .../UnaryOperatorExpr.c | 43 ++ .../AST0005-UnaryOperatorExpr/expected.txt | 3 + .../AST0005-UnaryOperatorExpr/test.cfg | 2 + .../ArraySubscriptExpr.c | 45 ++ .../AST0006-ArraySubscriptExpr/expected.txt | 2 + .../AST0006-ArraySubscriptExpr/test.cfg | 2 + .../ConditionalOperator.c | 32 ++ .../AST0007-ConditionalOperator/expected.txt | 4 + .../AST0007-ConditionalOperator/test.cfg | 2 + .../InitListExpr-Array.c | 38 ++ .../AST0008-InitListExpr-Array/expected.txt | 9 + .../AST0008-InitListExpr-Array/test.cfg | 2 + .../BinaryOperatorExpr.c | 73 +++ .../AST0009-BinaryOperatorExpr/expected.txt | 24 + .../AST0009-BinaryOperatorExpr/test.cfg | 2 + .../BinaryOperatorStmt.c | 42 ++ .../AST0010-BinaryOperatorStmt/expected.txt | 1 + .../AST0010-BinaryOperatorStmt/test.cfg | 2 + .../AST0011-MemberExpr/MemberExpr.c | 74 +++ .../AST0011-MemberExpr/expected.txt | 3 + .../driver_test/AST0011-MemberExpr/test.cfg | 2 + .../AST0012-AssignExpr/AssignExpr.c | 62 +++ .../AST0012-AssignExpr/expected.txt | 1 + .../driver_test/AST0012-AssignExpr/test.cfg | 2 + .../driver_test/AST0013-IfStmt/IfStmt.c | 36 ++ .../driver_test/AST0013-IfStmt/expected.txt | 1 + .../driver_test/AST0013-IfStmt/test.cfg | 2 + .../driver_test/AST0014-ForStmt/ForStmt.c | 47 ++ .../driver_test/AST0014-ForStmt/expected.txt | 1 + .../driver_test/AST0014-ForStmt/test.cfg | 2 + .../driver_test/AST0015-DoStmt/DoStmt.c | 49 ++ .../driver_test/AST0015-DoStmt/expected.txt | 1 + .../driver_test/AST0015-DoStmt/test.cfg | 2 + .../driver_test/AST0016-WhileStmt/WhileStmt.c | 49 ++ .../AST0016-WhileStmt/expected.txt | 1 + .../driver_test/AST0016-WhileStmt/test.cfg | 2 + .../InitListExpr-Struct.c | 61 +++ .../AST0017-InitListExpr-Struct/expected.txt | 9 + .../AST0017-InitListExpr-Struct/test.cfg | 2 + .../ConstantExprInEnum.c | 31 ++ .../AST0018-ConstantExprInEnum/expected.txt | 2 + .../AST0018-ConstantExprInEnum/test.cfg | 2 + .../AST0020-CStyleCastExpr/CStyleCastExpr.c | 37 ++ .../AST0020-CStyleCastExpr/expected.txt | 1 + .../AST0020-CStyleCastExpr/test.cfg | 2 + .../SwitchCaseDefault.c | 37 ++ .../AST0021-SwitchCaseDefault/expected.txt | 1 + .../AST0021-SwitchCaseDefault/test.cfg | 2 + .../StructDReadField.c | 39 ++ .../AST0022-StructDReadField/expected.txt | 4 + .../AST0022-StructDReadField/test.cfg | 2 + .../StructIReadField.c | 41 ++ .../AST0023-StructIReadField/expected.txt | 4 + .../AST0023-StructIReadField/test.cfg | 2 + .../CompoundAssignOperator.c | 51 ++ .../expected.txt | 6 + .../AST0024-CompoundAssignOperator/test.cfg | 2 + .../ConstantExprInBitField.c | 53 ++ .../expected.txt | 10 + .../AST0024-ConstantExprInBitField/test.cfg | 2 + .../BinaryConditionalOperator.c | 56 ++ .../expected.txt | 10 + .../test.cfg | 2 + .../AST0025-FloatingLiteral/FloatingLiteral.c | 30 ++ .../AST0025-FloatingLiteral/expected.txt | 6 + .../AST0025-FloatingLiteral/test.cfg | 2 + .../CharacterLiteral.c | 24 + .../AST0026-CharacterLiteral/expected.txt | 94 ++++ .../AST0026-CharacterLiteral/test.cfg | 2 + .../driver_test/AST0026-Sizeof/Sizeof.c | 58 ++ .../driver_test/AST0026-Sizeof/expected.txt | 4 + .../driver_test/AST0026-Sizeof/test.cfg | 2 + .../driver_test/AST0027-GotoLabel/GotoLabel.c | 29 + .../AST0027-GotoLabel/expected.txt | 1 + .../driver_test/AST0027-GotoLabel/test.cfg | 2 + .../AST0027-ICallassigned/ICallassigned.c | 57 ++ .../AST0027-ICallassigned/expected.txt | 1 + .../AST0027-ICallassigned/test.cfg | 2 + .../AST0028-ImplicitCvt/ImplicitCvt.c | 49 ++ .../AST0028-ImplicitCvt/expected.txt | 1 + .../driver_test/AST0028-ImplicitCvt/test.cfg | 2 + .../driver_test/AST0028-PtrBinary/PtrBinary.c | 30 ++ .../AST0028-PtrBinary/expected.txt | 1 + .../driver_test/AST0028-PtrBinary/test.cfg | 2 + .../SameNameTypeDeclInDifferentScope.c | 33 ++ .../expected.txt | 3 + .../test.cfg | 2 + .../SameNameVarIndifferentScope.c | 52 ++ .../expected.txt | 11 + .../test.cfg | 2 + .../driver_test/AST0033-StmtExpr/StmtExpr.c | 22 + .../driver_test/AST0033-StmtExpr/expected.txt | 1 + .../driver_test/AST0033-StmtExpr/test.cfg | 2 + .../AST0034-ArrayInStruct/ArrayInStruct.c | 51 ++ .../AST0034-ArrayInStruct/expected.txt | 8 + .../AST0034-ArrayInStruct/test.cfg | 2 + .../ImplicitValueInitExpr.c | 46 ++ .../expected.txt | 4 + .../AST0035-ImplicitValueInitExpr/test.cfg | 2 + .../driver_test/AST0036-Complex/Complex.c | 28 + .../driver_test/AST0036-Complex/expected.txt | 4 + .../driver_test/AST0036-Complex/test.cfg | 2 + .../driver_test/AST0036-TypeDef/TypeDef.c | 33 ++ .../driver_test/AST0036-TypeDef/expected.txt | 4 + .../driver_test/AST0036-TypeDef/test.cfg | 2 + .../driver_test/AST0037-VAArgExpr/VAArgExpr.c | 126 +++++ .../AST0037-VAArgExpr/expected.txt | 44 ++ .../driver_test/AST0037-VAArgExpr/test.cfg | 2 + .../AST0038-GlobalAggInit/GlobalAggInit.c | 63 +++ .../AST0038-GlobalAggInit/expected.txt | 7 + .../AST0038-GlobalAggInit/test.cfg | 2 + .../driver_test/AST0038-GlobalVar/GlobalVar.c | 97 ++++ .../AST0038-GlobalVar/expected.txt | 14 + .../driver_test/AST0038-GlobalVar/test.cfg | 2 + .../AST0039-StructInArray/StructInArray.c | 47 ++ .../AST0039-StructInArray/expected.txt | 10 + .../AST0039-StructInArray/test.cfg | 2 + .../LocalAggInitialization.c | 43 ++ .../expected.txt | 3 + .../AST0040-LocalAggInitialization/test.cfg | 2 + .../AST0041-AddrOfLabel/AddrOfLabel.c | 27 + .../AST0041-AddrOfLabel/expected.txt | 2 + .../driver_test/AST0041-AddrOfLabel/test.cfg | 2 + .../builtin_rotateXXX.c | 57 ++ .../AST0070-builtin_rotateXXX/expected.txt | 9 + .../AST0070-builtin_rotateXXX/test.cfg | 2 + .../InvalidInitializer.c | 27 + .../AST0072-InvalidInitializer/expected.txt | 1 + .../AST0072-InvalidInitializer/test.cfg | 2 + .../AST0073-RorOptimize/RorOptimize.c | 59 +++ .../AST0073-RorOptimize/expected.txt | 1 + .../driver_test/AST0073-RorOptimize/test.cfg | 2 + .../DRIVER0001-helloworld/test.cfg | 4 +- .../driver_test/DRIVER0002-double/test.cfg | 4 +- .../driver_test/DRIVER0003-macro/test.cfg | 4 +- .../driver_test/DRIVER0004-syslibs/test.cfg | 4 +- .../c_test/driver_test/SANITY0001-addr/addr.c | 54 ++ .../driver_test/SANITY0001-addr/expected.txt | 0 .../driver_test/SANITY0001-addr/test.cfg | 2 + .../c_test/driver_test/SANITY0002-argc/argc.c | 26 + .../driver_test/SANITY0002-argc/expected.txt | 0 .../driver_test/SANITY0002-argc/test.cfg | 2 + .../.raw_file_list.txt | 4 + .../SANITY0003-array_single/array_single.ast | Bin 0 -> 672984 bytes .../SANITY0003-array_single/array_single.c | 86 +++ .../SANITY0003-array_single/expected.txt | 0 .../SANITY0003-array_single/test.cfg | 2 + .../driver_test/SANITY0004-binop/binop.c | 73 +++ .../driver_test/SANITY0004-binop/expected.txt | 0 .../driver_test/SANITY0004-binop/test.cfg | 2 + .../c_test/driver_test/SANITY0005-cand/cand.c | 35 ++ .../driver_test/SANITY0005-cand/expected.txt | 0 .../driver_test/SANITY0005-cand/test.cfg | 2 + .../driver_test/SANITY0006-goto/expected.txt | 0 .../c_test/driver_test/SANITY0006-goto/goto.c | 35 ++ .../driver_test/SANITY0006-goto/test.cfg | 2 + .../driver_test/SANITY0007-hello/expected.txt | 0 .../driver_test/SANITY0007-hello/hello.c | 27 + .../driver_test/SANITY0007-hello/test.cfg | 2 + .../SANITY0008-if_call_return/expected.txt | 0 .../if_call_return.c | 44 ++ .../SANITY0008-if_call_return/test.cfg | 2 + .../SANITY0009-if_else/expected.txt | 0 .../driver_test/SANITY0009-if_else/if_else.c | 28 + .../driver_test/SANITY0009-if_else/test.cfg | 2 + .../SANITY0010-if_else_fp/expected.txt | 0 .../SANITY0010-if_else_fp/if_else_fp.c | 108 ++++ .../SANITY0010-if_else_fp/test.cfg | 2 + .../SANITY0011-ind_call/expected.txt | 0 .../SANITY0011-ind_call/ind_call.c | 31 ++ .../driver_test/SANITY0011-ind_call/test.cfg | 2 + .../SANITY0012-large_stack/expected.txt | 0 .../SANITY0012-large_stack/large_stack.c | 43 ++ .../SANITY0012-large_stack/test.cfg | 2 + .../SANITY0013-memexpr/expected.txt | 0 .../driver_test/SANITY0013-memexpr/memexpr.c | 40 ++ .../driver_test/SANITY0013-memexpr/test.cfg | 2 + .../SANITY0014-select/expected.txt | 0 .../driver_test/SANITY0014-select/select.c | 28 + .../driver_test/SANITY0014-select/test.cfg | 2 + .../SANITY0015-select_fp/expected.txt | 0 .../SANITY0015-select_fp/select_fp.c | 29 + .../driver_test/SANITY0015-select_fp/test.cfg | 2 + .../driver_test/SANITY0016-set/expected.txt | 0 .../c_test/driver_test/SANITY0016-set/set.c | 112 ++++ .../driver_test/SANITY0016-set/test.cfg | 2 + .../SANITY0017-struct_bits/expected.txt | 0 .../SANITY0017-struct_bits/struct_bits.c | 85 +++ .../SANITY0017-struct_bits/test.cfg | 2 + .../SANITY0018-sum_array/expected.txt | 0 .../SANITY0018-sum_array/sum_array.c | 43 ++ .../driver_test/SANITY0018-sum_array/test.cfg | 2 + .../driver_test/SANITY0019-sum/expected.txt | 0 .../c_test/driver_test/SANITY0019-sum/sum.c | 31 ++ .../driver_test/SANITY0019-sum/test.cfg | 2 + .../SANITY0020-vararg2/expected.txt | 0 .../driver_test/SANITY0020-vararg2/test.cfg | 2 + .../driver_test/SANITY0020-vararg2/vararg2.c | 36 ++ .../SANITY0021-cc_param2/cc_param2.c | 46 ++ .../SANITY0021-cc_param2/expected.txt | 0 .../driver_test/SANITY0021-cc_param2/test.cfg | 2 + .../SANITY0022-cc_param3/cc_param3.c | 72 +++ .../SANITY0022-cc_param3/expected.txt | 0 .../driver_test/SANITY0022-cc_param3/test.cfg | 2 + .../driver_test/SANITY0023-cc_sret/cc_sret.c | 186 +++++++ .../SANITY0023-cc_sret/expected.txt | 0 .../driver_test/SANITY0023-cc_sret/test.cfg | 2 + .../SANITY0024-vararg1/expected.txt | 0 .../driver_test/SANITY0024-vararg1/test.cfg | 2 + .../driver_test/SANITY0024-vararg1/vararg1.c | 73 +++ .../SANITY0025-cc_param1/cc_param1.c | 65 +++ .../SANITY0025-cc_param1/expected.txt | 0 .../driver_test/SANITY0025-cc_param1/test.cfg | 2 + .../SANITY0026-matrixmult/expected.txt | 0 .../SANITY0026-matrixmult/matrixmult.c | 50 ++ .../SANITY0026-matrixmult/test.cfg | 2 + .../driver_test/SANITY0027-convert/convert.c | 44 ++ .../SANITY0027-convert/expected.txt | 0 .../driver_test/SANITY0027-convert/test.cfg | 2 + .../driver_test/SANITY0028-inlineasm/asm.c | 500 ++++++++++++++++++ .../SANITY0028-inlineasm/expected.txt | 0 .../driver_test/SANITY0028-inlineasm/test.cfg | 2 + .../SANITY0029-extensions/expected.txt | 0 .../SANITY0029-extensions/extensions.c | 86 +++ .../SANITY0029-extensions/test.cfg | 2 + .../SANITY0029-neonintrinscs/expected.txt | 0 .../SANITY0029-neonintrinscs/test.cfg | 2 + .../SANITY0029-neonintrinscs/test1.c | 51 ++ .../SANITY0030-neonintrinscs/expected.txt | 0 .../SANITY0030-neonintrinscs/test.cfg | 2 + .../SANITY0030-neonintrinscs/test2.c | 35 ++ .../SANITY0031-neonintrinscs/expected.txt | 0 .../SANITY0031-neonintrinscs/test.cfg | 2 + .../SANITY0031-neonintrinscs/test3.c | 41 ++ .../SANITY0032-neonintrinscs/expected.txt | 0 .../SANITY0032-neonintrinscs/test.cfg | 2 + .../SANITY0032-neonintrinscs/test4.c | 53 ++ .../SANITY0033-neonintrinscs/expected.txt | 0 .../SANITY0033-neonintrinscs/test.cfg | 2 + .../SANITY0033-neonintrinscs/test5.c | 53 ++ .../SANITY0034-neonintrinscs/expected.txt | 0 .../SANITY0034-neonintrinscs/test.cfg | 2 + .../SANITY0034-neonintrinscs/test6.c | 35 ++ .../SANITY0035-neonintrinscs/expected.txt | 0 .../SANITY0035-neonintrinscs/test.cfg | 2 + .../SANITY0035-neonintrinscs/test7.c | 82 +++ .../SANITY0036-neonintrinscs/expected.txt | 0 .../SANITY0036-neonintrinscs/test.cfg | 2 + .../SANITY0036-neonintrinscs/test8.c | 50 ++ .../SANITY0037-neonintrinscs/expected.txt | 0 .../SANITY0037-neonintrinscs/test.cfg | 2 + .../SANITY0037-neonintrinscs/test9.c | 34 ++ .../SANITY0038-neonintrinscs/expected.txt | 0 .../SANITY0038-neonintrinscs/test.cfg | 2 + .../SANITY0038-neonintrinscs/test10.c | 53 ++ .../SANITY0039-neonintrinscs/expected.txt | 0 .../SANITY0039-neonintrinscs/test.cfg | 2 + .../SANITY0039-neonintrinscs/test11.c | 64 +++ .../SANITY0040-neonintrinscs/expected.txt | 0 .../SANITY0040-neonintrinscs/test.cfg | 2 + .../SANITY0040-neonintrinscs/test12.c | 75 +++ .../driver_test/issue-AST0061-NEON-Mpl/Mpl.c | 61 +++ .../issue-AST0061-NEON-Mpl/expected.txt | 1 + .../issue-AST0061-NEON-Mpl/test.cfg | 2 + testsuite/driver/src/mode/DRIVER.py | 2 +- 277 files changed, 5543 insertions(+), 9 deletions(-) create mode 100644 testsuite/c_test/driver_test/AST0001-HelloWorld/HelloWorld.c create mode 100644 testsuite/c_test/driver_test/AST0001-HelloWorld/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0001-HelloWorld/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0002-IntPrint/IntPrint.c create mode 100644 testsuite/c_test/driver_test/AST0002-IntPrint/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0002-IntPrint/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0003-CallExpr/CallExpr.c create mode 100644 testsuite/c_test/driver_test/AST0003-CallExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0003-CallExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0004-SameVarName/SameVarName.c create mode 100644 testsuite/c_test/driver_test/AST0004-SameVarName/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0004-SameVarName/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/UnaryOperatorExpr.c create mode 100644 testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/ArraySubscriptExpr.c create mode 100644 testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0007-ConditionalOperator/ConditionalOperator.c create mode 100644 testsuite/c_test/driver_test/AST0007-ConditionalOperator/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0007-ConditionalOperator/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0008-InitListExpr-Array/InitListExpr-Array.c create mode 100644 testsuite/c_test/driver_test/AST0008-InitListExpr-Array/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0008-InitListExpr-Array/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/BinaryOperatorExpr.c create mode 100755 testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/BinaryOperatorStmt.c create mode 100755 testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0011-MemberExpr/MemberExpr.c create mode 100755 testsuite/c_test/driver_test/AST0011-MemberExpr/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0011-MemberExpr/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0012-AssignExpr/AssignExpr.c create mode 100755 testsuite/c_test/driver_test/AST0012-AssignExpr/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0012-AssignExpr/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0013-IfStmt/IfStmt.c create mode 100755 testsuite/c_test/driver_test/AST0013-IfStmt/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0013-IfStmt/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0014-ForStmt/ForStmt.c create mode 100755 testsuite/c_test/driver_test/AST0014-ForStmt/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0014-ForStmt/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0015-DoStmt/DoStmt.c create mode 100755 testsuite/c_test/driver_test/AST0015-DoStmt/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0015-DoStmt/test.cfg create mode 100755 testsuite/c_test/driver_test/AST0016-WhileStmt/WhileStmt.c create mode 100755 testsuite/c_test/driver_test/AST0016-WhileStmt/expected.txt create mode 100755 testsuite/c_test/driver_test/AST0016-WhileStmt/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/InitListExpr-Struct.c create mode 100644 testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/ConstantExprInEnum.c create mode 100644 testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0020-CStyleCastExpr/CStyleCastExpr.c create mode 100644 testsuite/c_test/driver_test/AST0020-CStyleCastExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0020-CStyleCastExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/SwitchCaseDefault.c create mode 100644 testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0022-StructDReadField/StructDReadField.c create mode 100644 testsuite/c_test/driver_test/AST0022-StructDReadField/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0022-StructDReadField/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0023-StructIReadField/StructIReadField.c create mode 100644 testsuite/c_test/driver_test/AST0023-StructIReadField/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0023-StructIReadField/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/CompoundAssignOperator.c create mode 100644 testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/ConstantExprInBitField.c create mode 100644 testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/BinaryConditionalOperator.c create mode 100644 testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0025-FloatingLiteral/FloatingLiteral.c create mode 100644 testsuite/c_test/driver_test/AST0025-FloatingLiteral/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0025-FloatingLiteral/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0026-CharacterLiteral/CharacterLiteral.c create mode 100644 testsuite/c_test/driver_test/AST0026-CharacterLiteral/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0026-CharacterLiteral/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0026-Sizeof/Sizeof.c create mode 100644 testsuite/c_test/driver_test/AST0026-Sizeof/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0026-Sizeof/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0027-GotoLabel/GotoLabel.c create mode 100644 testsuite/c_test/driver_test/AST0027-GotoLabel/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0027-GotoLabel/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0027-ICallassigned/ICallassigned.c create mode 100644 testsuite/c_test/driver_test/AST0027-ICallassigned/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0027-ICallassigned/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0028-ImplicitCvt/ImplicitCvt.c create mode 100644 testsuite/c_test/driver_test/AST0028-ImplicitCvt/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0028-ImplicitCvt/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0028-PtrBinary/PtrBinary.c create mode 100644 testsuite/c_test/driver_test/AST0028-PtrBinary/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0028-PtrBinary/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/SameNameTypeDeclInDifferentScope.c create mode 100644 testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/SameNameVarIndifferentScope.c create mode 100644 testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0033-StmtExpr/StmtExpr.c create mode 100644 testsuite/c_test/driver_test/AST0033-StmtExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0033-StmtExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0034-ArrayInStruct/ArrayInStruct.c create mode 100644 testsuite/c_test/driver_test/AST0034-ArrayInStruct/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0034-ArrayInStruct/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/ImplicitValueInitExpr.c create mode 100644 testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0036-Complex/Complex.c create mode 100644 testsuite/c_test/driver_test/AST0036-Complex/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0036-Complex/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0036-TypeDef/TypeDef.c create mode 100644 testsuite/c_test/driver_test/AST0036-TypeDef/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0036-TypeDef/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0037-VAArgExpr/VAArgExpr.c create mode 100644 testsuite/c_test/driver_test/AST0037-VAArgExpr/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0037-VAArgExpr/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalAggInit/GlobalAggInit.c create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalAggInit/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalAggInit/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalVar/GlobalVar.c create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalVar/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0038-GlobalVar/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0039-StructInArray/StructInArray.c create mode 100644 testsuite/c_test/driver_test/AST0039-StructInArray/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0039-StructInArray/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0040-LocalAggInitialization/LocalAggInitialization.c create mode 100644 testsuite/c_test/driver_test/AST0040-LocalAggInitialization/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0040-LocalAggInitialization/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0041-AddrOfLabel/AddrOfLabel.c create mode 100644 testsuite/c_test/driver_test/AST0041-AddrOfLabel/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0041-AddrOfLabel/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/builtin_rotateXXX.c create mode 100644 testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0072-InvalidInitializer/InvalidInitializer.c create mode 100644 testsuite/c_test/driver_test/AST0072-InvalidInitializer/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0072-InvalidInitializer/test.cfg create mode 100644 testsuite/c_test/driver_test/AST0073-RorOptimize/RorOptimize.c create mode 100644 testsuite/c_test/driver_test/AST0073-RorOptimize/expected.txt create mode 100644 testsuite/c_test/driver_test/AST0073-RorOptimize/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0001-addr/addr.c create mode 100644 testsuite/c_test/driver_test/SANITY0001-addr/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0001-addr/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0002-argc/argc.c create mode 100644 testsuite/c_test/driver_test/SANITY0002-argc/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0002-argc/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0003-array_single/.raw_file_list.txt create mode 100644 testsuite/c_test/driver_test/SANITY0003-array_single/array_single.ast create mode 100644 testsuite/c_test/driver_test/SANITY0003-array_single/array_single.c create mode 100644 testsuite/c_test/driver_test/SANITY0003-array_single/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0003-array_single/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0004-binop/binop.c create mode 100644 testsuite/c_test/driver_test/SANITY0004-binop/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0004-binop/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0005-cand/cand.c create mode 100644 testsuite/c_test/driver_test/SANITY0005-cand/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0005-cand/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0006-goto/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0006-goto/goto.c create mode 100644 testsuite/c_test/driver_test/SANITY0006-goto/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0007-hello/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0007-hello/hello.c create mode 100644 testsuite/c_test/driver_test/SANITY0007-hello/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0008-if_call_return/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0008-if_call_return/if_call_return.c create mode 100644 testsuite/c_test/driver_test/SANITY0008-if_call_return/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0009-if_else/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0009-if_else/if_else.c create mode 100644 testsuite/c_test/driver_test/SANITY0009-if_else/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0010-if_else_fp/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0010-if_else_fp/if_else_fp.c create mode 100644 testsuite/c_test/driver_test/SANITY0010-if_else_fp/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0011-ind_call/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0011-ind_call/ind_call.c create mode 100644 testsuite/c_test/driver_test/SANITY0011-ind_call/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0012-large_stack/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0012-large_stack/large_stack.c create mode 100644 testsuite/c_test/driver_test/SANITY0012-large_stack/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0013-memexpr/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0013-memexpr/memexpr.c create mode 100644 testsuite/c_test/driver_test/SANITY0013-memexpr/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0014-select/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0014-select/select.c create mode 100644 testsuite/c_test/driver_test/SANITY0014-select/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0015-select_fp/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0015-select_fp/select_fp.c create mode 100644 testsuite/c_test/driver_test/SANITY0015-select_fp/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0016-set/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0016-set/set.c create mode 100644 testsuite/c_test/driver_test/SANITY0016-set/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0017-struct_bits/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0017-struct_bits/struct_bits.c create mode 100644 testsuite/c_test/driver_test/SANITY0017-struct_bits/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0018-sum_array/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0018-sum_array/sum_array.c create mode 100644 testsuite/c_test/driver_test/SANITY0018-sum_array/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0019-sum/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0019-sum/sum.c create mode 100644 testsuite/c_test/driver_test/SANITY0019-sum/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0020-vararg2/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0020-vararg2/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0020-vararg2/vararg2.c create mode 100644 testsuite/c_test/driver_test/SANITY0021-cc_param2/cc_param2.c create mode 100644 testsuite/c_test/driver_test/SANITY0021-cc_param2/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0021-cc_param2/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0022-cc_param3/cc_param3.c create mode 100644 testsuite/c_test/driver_test/SANITY0022-cc_param3/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0022-cc_param3/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0023-cc_sret/cc_sret.c create mode 100644 testsuite/c_test/driver_test/SANITY0023-cc_sret/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0023-cc_sret/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0024-vararg1/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0024-vararg1/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0024-vararg1/vararg1.c create mode 100644 testsuite/c_test/driver_test/SANITY0025-cc_param1/cc_param1.c create mode 100644 testsuite/c_test/driver_test/SANITY0025-cc_param1/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0025-cc_param1/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0026-matrixmult/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0026-matrixmult/matrixmult.c create mode 100644 testsuite/c_test/driver_test/SANITY0026-matrixmult/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0027-convert/convert.c create mode 100644 testsuite/c_test/driver_test/SANITY0027-convert/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0027-convert/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0028-inlineasm/asm.c create mode 100644 testsuite/c_test/driver_test/SANITY0028-inlineasm/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0028-inlineasm/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0029-extensions/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0029-extensions/extensions.c create mode 100644 testsuite/c_test/driver_test/SANITY0029-extensions/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0029-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test1.c create mode 100644 testsuite/c_test/driver_test/SANITY0030-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test2.c create mode 100644 testsuite/c_test/driver_test/SANITY0031-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test3.c create mode 100644 testsuite/c_test/driver_test/SANITY0032-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test4.c create mode 100644 testsuite/c_test/driver_test/SANITY0033-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test5.c create mode 100644 testsuite/c_test/driver_test/SANITY0034-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test6.c create mode 100644 testsuite/c_test/driver_test/SANITY0035-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test7.c create mode 100644 testsuite/c_test/driver_test/SANITY0036-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test8.c create mode 100644 testsuite/c_test/driver_test/SANITY0037-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test9.c create mode 100644 testsuite/c_test/driver_test/SANITY0038-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test10.c create mode 100644 testsuite/c_test/driver_test/SANITY0039-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test11.c create mode 100644 testsuite/c_test/driver_test/SANITY0040-neonintrinscs/expected.txt create mode 100644 testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test.cfg create mode 100644 testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test12.c create mode 100644 testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/Mpl.c create mode 100644 testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/expected.txt create mode 100644 testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/test.cfg diff --git a/testsuite/c_test/driver_test/AST0001-HelloWorld/HelloWorld.c b/testsuite/c_test/driver_test/AST0001-HelloWorld/HelloWorld.c new file mode 100644 index 0000000000..1755ef20bb --- /dev/null +++ b/testsuite/c_test/driver_test/AST0001-HelloWorld/HelloWorld.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + printf("Hello world!"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0001-HelloWorld/expected.txt b/testsuite/c_test/driver_test/AST0001-HelloWorld/expected.txt new file mode 100644 index 0000000000..6769dd60bd --- /dev/null +++ b/testsuite/c_test/driver_test/AST0001-HelloWorld/expected.txt @@ -0,0 +1 @@ +Hello world! \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0001-HelloWorld/test.cfg b/testsuite/c_test/driver_test/AST0001-HelloWorld/test.cfg new file mode 100644 index 0000000000..70d1fd11a1 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0001-HelloWorld/test.cfg @@ -0,0 +1,2 @@ +compile(APP=HelloWorld.c,OPTION="--no-maple-phase -o HelloWorld") +run(HelloWorld) diff --git a/testsuite/c_test/driver_test/AST0002-IntPrint/IntPrint.c b/testsuite/c_test/driver_test/AST0002-IntPrint/IntPrint.c new file mode 100644 index 0000000000..ff457cd6fc --- /dev/null +++ b/testsuite/c_test/driver_test/AST0002-IntPrint/IntPrint.c @@ -0,0 +1,22 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int a = 2; + int b = 3; + printf("%d%d", a, b); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0002-IntPrint/expected.txt b/testsuite/c_test/driver_test/AST0002-IntPrint/expected.txt new file mode 100644 index 0000000000..b393560759 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0002-IntPrint/expected.txt @@ -0,0 +1 @@ +23 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0002-IntPrint/test.cfg b/testsuite/c_test/driver_test/AST0002-IntPrint/test.cfg new file mode 100644 index 0000000000..d509193f69 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0002-IntPrint/test.cfg @@ -0,0 +1,2 @@ +compile(APP=IntPrint.c,OPTION="--no-maple-phase -o IntPrint") +run(IntPrint) diff --git a/testsuite/c_test/driver_test/AST0003-CallExpr/CallExpr.c b/testsuite/c_test/driver_test/AST0003-CallExpr/CallExpr.c new file mode 100644 index 0000000000..c4c51ca0e3 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0003-CallExpr/CallExpr.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int GetValue(int a) { + return a; +} +int AddTwo(int a, int b){ // multi param + return GetValue(a) + GetValue(b); +} +void AssignArr(int a[], int len){ // array param + for (int i = 0; i < len; i++){ + a[i] = i * 2; + } +} +void PrintArr(int a[], int len){ + int i = 0; + while (i < len){ + printf("%d", a[i]); + i++; + } + printf("\n"); +} +int CulSum(int a){ // recursive call + if (a == 1){ + return 1; + } + else{ + return a + CulSum(a - 1); + } +} + +int main() { + int b = 23; + int c = GetValue(b); + printf("%d", c); + + // add more complex cases + printf("b + c = %d\n", AddTwo(b, c)); + int arr[5]; + int len = sizeof(arr)/sizeof(int); + AssignArr(arr, len); + // PrintArr(arr, len); // @fail case, output wrong + printf("%d", CulSum(10)); + + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0003-CallExpr/expected.txt b/testsuite/c_test/driver_test/AST0003-CallExpr/expected.txt new file mode 100644 index 0000000000..0a4b798364 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0003-CallExpr/expected.txt @@ -0,0 +1,2 @@ +23b + c = 46 +55 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0003-CallExpr/test.cfg b/testsuite/c_test/driver_test/AST0003-CallExpr/test.cfg new file mode 100644 index 0000000000..d9db442507 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0003-CallExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=CallExpr.c,OPTION="--no-maple-phase -o CallExpr") +run(CallExpr) diff --git a/testsuite/c_test/driver_test/AST0004-SameVarName/SameVarName.c b/testsuite/c_test/driver_test/AST0004-SameVarName/SameVarName.c new file mode 100644 index 0000000000..cf98843315 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0004-SameVarName/SameVarName.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int a = 1; +int b = 2; + +int main() { + int a = 3; + printf("%d%d", b, a); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0004-SameVarName/expected.txt b/testsuite/c_test/driver_test/AST0004-SameVarName/expected.txt new file mode 100644 index 0000000000..b393560759 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0004-SameVarName/expected.txt @@ -0,0 +1 @@ +23 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0004-SameVarName/test.cfg b/testsuite/c_test/driver_test/AST0004-SameVarName/test.cfg new file mode 100644 index 0000000000..925a8cec62 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0004-SameVarName/test.cfg @@ -0,0 +1,2 @@ +compile(APP=SameVarName.c,OPTION="--no-maple-phase -o SameVarName") +run(SameVarName) diff --git a/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/UnaryOperatorExpr.c b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/UnaryOperatorExpr.c new file mode 100644 index 0000000000..f7a3f0fb43 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/UnaryOperatorExpr.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int a = 1; + +int main() { + int b = 10; + printf("%d", a++); + printf("%d", ++a); + printf("%d", a--); + printf("%d", --a); + printf("%d", b++); + printf("%d", ++b); + printf("%d", b--); + printf("%d", --b); + printf("\n"); + double c = 1.0; + printf("%f", c++); + printf("%f", ++c); + printf("%f", c--); + printf("%f", --c); + printf("\n"); + short d = 2; + printf("%d", d++); + printf("%d", ++d); + printf("%d", d--); + printf("%d", --d); + printf("\n"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/expected.txt b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/expected.txt new file mode 100644 index 0000000000..df573c936f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/expected.txt @@ -0,0 +1,3 @@ +133110121210 +1.0000003.0000003.0000001.000000 +2442 diff --git a/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/test.cfg b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/test.cfg new file mode 100644 index 0000000000..d2d3120ef1 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0005-UnaryOperatorExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=UnaryOperatorExpr.c,OPTION="--no-maple-phase -o UnaryOperatorExpr") +run(UnaryOperatorExpr) diff --git a/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/ArraySubscriptExpr.c b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/ArraySubscriptExpr.c new file mode 100644 index 0000000000..824ef3825c --- /dev/null +++ b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/ArraySubscriptExpr.c @@ -0,0 +1,45 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int a[3] = {1, 2, 3}; + double f[3] = {1.0, 2.1, 3.14}; + int b[10]; + b[2] = 10; + b[3] = 100; + + char c[5]; + c[3] = 'a'; + c[4] = 'b'; + + printf("%d", b[2]); + printf("%d", b[3]); + printf("%c", c[3]); + printf("%c\n", c[4]); + printf("%d%d%d", a[0], a[1], a[2]); + int a_ = a[0] + a[1] + a[2]; + printf("%d", a_); + printf("%lf%lf%lf", f[0], f[1], f[2]); + // fail cases + // double f[3] = {1, 2.1, 3.14}; + // printf("%d%d%d", a[0], a[1], a[1+1]); + // printf("%d%d%d", a[0] + a[1] + a[2]); + // double f_ = f[0] + f[1] + f[2]; + // printf("\n%d%d%d",*(a), *(a+1), *(a+2)); + // printf("%d%d%d",*&a[0], *&a[1+1], *&a[2]); + // printf("\n%f%f%f",*&f[0], *&f[1+1], *&f[2]); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/expected.txt b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/expected.txt new file mode 100644 index 0000000000..eaaf8c10a2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/expected.txt @@ -0,0 +1,2 @@ +10100ab +12361.0000002.1000003.140000 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/test.cfg b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/test.cfg new file mode 100644 index 0000000000..d107c03f79 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0006-ArraySubscriptExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ArraySubscriptExpr.c,OPTION="--no-maple-phase -o ArraySubscriptExpr") +run(ArraySubscriptExpr) diff --git a/testsuite/c_test/driver_test/AST0007-ConditionalOperator/ConditionalOperator.c b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/ConditionalOperator.c new file mode 100644 index 0000000000..03b1c009e6 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/ConditionalOperator.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int a = 9; + int b = (a < 10) ? 1 : 2; + printf("%d %d\n", a, b); // 9 1 + // nested false expr + b = (a < 9) ? 1 : a++; + printf("%d %d\n", a, b); // 10 9 + // multilevel conditional expr + (a < 10) ? (a = 1) : (b < 9) ? 1 : (a = 2, a++); + printf("%d %d\n", a, b); // 3 9 + // noncomparative conditional expr + double c = 0.0; + b = c++ ? 1 : a++; + printf("%d %d %f\n", a, b, c); // 4 3 1.000000 + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0007-ConditionalOperator/expected.txt b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/expected.txt new file mode 100644 index 0000000000..55a04753cf --- /dev/null +++ b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/expected.txt @@ -0,0 +1,4 @@ +9 1 +10 9 +3 9 +4 3 1.000000 diff --git a/testsuite/c_test/driver_test/AST0007-ConditionalOperator/test.cfg b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/test.cfg new file mode 100644 index 0000000000..73ab0445b4 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0007-ConditionalOperator/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ConditionalOperator.c,OPTION="--no-maple-phase -o ConditionalOperator") +run(ConditionalOperator) diff --git a/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/InitListExpr-Array.c b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/InitListExpr-Array.c new file mode 100644 index 0000000000..71b373a3a3 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/InitListExpr-Array.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int arr1[10] = {1 ,2, 3}; + double arr2[10] = {1.5, 2.5 ,8.5}; + char arr3[10] = {'a', 'b'}; + char arr4[2][3] = {'a', 'b','c','d','e'}; + char arr5[2][2][2] = {{'a', 'b','c','d'},{{'b','c'},{'d','e'}}}; + printf("%d\n", arr1[2]); + printf("%f\n", arr2[2]); + printf("%c\n", arr3[0]); + printf("%c\n", arr4[1][1]); + arr4[1][1] = 'z'; + char c = arr4[1][1]; + printf("%c\n", arr4[1][1]); + printf("%c\n",c); + printf("%c\n", arr5[0][1][1]); + arr5[0][1][1] = 'w'; + char c1 = arr5[0][1][1]; + printf("%c\n",c1); + printf("%c\n", arr5[0][1][1]); + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/expected.txt b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/expected.txt new file mode 100644 index 0000000000..62ffe507a2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/expected.txt @@ -0,0 +1,9 @@ +3 +8.500000 +a +e +z +z +d +w +w diff --git a/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/test.cfg b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/test.cfg new file mode 100644 index 0000000000..f81fa19875 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0008-InitListExpr-Array/test.cfg @@ -0,0 +1,2 @@ +compile(APP=InitListExpr-Array.c,OPTION="--no-maple-phase -o InitListExpr-Array") +run(InitListExpr-Array) diff --git a/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/BinaryOperatorExpr.c b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/BinaryOperatorExpr.c new file mode 100755 index 0000000000..02bf197ef0 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/BinaryOperatorExpr.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int a = 1; +struct Person{ + int age; + char c_name; +}; + +int main() { + int b = 10; + int a = 2; + printf("%d + %d=%d\n", a, b, a + b); + printf("%d - %d=%d\n", a, b, a - b); + printf("%d * %d=%d\n", a, b, a * b); + printf("%d / %d=%d\n", a, b, a / b); + printf("%d %% %d=%d\n", a, b, a % b); + printf("%d << %d=%d\n", a, b, a << b); + printf("%d >> %d=%d\n", a, b, a >> b); + printf("%d > %d=%d\n", a, b, a > b); + printf("%d < %d=%d\n", a, b, a < b); + printf("%d <= %d=%d\n", a, b, a <= b); + printf("%d >= %d=%d\n", a, b, a >= b); + printf("%d == %d=%d\n", a, b, a == b); + printf("%d != %d=%d\n", a, b, a != b); + printf("%d & %d=%d\n", a, b, a & b); + printf("%d ^ %d=%d\n", a, b, a ^ b); + printf("%d | %d=%d\n", a, b, a | b); + printf("%d && %d=%d\n", a, b, a && b); + printf("%d || %d=%d\n", a, b, a || b); + printf("%d , %d=%d\n", a, b, (a, b)); + + // add more complex cases + long int l_int = -2147483647; + char c = 'a'; + unsigned int u_int = 65535; + unsigned char u_char = 128; + float flt = 123.456789f; // @fail if no 'f' at end + double db = 1.23456789; + // long double ldb = 12.3456789123456; //@fail case + double ldb = 12.3456789123456; + short int s_int = 0xa5; + int res = c + a; + printf("+:%ld%ud%.2f%f\n",(l_int + c), (u_int + u_char), (flt + db), (ldb + s_int)); + printf("-:%ld%ud%.2f%f\n",(l_int - c), (u_int - u_char), (flt - db), (ldb - s_int)); + printf("*:%ld%ud%.2f%f\n",(l_int * c), (u_int * u_char), (flt * db), (ldb * s_int)); + printf("/:%ld%ud%.2f%f\n",(l_int / c), (u_int / u_char), (flt / db), (ldb / s_int)); + // printf("%%:%ld%ud%d%d\n",(l_int % c), (u_int % u_char), ((int)flt % (int)db), ((int)ldb / (int)s_int)); //@fail case + // printf("&:%ld%ud%d%d\n",(l_int & c), (u_int & u_char), ((int)flt & (int)db), (int)ldb & (int)s_int); //@fail case + // printf("&:%ld%ud%d%d\n",(l_int | c), (u_int | u_char), ((int)flt | (int)db), (int)ldb | (int)s_int); //@fail case + // printf("&:%ld%ud%d%d\n",(l_int ^ c), (u_int ^ u_char), ((int)flt ^ (int)db), (int)ldb ^ (int)s_int); //@fail case + + struct Person p; + struct Person *ptr = &p; + p.age = 10; + p.c_name = 'p'; + printf("%d%d", ptr->age + 10, ptr->c_name + 10); + printf("%d%d", p.age + 10, p.c_name + 10); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/expected.txt b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/expected.txt new file mode 100755 index 0000000000..437d8426a9 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/expected.txt @@ -0,0 +1,24 @@ +2 + 10=12 +2 - 10=-8 +2 * 10=20 +2 / 10=0 +2 % 10=2 +2 << 10=2048 +2 >> 10=0 +2 > 10=0 +2 < 10=1 +2 <= 10=1 +2 >= 10=0 +2 == 10=0 +2 != 10=1 +2 & 10=2 +2 ^ 10=8 +2 | 10=10 +2 && 10=1 +2 || 10=1 +2 , 10=10 ++:-214748355065663d124.69177.345679 +-:-214748374465407d122.22-152.654321 +*:-2083059137598388480d152.422037.037021 +/:-22139006511d100.000.074822 +2012220122 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/test.cfg b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/test.cfg new file mode 100755 index 0000000000..01b93635f6 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0009-BinaryOperatorExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=BinaryOperatorExpr.c,OPTION="--no-maple-phase -o BinaryOperatorExpr") +run(BinaryOperatorExpr) diff --git a/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/BinaryOperatorStmt.c b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/BinaryOperatorStmt.c new file mode 100755 index 0000000000..4d961c9b28 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/BinaryOperatorStmt.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int a = 1; + +int main() { + int b = 10; + int a = 2; + a + b; + a - b; + a * b; + a / b; + a % b; + a << b; + a >> b; + a > b; + a < b; + a <= b; + a >= b; + a == b; + a != b; + a & b; + a ^ b; + a | b; + a && b; + a || b; + printf("ok\n"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/expected.txt b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/expected.txt new file mode 100755 index 0000000000..9766475a41 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/expected.txt @@ -0,0 +1 @@ +ok diff --git a/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/test.cfg b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/test.cfg new file mode 100755 index 0000000000..86f50d8929 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0010-BinaryOperatorStmt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=BinaryOperatorStmt.c,OPTION="--no-maple-phase -o BinaryOperatorStmt") +run(BinaryOperatorStmt) diff --git a/testsuite/c_test/driver_test/AST0011-MemberExpr/MemberExpr.c b/testsuite/c_test/driver_test/AST0011-MemberExpr/MemberExpr.c new file mode 100755 index 0000000000..e8c1796957 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0011-MemberExpr/MemberExpr.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +struct A { + int a; + int b; +}; +struct B { + struct A a; + struct A *pa; + int d; + char c; + double f[1]; +}; + +int main() { + struct A a; + struct A *pa = &a; + a.a = 1; + a.b = 2; + printf("%d,", a.a); + printf("%d,", a.b); + printf("%d,", pa->a); + printf("%d\n", pa->b); + + // add more cases + struct B b; + struct B *pb = &b; + b.pa = &a; + b.a.a = 11; + b.a.b = 22; + b.d = -32766; + b.c = 'b'; + printf("%c", pb->c); + printf("%d", b.d); + b.f[0] = 1.1; + printf("%d\n", pb->a.a + pb->a.b + pb->d); + b.pa = &b.a; + printf("%d%d", b.pa->a, b.pa->b); + printf("%d", b.a.a + b.a.b + b.d); + + struct C { + struct B b; + struct B *pb; + } c; + c.pb = &c.b; + struct C *pc = &c; + c.b = b; + pc->b = b; + c.b.pa = &a; + c.b.a.a = 11; + c.b.a.b = 22; + c.b.d = -32766; + c.b.c = 'b'; + // c.b.f[0] = 1.11; // fail case + c.b.pa = &c.b.a; + printf("%c%c%c%c", c.b.c, pc->b.c, c.pb->c, pc->pb->c); + printf("%d%d%d%d", c.b.pa->a, c.b.a.a, c.pb->a.a, c.pb->pa->a); + printf("%d%d%d%d", pc->b.pa->a, pc->b.a.a, pc->pb->a.a, pc->pb->pa->a); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0011-MemberExpr/expected.txt b/testsuite/c_test/driver_test/AST0011-MemberExpr/expected.txt new file mode 100755 index 0000000000..16b8d24d1e --- /dev/null +++ b/testsuite/c_test/driver_test/AST0011-MemberExpr/expected.txt @@ -0,0 +1,3 @@ +1,2,1,2 +b-32766-32733 +1122-32733bbbb1111111111111111 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0011-MemberExpr/test.cfg b/testsuite/c_test/driver_test/AST0011-MemberExpr/test.cfg new file mode 100755 index 0000000000..25c8b7a8be --- /dev/null +++ b/testsuite/c_test/driver_test/AST0011-MemberExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=MemberExpr.c,OPTION="--no-maple-phase -o MemberExpr") +run(MemberExpr) diff --git a/testsuite/c_test/driver_test/AST0012-AssignExpr/AssignExpr.c b/testsuite/c_test/driver_test/AST0012-AssignExpr/AssignExpr.c new file mode 100755 index 0000000000..db9c32123f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0012-AssignExpr/AssignExpr.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +struct A { + int a; + int b; +}; + +int main() { + int a = 0; + int b = 1; + int c = 2; + int *pb = &b; + int *pc = &c; + struct A sa; + struct A sb; + struct A *psb = &sb; + sa.a = 0; + sa.b = 0; + sb.a = 0; + sb.b = 0; + printf("%d,", a); + a = 1; + printf("%d,", a); + printf("%d,", *pb); + pb = pc; + printf("%d,", *pc); + *pc = 4; + printf("%d,", *pc); + printf("%d,", sa.a); + printf("%d,", sa.b); + sa.a = 1; + sa.b = 2; + printf("%d,", sa.a); + printf("%d,", sa.b); + printf("%d,", psb->a); + printf("%d,", psb->b); + psb->a = 3; + psb->b = 4; + printf("%d,", psb->a); + printf("%d,", psb->b); + + int arr[] = {1,2,3,4,5}; + int *parr = arr; + printf("%d,", *(arr + 1)); + printf("%d,", *(1 + arr)); + printf("%d\n", *(1 + arr - 2 + 1)); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0012-AssignExpr/expected.txt b/testsuite/c_test/driver_test/AST0012-AssignExpr/expected.txt new file mode 100755 index 0000000000..5bd06043f4 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0012-AssignExpr/expected.txt @@ -0,0 +1 @@ +0,1,1,2,4,0,0,1,2,0,0,3,4,2,2,1 diff --git a/testsuite/c_test/driver_test/AST0012-AssignExpr/test.cfg b/testsuite/c_test/driver_test/AST0012-AssignExpr/test.cfg new file mode 100755 index 0000000000..4c20af46f0 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0012-AssignExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=AssignExpr.c,OPTION="--no-maple-phase -o AssignExpr") +run(AssignExpr) diff --git a/testsuite/c_test/driver_test/AST0013-IfStmt/IfStmt.c b/testsuite/c_test/driver_test/AST0013-IfStmt/IfStmt.c new file mode 100755 index 0000000000..d842b98281 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0013-IfStmt/IfStmt.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + int a = 1; + int b = 0; + if (a) { + printf("1,"); + } + if (b) { + printf("failed"); + } + if (a) { + printf("1,"); + } else { + printf("failed"); + } + if (b) { + printf("failed"); + } else { + printf("1\n"); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0013-IfStmt/expected.txt b/testsuite/c_test/driver_test/AST0013-IfStmt/expected.txt new file mode 100755 index 0000000000..5b8274e039 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0013-IfStmt/expected.txt @@ -0,0 +1 @@ +1,1,1 diff --git a/testsuite/c_test/driver_test/AST0013-IfStmt/test.cfg b/testsuite/c_test/driver_test/AST0013-IfStmt/test.cfg new file mode 100755 index 0000000000..9778f942f2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0013-IfStmt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=IfStmt.c,OPTION="--no-maple-phase -o IfStmt") +run(IfStmt) diff --git a/testsuite/c_test/driver_test/AST0014-ForStmt/ForStmt.c b/testsuite/c_test/driver_test/AST0014-ForStmt/ForStmt.c new file mode 100755 index 0000000000..59a44f5000 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0014-ForStmt/ForStmt.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + for (int i = 0; i < 5; i++) { + printf("%d,", i); + } + int a = 0; + for (; a < 5; a++) { + printf("%d,", a); + } + int b = 0; + for (;; b++) { + printf("%d,", b); + if (b >= 5) { + break; + } + } + int c = 10; + for (;;) { + printf("%d,", c); + c = c - 1; + if (c <= 5) { + break; + } + } + for (int i = 0; i < 5; i++) { + if (i == 2) { + continue; + } + printf("%d,", i); + } + printf("0\n"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0014-ForStmt/expected.txt b/testsuite/c_test/driver_test/AST0014-ForStmt/expected.txt new file mode 100755 index 0000000000..242b3354ac --- /dev/null +++ b/testsuite/c_test/driver_test/AST0014-ForStmt/expected.txt @@ -0,0 +1 @@ +0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,5,10,9,8,7,6,0,1,3,4,0 diff --git a/testsuite/c_test/driver_test/AST0014-ForStmt/test.cfg b/testsuite/c_test/driver_test/AST0014-ForStmt/test.cfg new file mode 100755 index 0000000000..823af40a9b --- /dev/null +++ b/testsuite/c_test/driver_test/AST0014-ForStmt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ForStmt.c,OPTION="--no-maple-phase -o ForStmt") +run(ForStmt) diff --git a/testsuite/c_test/driver_test/AST0015-DoStmt/DoStmt.c b/testsuite/c_test/driver_test/AST0015-DoStmt/DoStmt.c new file mode 100755 index 0000000000..890e821898 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0015-DoStmt/DoStmt.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + int i = 0; + do { + printf("%d,", i); + if (i == 3) { + continue; + } + } while (++i < 5); + i = 0; + do { + printf("%d,", i); + if (i == 3) { + break; + } + } while (++i < 5); + i = 0; + do { + i = i + 1; + printf("%d,", i); + if (i == 3) { + break; + } + } while (i < 5); + i = 0; + do { + i = i + 1; + printf("%d,", i); + if (i == 3) { + continue; + } + } while (i < 5); + printf("0\n"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0015-DoStmt/expected.txt b/testsuite/c_test/driver_test/AST0015-DoStmt/expected.txt new file mode 100755 index 0000000000..f56a9ced10 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0015-DoStmt/expected.txt @@ -0,0 +1 @@ +0,1,2,3,4,0,1,2,3,1,2,3,1,2,3,4,5,0 diff --git a/testsuite/c_test/driver_test/AST0015-DoStmt/test.cfg b/testsuite/c_test/driver_test/AST0015-DoStmt/test.cfg new file mode 100755 index 0000000000..4f700435e5 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0015-DoStmt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=DoStmt.c,OPTION="--no-maple-phase -o DoStmt") +run(DoStmt) diff --git a/testsuite/c_test/driver_test/AST0016-WhileStmt/WhileStmt.c b/testsuite/c_test/driver_test/AST0016-WhileStmt/WhileStmt.c new file mode 100755 index 0000000000..e9f6094f97 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0016-WhileStmt/WhileStmt.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + int i = 0; + while (++i < 5) { + if (i == 3) { + continue; + } + printf("%d,", i); + } + i = 0; + while (++i < 5) { + if (i == 3) { + break; + } + printf("%d,", i); + } + i = 1; + while (i) { + i = i + 1; + printf("%d,", i); + if (i > 3) { + i = 0; + } + } + int a = 0; + while (1) { + if (a >= 5) { + break; + } + printf("%d,", a); + a = a + 1; + } + printf("0\n"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0016-WhileStmt/expected.txt b/testsuite/c_test/driver_test/AST0016-WhileStmt/expected.txt new file mode 100755 index 0000000000..bc2ea163a0 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0016-WhileStmt/expected.txt @@ -0,0 +1 @@ +1,2,4,1,2,2,3,4,0,1,2,3,4,0 diff --git a/testsuite/c_test/driver_test/AST0016-WhileStmt/test.cfg b/testsuite/c_test/driver_test/AST0016-WhileStmt/test.cfg new file mode 100755 index 0000000000..f6dc0054ee --- /dev/null +++ b/testsuite/c_test/driver_test/AST0016-WhileStmt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=WhileStmt.c,OPTION="--no-maple-phase -o WhileStmt") +run(WhileStmt) diff --git a/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/InitListExpr-Struct.c b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/InitListExpr-Struct.c new file mode 100644 index 0000000000..4d536dada8 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/InitListExpr-Struct.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include + +struct Str2 { + short c; + int e; +}; + +struct Str1 { + int a; + double b; + char ch[2]; + struct Str2 d; +}; + +int main() { + // printf("%c", myStr1.ch[0]) not support temporarily + struct Str1 myStr1 = {1, 1.5, {'a', 'b'}, {2, 3}}; + printf("%d:%f:%hd:%d\n", myStr1.a, myStr1.b, myStr1.d.c, myStr1.d.e); + + struct Str2 myStr2 = {4, 5}; + struct Str1 myStr3 = {1, 1.5, {'a', 'b'}, .d = myStr2}; + printf("%d:%f:%hd:%d\n", myStr3.a, myStr3.b, myStr3.d.c, myStr3.d.e); + + struct Str1 myStr4 = {1, 1.5, {'a', 'b'}, .d = myStr2, .d.c = 6, .d.e = 7}; + printf("%d:%f:%hd:%d\n", myStr4.a, myStr4.b, myStr4.d.c, myStr4.d.e); + + struct Str1 myStr5 = {1, 1.5, {'a', 'b'}, .d = myStr2, .d.c = 8}; + printf("%d:%f:%hd:%d\n", myStr5.a, myStr5.b, myStr5.d.c, myStr5.d.e); + + struct Str2 myStr6 = (struct Str2){9, 10}; + printf("%hd:%d\n", myStr6.c, myStr6.e); + + size_t lenA = offsetof(struct Str1, a); + printf("%ld\n", lenA); + + size_t lenB = offsetof(struct Str1, b); + printf("%ld\n", lenB); + + size_t lenCh = offsetof(struct Str1, ch); + printf("%ld\n", lenCh); + + size_t lenD = offsetof(struct Str1, d); + printf("%ld\n", lenD); + + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/expected.txt b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/expected.txt new file mode 100644 index 0000000000..04c3a5eda9 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/expected.txt @@ -0,0 +1,9 @@ +1:1.500000:2:3 +1:1.500000:4:5 +1:1.500000:6:7 +1:1.500000:8:0 +9:10 +0 +8 +16 +20 diff --git a/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/test.cfg b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/test.cfg new file mode 100644 index 0000000000..55d472802b --- /dev/null +++ b/testsuite/c_test/driver_test/AST0017-InitListExpr-Struct/test.cfg @@ -0,0 +1,2 @@ +compile(APP=InitListExpr-Struct.c,OPTION="--no-maple-phase -o InitListExpr-Struct") +run(InitListExpr-Struct) diff --git a/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/ConstantExprInEnum.c b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/ConstantExprInEnum.c new file mode 100644 index 0000000000..44d53f8727 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/ConstantExprInEnum.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +enum G { + g0 = 1, + g1 = sizeof(int), + g2, +}; + +int main() { + enum L { + l0 = 2, + l1, + l2 = sizeof(float) + }; + + printf("g0 = %d, g1 = %d, g2 = %d\nl0 = %d, l1 = %d, l2 = %d\n", g0, g1, g2, l0, l1, l2); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/expected.txt b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/expected.txt new file mode 100644 index 0000000000..2890d91145 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/expected.txt @@ -0,0 +1,2 @@ +g0 = 1, g1 = 4, g2 = 5 +l0 = 2, l1 = 3, l2 = 4 diff --git a/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/test.cfg b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/test.cfg new file mode 100644 index 0000000000..48918b61d7 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0018-ConstantExprInEnum/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ConstantExprInEnum.c,OPTION="--no-maple-phase -o ConstantExprInEnum") +run(ConstantExprInEnum) diff --git a/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/CStyleCastExpr.c b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/CStyleCastExpr.c new file mode 100644 index 0000000000..6f3c74a632 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/CStyleCastExpr.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct book { + int a; + int b; +}; +int main() { + double a = 2.2; + int b = (int)a; + int c = 3; + double d = (double)c; + struct book m; + m.a = 1; + m.b = 2; + struct book n = (struct book)m; + void *vPtr = (void*)&b; + int *sPtr = (int*)vPtr; + int arr[2]; + arr[0] = 7; + arr[1] = 8; + int *pArr = (int*)arr; + printf("%d, %f, %d, %d, %d, %d\n", b, d, n.a, n.b, *sPtr, *pArr); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/expected.txt b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/expected.txt new file mode 100644 index 0000000000..cdac60069d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/expected.txt @@ -0,0 +1 @@ +2, 3.000000, 1, 2, 2, 7 diff --git a/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/test.cfg b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/test.cfg new file mode 100644 index 0000000000..4ed3c877cc --- /dev/null +++ b/testsuite/c_test/driver_test/AST0020-CStyleCastExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=CStyleCastExpr.c,OPTION="--no-maple-phase -o CStyleCastExpr") +run(CStyleCastExpr) diff --git a/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/SwitchCaseDefault.c b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/SwitchCaseDefault.c new file mode 100644 index 0000000000..2046b8b799 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/SwitchCaseDefault.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + int a = 5; + switch (a) { + case 0:{ + a = 1; + break; + } + default: { + switch (a) { + case 2: + a = 3; + case 3: + a = 10; + case 5: + a = 20; + } + break; + } + } + printf("%d\n", a); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/expected.txt b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/expected.txt new file mode 100644 index 0000000000..209e3ef4b6 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/expected.txt @@ -0,0 +1 @@ +20 diff --git a/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/test.cfg b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/test.cfg new file mode 100644 index 0000000000..52976697fa --- /dev/null +++ b/testsuite/c_test/driver_test/AST0021-SwitchCaseDefault/test.cfg @@ -0,0 +1,2 @@ +compile(APP=SwitchCaseDefault.c,OPTION="--no-maple-phase -o SwitchCaseDefault") +run(SwitchCaseDefault) diff --git a/testsuite/c_test/driver_test/AST0022-StructDReadField/StructDReadField.c b/testsuite/c_test/driver_test/AST0022-StructDReadField/StructDReadField.c new file mode 100644 index 0000000000..82c0bebb10 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0022-StructDReadField/StructDReadField.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +struct Person1 { + char name; + int age; +}; + +struct Person2 { + int age; + char name; +}; + +int main() { + struct Person1 p1; + struct Person2 p2; + p1.name = 'a'; + p1.age = 100; + p2.name = 'a'; + p2.age = 100; + printf("%d%d\n", p1.age, p1.name); + printf("%d%c\n", p1.age, p1.name); + printf("%d%d\n", p2.age, p2.name); + printf("%d%c\n", p2.age, p2.name); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0022-StructDReadField/expected.txt b/testsuite/c_test/driver_test/AST0022-StructDReadField/expected.txt new file mode 100644 index 0000000000..882b71ced2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0022-StructDReadField/expected.txt @@ -0,0 +1,4 @@ +10097 +100a +10097 +100a diff --git a/testsuite/c_test/driver_test/AST0022-StructDReadField/test.cfg b/testsuite/c_test/driver_test/AST0022-StructDReadField/test.cfg new file mode 100644 index 0000000000..ac7084da9d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0022-StructDReadField/test.cfg @@ -0,0 +1,2 @@ +compile(APP=StructDReadField.c,OPTION="--no-maple-phase -o StructDReadField") +run(StructDReadField) diff --git a/testsuite/c_test/driver_test/AST0023-StructIReadField/StructIReadField.c b/testsuite/c_test/driver_test/AST0023-StructIReadField/StructIReadField.c new file mode 100644 index 0000000000..716522bc6d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0023-StructIReadField/StructIReadField.c @@ -0,0 +1,41 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +struct Person1 { + char name; + int age; +}; + +struct Person2 { + int age; + char name; +}; + +int main() { + struct Person1 p1; + struct Person2 p2; + p1.name = 'a'; + p1.age = 100; + p2.name = 'a'; + p2.age = 100; + struct Person1 *p1Ptr = &p1; + struct Person2 *p2Ptr = &p2; + printf("%d%d\n", p1Ptr->age, p1Ptr->name); + printf("%d%c\n", p1Ptr->age, p1Ptr->name); + printf("%d%d\n", p2Ptr->age, p2Ptr->name); + printf("%d%c\n", p2Ptr->age, p2Ptr->name); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0023-StructIReadField/expected.txt b/testsuite/c_test/driver_test/AST0023-StructIReadField/expected.txt new file mode 100644 index 0000000000..882b71ced2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0023-StructIReadField/expected.txt @@ -0,0 +1,4 @@ +10097 +100a +10097 +100a diff --git a/testsuite/c_test/driver_test/AST0023-StructIReadField/test.cfg b/testsuite/c_test/driver_test/AST0023-StructIReadField/test.cfg new file mode 100644 index 0000000000..f5b7f2ba6a --- /dev/null +++ b/testsuite/c_test/driver_test/AST0023-StructIReadField/test.cfg @@ -0,0 +1,2 @@ +compile(APP=StructIReadField.c,OPTION="--no-maple-phase -o StructIReadField") +run(StructIReadField) diff --git a/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/CompoundAssignOperator.c b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/CompoundAssignOperator.c new file mode 100644 index 0000000000..15797023d3 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/CompoundAssignOperator.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int g_a = 10; +int g_b = 20; + +int main() +{ + int a = 15; + int b = 35; + + b += a; // += + g_b += g_a; + a += g_a; + printf("%d%d%d\n", b, g_b, a); + b -= a; // -= + g_b -= g_a; + a -= g_a; + printf("%d%d%d\n", b, g_b, a); + b *= a; // *= + g_b *= g_a; + a *= g_a; + printf("%d%d%d\n", b, g_b, a); + b /= a; // /= + g_b /= g_a; + a /= g_a; + printf("%d%d%d\n", b, g_b, a); + b %= a; // %= + g_b %= g_a; + a %= g_a; + printf("%d%d%d\n", b, g_b, a); + + // TODO: need more nested example + b += g_a; + g_b %= a; + printf("%d%d\n", b, g_b); + + return 0; +} \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/expected.txt b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/expected.txt new file mode 100644 index 0000000000..9f93438502 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/expected.txt @@ -0,0 +1,6 @@ +503025 +252015 +375200150 +22015 +205 +120 diff --git a/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/test.cfg b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/test.cfg new file mode 100644 index 0000000000..64a2fef8b1 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-CompoundAssignOperator/test.cfg @@ -0,0 +1,2 @@ +compile(APP=CompoundAssignOperator.c,OPTION="--no-maple-phase -o CompoundAssignOperator") +run(CompoundAssignOperator) diff --git a/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/ConstantExprInBitField.c b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/ConstantExprInBitField.c new file mode 100644 index 0000000000..41ebbdc093 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/ConstantExprInBitField.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct A { + int i:2; + unsigned int j:2; +}; + +int main() { + struct A a; + a.i = 0x1; + printf("%d\n", a.i); + + a.i = 0x2; + printf("%d\n", a.i); + + a.i = 0x3; + printf("%d\n", a.i); + + a.i = 0x5; + printf("%d\n", a.i); + + a.i = 0x7; + printf("%d\n", a.i); + + a.j = 0x1; + printf("%u\n", a.j); + + a.j = 0x2; + printf("%u\n", a.j); + + a.j = 0x3; + printf("%u\n", a.j); + + a.j = 0x5; + printf("%u\n", a.j); + + a.j = 0x7; + printf("%u\n", a.j); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/expected.txt b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/expected.txt new file mode 100644 index 0000000000..7e9528a92f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/expected.txt @@ -0,0 +1,10 @@ +1 +-2 +-1 +1 +-1 +1 +2 +3 +1 +3 diff --git a/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/test.cfg b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/test.cfg new file mode 100644 index 0000000000..43b997f8bb --- /dev/null +++ b/testsuite/c_test/driver_test/AST0024-ConstantExprInBitField/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ConstantExprInBitField.c,OPTION="--no-maple-phase -o ConstantExprInBitField") +run(ConstantExprInBitField) diff --git a/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/BinaryConditionalOperator.c b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/BinaryConditionalOperator.c new file mode 100644 index 0000000000..b45b53397f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/BinaryConditionalOperator.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int a = 0; + // comparative conditioan: a < 10, get true val = (a < 10) = 1 + int b = (a < 10) ?: 1; + printf("%d %d\n", a, b); // 0 1 + // noncomparative condition: a = 0, get false val + b = a ?: 2; + printf("%d %d\n", a, b); // 0 2 + + b = a++ ?: 2; + printf("%d %d\n", a, b); // 1 2 + // noncomparative conditioan: a = 10, get true val = 10 + a = 10; + b = a++ ?: 2; + printf("%d %d\n", a, b); // 11 10 + // comparative conditioan: a < 9, get false val + b = (a < 9) ?: a++; + printf("%d %d\n", a, b); // 12 11 + // multilevel conditional expr + b = (a < 10) ?: (b < 9) ?: (a = 2, a++); + printf("%d %d\n", a, b); // 3 2 + + + // double type noncomparative condition, get false val + double c = 0.0; + double d = c++ ?: 2.0; + printf("%f %f\n", c, d); // 1.000000 2.000000 + // double type noncomparative condition, get true val + c = 5.0; + d = c ?: 2.0; + printf("%f %f\n", c, d); // 5.000000 5.000000 + // double type comparative condition, get true val + d = (c < 10.0) ?: 2.0; + printf("%f %f\n", c, d); // 5.000000 1.000000 + // double type comparative condition, get false val + d = (c < 1.0) ?: 2.0; + printf("%f %f\n", c, d); // 5.000000 2.000000 + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/expected.txt b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/expected.txt new file mode 100644 index 0000000000..d24b8de30f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/expected.txt @@ -0,0 +1,10 @@ +0 1 +0 2 +1 2 +11 10 +12 11 +3 2 +1.000000 2.000000 +5.000000 5.000000 +5.000000 1.000000 +5.000000 2.000000 diff --git a/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/test.cfg b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/test.cfg new file mode 100644 index 0000000000..7272d34d88 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-BinaryConditionalOperator/test.cfg @@ -0,0 +1,2 @@ +compile(APP=BinaryConditionalOperator.c,OPTION="--no-maple-phase -o BinaryConditionalOperator") +run(BinaryConditionalOperator) diff --git a/testsuite/c_test/driver_test/AST0025-FloatingLiteral/FloatingLiteral.c b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/FloatingLiteral.c new file mode 100644 index 0000000000..b5d3058b3f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/FloatingLiteral.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + + // floating literal + printf("%.1f\n", 12345.678901); + printf("%2.3f\n", 12345.678901); + printf("%6.7f\n", 12345.678901); + + printf("%.1f\n", 105.861233e2); + printf("%5.3f\n", 105.861233e2); + printf("%5.8f\n", 105.861233e2); + + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0025-FloatingLiteral/expected.txt b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/expected.txt new file mode 100644 index 0000000000..9d22ef0591 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/expected.txt @@ -0,0 +1,6 @@ +12345.7 +12345.679 +12345.6789010 +10586.1 +10586.123 +10586.12330000 diff --git a/testsuite/c_test/driver_test/AST0025-FloatingLiteral/test.cfg b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/test.cfg new file mode 100644 index 0000000000..3db67249c9 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0025-FloatingLiteral/test.cfg @@ -0,0 +1,2 @@ +compile(APP=FloatingLiteral.c,OPTION="--no-maple-phase -o FloatingLiteral") +run(FloatingLiteral) diff --git a/testsuite/c_test/driver_test/AST0026-CharacterLiteral/CharacterLiteral.c b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/CharacterLiteral.c new file mode 100644 index 0000000000..2033762104 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/CharacterLiteral.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +char g_a = 'a'; +int main() { + + for (int c = 33; c <127; c++){ // ASCII 33->"!",...126->"~" + printf("%c\n",c); + } + + return 0; +} \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0026-CharacterLiteral/expected.txt b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/expected.txt new file mode 100644 index 0000000000..e17df2ad76 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/expected.txt @@ -0,0 +1,94 @@ +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +[ +\ +] +^ +_ +` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ diff --git a/testsuite/c_test/driver_test/AST0026-CharacterLiteral/test.cfg b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/test.cfg new file mode 100644 index 0000000000..dbdc06baff --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-CharacterLiteral/test.cfg @@ -0,0 +1,2 @@ +compile(APP=CharacterLiteral.c,OPTION="--no-maple-phase -o CharacterLiteral") +run(CharacterLiteral) diff --git a/testsuite/c_test/driver_test/AST0026-Sizeof/Sizeof.c b/testsuite/c_test/driver_test/AST0026-Sizeof/Sizeof.c new file mode 100644 index 0000000000..6b628a7984 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-Sizeof/Sizeof.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + printf("%d,",sizeof(int)); + printf("%d,",sizeof(long)); + int a; + printf("%d,",sizeof(a)); + struct A { + int a; + double b; + }; + struct A aa; + printf("%d,",sizeof(struct A)); + printf("%d\n",sizeof(aa)); + + // complex cases + long int l_int = -2147483647; + char c = 'a'; + unsigned int u_int = 65535; + unsigned char u_char = 128; + float flt = 123.456789f; + double db = 1.23456789; + // long double ldb = 12.3456789123456; //@fail case + double ldb = 12.3456789123456; + short int s_int = 0xa5; + int res = c + a; + char *p; + printf("%lu%lu%lu%lu", sizeof(l_int), sizeof(c), sizeof(u_int), sizeof(u_char)); + printf("%lu%lu%lu%lu\n", sizeof(flt), sizeof(db), sizeof(s_int), sizeof(res)); + struct B { + struct A a; + } B; + union u{ + char c; + double d; + } u; + int arr[5]; + double arr2[10]; + printf("%lu%lu%lu%lu", sizeof(struct B), sizeof(p), sizeof(arr), sizeof(arr2)); + printf("%lu%lu%lu%lu%lu%lu", sizeof(8), sizeof(8.8), sizeof("arr"), sizeof(u), sizeof(u.c), sizeof(u.d)); + printf("\n%lu%lu%lu", sizeof(aa), sizeof(aa.a), sizeof(aa.b)); + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0026-Sizeof/expected.txt b/testsuite/c_test/driver_test/AST0026-Sizeof/expected.txt new file mode 100644 index 0000000000..8109eefd46 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-Sizeof/expected.txt @@ -0,0 +1,4 @@ +4,8,4,16,16 +81414824 +1682080484818 +1648 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0026-Sizeof/test.cfg b/testsuite/c_test/driver_test/AST0026-Sizeof/test.cfg new file mode 100644 index 0000000000..78590d3cd2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0026-Sizeof/test.cfg @@ -0,0 +1,2 @@ +compile(APP=Sizeof.c,OPTION="--no-maple-phase -o Sizeof") +run(Sizeof) diff --git a/testsuite/c_test/driver_test/AST0027-GotoLabel/GotoLabel.c b/testsuite/c_test/driver_test/AST0027-GotoLabel/GotoLabel.c new file mode 100644 index 0000000000..c9d74be0ac --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-GotoLabel/GotoLabel.c @@ -0,0 +1,29 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + printf("1"); + goto i_am_here_1; + printf("failed;"); + i_am_here_1: + printf("1"); + goto i_am_here_2; + printf("failed;"); + i_am_here_2: + printf("1"); + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0027-GotoLabel/expected.txt b/testsuite/c_test/driver_test/AST0027-GotoLabel/expected.txt new file mode 100644 index 0000000000..9d07aa0df5 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-GotoLabel/expected.txt @@ -0,0 +1 @@ +111 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0027-GotoLabel/test.cfg b/testsuite/c_test/driver_test/AST0027-GotoLabel/test.cfg new file mode 100644 index 0000000000..b84b789a27 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-GotoLabel/test.cfg @@ -0,0 +1,2 @@ +compile(APP=GotoLabel.c,OPTION="--no-maple-phase -o GotoLabel") +run(GotoLabel) diff --git a/testsuite/c_test/driver_test/AST0027-ICallassigned/ICallassigned.c b/testsuite/c_test/driver_test/AST0027-ICallassigned/ICallassigned.c new file mode 100644 index 0000000000..31650e1f81 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-ICallassigned/ICallassigned.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +char *fpchar(void) { + return "yes_its_possible1"; +} + +char *(*fpfpchar(void))(void) { + return (fpchar); +} + +char *(*(*fpfpfpchar(void))(void))(void) { + return (fpfpchar); +} + +void fpvoid(void) { + printf("yes_its_possible2"); +} + +void (*fpfpvoid(void))(void) { + return (fpvoid); +} + +void (*(*fpfpfpvoid(void))(void))(void) { + return (fpfpvoid); +} + +void testv() { + printf("yes_its_possible3"); +} + +int testi() { + return 4; +} + +int main() { + char *tmp = (((fpfpfpchar())())()); + printf("%s", tmp); + (((fpfpfpvoid())())()); + testv(); + int a = testi(); + printf("yes_its_possible%d", a); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0027-ICallassigned/expected.txt b/testsuite/c_test/driver_test/AST0027-ICallassigned/expected.txt new file mode 100644 index 0000000000..84fc551375 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-ICallassigned/expected.txt @@ -0,0 +1 @@ +yes_its_possible1yes_its_possible2yes_its_possible3yes_its_possible4 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0027-ICallassigned/test.cfg b/testsuite/c_test/driver_test/AST0027-ICallassigned/test.cfg new file mode 100644 index 0000000000..5e66b63487 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0027-ICallassigned/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ICallassigned.c,OPTION="--no-maple-phase -o ICallassigned") +run(ICallassigned) diff --git a/testsuite/c_test/driver_test/AST0028-ImplicitCvt/ImplicitCvt.c b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/ImplicitCvt.c new file mode 100644 index 0000000000..bbe91ca14e --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/ImplicitCvt.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include + +long a = 65538; +int b = 23; + +int main() { + if (ULONG_MAX >= 2147483647) { + printf("true"); + } + long c = 655351111; + int d = 23; + if (c > d) { + printf("true"); + } + if (a > b) { + printf("true"); + } + float e = 2.2f; + double f = 2.3; + if (f > e) { + printf("true"); + } + int i = e; + int j = f; + int h = 0; + h = e; + printf("%f", e); + printf("%f", f); + printf("%ld", a); + printf("%d", i); + printf("%d", j); + printf("%d", h); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0028-ImplicitCvt/expected.txt b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/expected.txt new file mode 100644 index 0000000000..1f8f545a7d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/expected.txt @@ -0,0 +1 @@ +truetruetruetrue2.2000002.30000065538222 \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0028-ImplicitCvt/test.cfg b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/test.cfg new file mode 100644 index 0000000000..3ec8c8a8da --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-ImplicitCvt/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ImplicitCvt.c,OPTION="--no-maple-phase -o ImplicitCvt") +run(ImplicitCvt) diff --git a/testsuite/c_test/driver_test/AST0028-PtrBinary/PtrBinary.c b/testsuite/c_test/driver_test/AST0028-PtrBinary/PtrBinary.c new file mode 100644 index 0000000000..9c315d2c41 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-PtrBinary/PtrBinary.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + int a = 1; + int b = 2; + int c = 3; + int *pa = &a; + int *pb = &b; + int *pc = &c; + printf("%d,", *pa); + printf("%d,", *(pa+1)); + printf("%d,", *(pa+2)); + printf("%ld\n", (pc - pa)); + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0028-PtrBinary/expected.txt b/testsuite/c_test/driver_test/AST0028-PtrBinary/expected.txt new file mode 100644 index 0000000000..65f986cd21 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-PtrBinary/expected.txt @@ -0,0 +1 @@ +1,2,3,2 diff --git a/testsuite/c_test/driver_test/AST0028-PtrBinary/test.cfg b/testsuite/c_test/driver_test/AST0028-PtrBinary/test.cfg new file mode 100644 index 0000000000..c6f4f7724b --- /dev/null +++ b/testsuite/c_test/driver_test/AST0028-PtrBinary/test.cfg @@ -0,0 +1,2 @@ +compile(APP=PtrBinary.c,OPTION="--no-maple-phase -o PtrBinary") +run(PtrBinary) diff --git a/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/SameNameTypeDeclInDifferentScope.c b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/SameNameTypeDeclInDifferentScope.c new file mode 100644 index 0000000000..cdd0ae332f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/SameNameTypeDeclInDifferentScope.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + struct A { int a; } aa; + aa.a = 111; + { + struct A { double d; } dd; + dd.d = 3.14; + printf("dd.d = %f\n", dd.d); + { + struct A { char c; } cc; + cc.c = 'a'; + printf("cc.c = %c\n", cc.c); + } + } + + printf("aa.a = %d\n", aa.a); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/expected.txt b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/expected.txt new file mode 100644 index 0000000000..7a47b67b07 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/expected.txt @@ -0,0 +1,3 @@ +dd.d = 3.140000 +cc.c = a +aa.a = 111 diff --git a/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/test.cfg b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/test.cfg new file mode 100644 index 0000000000..2edc687a18 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0031-SameNameTypeDeclInDifferentScope/test.cfg @@ -0,0 +1,2 @@ +compile(APP=SameNameTypeDeclInDifferentScope.c,OPTION="--no-maple-phase -o SameNameTypeDeclInDifferentScope") +run(SameNameTypeDeclInDifferentScope) diff --git a/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/SameNameVarIndifferentScope.c b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/SameNameVarIndifferentScope.c new file mode 100644 index 0000000000..c82534f588 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/SameNameVarIndifferentScope.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +enum { + e = 0 +}; +extern int aa; +int aa; +int main() { + aa = 123; + int x = 1; + printf("e = %d\n", e); + enum E { + e = 11 + }; + { + printf("e = %d\n", e); + enum EE { + e = 22 + }; + printf("x = %d\n", x); + int x = 2; + { + printf("e = %d\n", e); + printf("x = %d\n", x); + int x = 3; + enum EEE { + e = 33 + }; + printf("e = %d\n", e); + printf("x = %d\n", x); + } + printf("x = %d\n", x); + } + printf("e = %d\n", e); + printf("x = %d\n", x); + printf("aa = %d\n", aa); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/expected.txt b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/expected.txt new file mode 100644 index 0000000000..f18d783234 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/expected.txt @@ -0,0 +1,11 @@ +e = 0 +e = 11 +x = 1 +e = 22 +x = 2 +e = 33 +x = 3 +x = 2 +e = 11 +x = 1 +aa = 123 diff --git a/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/test.cfg b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/test.cfg new file mode 100644 index 0000000000..a6b8920b1f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0032-SameNameVarIndifferentScope/test.cfg @@ -0,0 +1,2 @@ +compile(APP=SameNameVarIndifferentScope.c,OPTION="--no-maple-phase -o SameNameVarIndifferentScope") +run(SameNameVarIndifferentScope) diff --git a/testsuite/c_test/driver_test/AST0033-StmtExpr/StmtExpr.c b/testsuite/c_test/driver_test/AST0033-StmtExpr/StmtExpr.c new file mode 100644 index 0000000000..56a804ceea --- /dev/null +++ b/testsuite/c_test/driver_test/AST0033-StmtExpr/StmtExpr.c @@ -0,0 +1,22 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +int main() { + ({int a = 1; a = 2; a;}); + int x = ({int a = 11; a = 22; a;}); + printf("x = %d\n", x); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0033-StmtExpr/expected.txt b/testsuite/c_test/driver_test/AST0033-StmtExpr/expected.txt new file mode 100644 index 0000000000..bb516a7794 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0033-StmtExpr/expected.txt @@ -0,0 +1 @@ +x = 22 diff --git a/testsuite/c_test/driver_test/AST0033-StmtExpr/test.cfg b/testsuite/c_test/driver_test/AST0033-StmtExpr/test.cfg new file mode 100644 index 0000000000..5b0c3defac --- /dev/null +++ b/testsuite/c_test/driver_test/AST0033-StmtExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=StmtExpr.c,OPTION="--no-maple-phase -o StmtExpr") +run(StmtExpr) diff --git a/testsuite/c_test/driver_test/AST0034-ArrayInStruct/ArrayInStruct.c b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/ArrayInStruct.c new file mode 100644 index 0000000000..60952333c3 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/ArrayInStruct.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct C { + char f; +}; +struct B { + char c; + char d; + struct C inc; +}; +struct A { + int a; + int b; + char inArr[2][2]; + double inArr1[2][2]; + struct B inb; +}; + +int main() { + struct A sa = {1, 2, {'a', 'b','c'},{2.5, 6.8,8.5,45.2},{'d','f',{'g'}}}; + char c1 = sa.inArr[0][1]; + char c2 = sa.inArr[1][0]; + double c11 = sa.inArr1[0][1]; + double c21 = sa.inArr1[1][0]; + double c22 = sa.inArr1[1][1]; + sa.inArr1[1][1] = 22.2; + double c23 = sa.inArr1[1][1]; + printf("%c\n",c1); + printf("%c\n",c2); + printf("%f\n",c11); + printf("%f\n",c21); + printf("%f\n",c22); + printf("%f\n",sa.inArr1[1][1]); + printf("%f\n",c23); + printf("%c\n",sa.inb.inc.f); + return 0; +} + diff --git a/testsuite/c_test/driver_test/AST0034-ArrayInStruct/expected.txt b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/expected.txt new file mode 100644 index 0000000000..d36a6db149 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/expected.txt @@ -0,0 +1,8 @@ +b +c +6.800000 +8.500000 +45.200000 +22.200000 +22.200000 +g diff --git a/testsuite/c_test/driver_test/AST0034-ArrayInStruct/test.cfg b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/test.cfg new file mode 100644 index 0000000000..df165fdd48 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0034-ArrayInStruct/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ArrayInStruct.c,OPTION="--no-maple-phase -o ArrayInStruct") +run(ArrayInStruct) diff --git a/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/ImplicitValueInitExpr.c b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/ImplicitValueInitExpr.c new file mode 100644 index 0000000000..e801e1b7ea --- /dev/null +++ b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/ImplicitValueInitExpr.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include + +struct Str2 { + short c; + int e; +}; + +struct Str1 { + int a; + double b; + int arr[2]; + struct Str2 d; +}; + +int main() { + struct Str1 myStr1 = {1}; + printf("%d:%f:%d:%d:%hd:%d\n", myStr1.a, myStr1.b, myStr1.arr[0], myStr1.arr[1], myStr1.d.c, myStr1.d.e); + + struct Str2 myStr2 = {4}; + struct Str1 myStr3 = {1, .d = myStr2}; + printf("%d:%f:%d:%d:%hd:%d\n", myStr3.a, myStr3.b, myStr3.arr[0], myStr3.arr[1], myStr3.d.c, myStr3.d.e); + + myStr2.e = 3; + struct Str1 myStr4 = {1, 1.5, .d = myStr2, .d.c = 5 }; + printf("%d:%f:%d:%d:%hd:%d\n", myStr4.a, myStr4.b, myStr4.arr[0], myStr4.arr[1], myStr4.d.c, myStr4.d.e); + + struct Str1 myStr5 = {1, .arr = {6, 7}, .d.c = 8}; + printf("%d:%f:%d:%d:%hd:%d\n", myStr5.a, myStr5.b, myStr5.arr[0], myStr5.arr[1], myStr5.d.c, myStr5.d.e); + + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/expected.txt b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/expected.txt new file mode 100644 index 0000000000..fbc6574557 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/expected.txt @@ -0,0 +1,4 @@ +1:0.000000:0:0:0:0 +1:0.000000:0:0:4:0 +1:1.500000:0:0:5:0 +1:0.000000:6:7:8:0 diff --git a/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/test.cfg b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/test.cfg new file mode 100644 index 0000000000..8b79c0f7a6 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0035-ImplicitValueInitExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ImplicitValueInitExpr.c,OPTION="--no-maple-phase -o ImplicitValueInitExpr") +run(ImplicitValueInitExpr) diff --git a/testsuite/c_test/driver_test/AST0036-Complex/Complex.c b/testsuite/c_test/driver_test/AST0036-Complex/Complex.c new file mode 100644 index 0000000000..23635b7ec4 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-Complex/Complex.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include + +int main() { + float complex a = 1 + I; + printf("%f + i%f\n", __real a , __imag a); + float complex b = 1 + I; + printf("%f + i%f\n", __real b , __imag b); + float complex c = a + b; + printf("%f + i%f\n", __real c , __imag c); + complex double d = a - b; + printf("%f + i%f\n", __real d , __imag d); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0036-Complex/expected.txt b/testsuite/c_test/driver_test/AST0036-Complex/expected.txt new file mode 100644 index 0000000000..0244aca82c --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-Complex/expected.txt @@ -0,0 +1,4 @@ +1.000000 + i1.000000 +1.000000 + i1.000000 +2.000000 + i2.000000 +0.000000 + i0.000000 diff --git a/testsuite/c_test/driver_test/AST0036-Complex/test.cfg b/testsuite/c_test/driver_test/AST0036-Complex/test.cfg new file mode 100644 index 0000000000..bf01960a57 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-Complex/test.cfg @@ -0,0 +1,2 @@ +compile(APP=Complex.c,OPTION="--no-maple-phase -o Complex") +run(Complex) diff --git a/testsuite/c_test/driver_test/AST0036-TypeDef/TypeDef.c b/testsuite/c_test/driver_test/AST0036-TypeDef/TypeDef.c new file mode 100644 index 0000000000..48455e62d8 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-TypeDef/TypeDef.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +typedef int MyInt; +typedef struct A { int i; } StructA; +int main() { + typedef float MyFloat; + StructA a; + a.i = 22; + typedef struct A { double d; } StructA; + StructA a0; + a0.d = 1.414; + MyInt i = 11; + MyFloat f = 3.14; + printf("i = %d\n", i); + printf("f = %f\n", f); + printf("a.i = %d\n", a.i); + printf("a0.d = %f\n", a0.d); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0036-TypeDef/expected.txt b/testsuite/c_test/driver_test/AST0036-TypeDef/expected.txt new file mode 100644 index 0000000000..43a1c844d5 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-TypeDef/expected.txt @@ -0,0 +1,4 @@ +i = 11 +f = 3.140000 +a.i = 22 +a0.d = 1.414000 diff --git a/testsuite/c_test/driver_test/AST0036-TypeDef/test.cfg b/testsuite/c_test/driver_test/AST0036-TypeDef/test.cfg new file mode 100644 index 0000000000..4d7c121a03 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0036-TypeDef/test.cfg @@ -0,0 +1,2 @@ +compile(APP=TypeDef.c,OPTION="--no-maple-phase -o TypeDef") +run(TypeDef) diff --git a/testsuite/c_test/driver_test/AST0037-VAArgExpr/VAArgExpr.c b/testsuite/c_test/driver_test/AST0037-VAArgExpr/VAArgExpr.c new file mode 100644 index 0000000000..233e51797d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0037-VAArgExpr/VAArgExpr.c @@ -0,0 +1,126 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +typedef struct demo1 { + int a; + short b; +} demo1; + +typedef struct demo2 { + float a; + float b; + float c; +} demo2; // HFA + +typedef struct demo3 { + double a; + double b; + double c; +} demo3; // copyed mem + +typedef struct demo4 { + float a; + float arr[3]; +} demo4; // HFA nested array + +void func(int a, ...) { // reg + va_list vl; + printf("a: %d\n",a); + va_start(vl, a); + double b = va_arg(vl, double); + printf("b: %lf\n", b); + long c = va_arg(vl, long); + printf("c: %ld\n", c); + char *d = va_arg(vl, char *); + printf("d: %s\n", d); + demo1 e = va_arg(vl, demo1); + printf("e.a: %d\n", e.a); + printf("e.b: %d\n", e.b); + demo2 f = va_arg(vl, demo2); + printf("f.a: %lf\n", f.a); + printf("f.b: %lf\n", f.b); + printf("f.c: %lf\n", f.c); + demo3 g = va_arg(vl, demo3); + printf("g.a: %lf\n", g.a); + printf("g.b: %lf\n", g.b); + printf("g.c: %lf\n", g.c); + demo4 h = va_arg(vl, demo4); + printf("g.a: %lf\n", h.a); + printf("g.a: %lf\n", h.arr[2]); + va_end(vl); +} + +void func1(int a, ...) { // stack + va_list vl1; + printf("a: %d\n",a); + va_start(vl1, a); + + for (int i = 1; i <= 8; i++) { + int ii = va_arg(vl1, int); + printf("ii%d: %d\n", i, ii); + } + + for (int i = 1; i <= 8; i++) { + double dd = va_arg(vl1, double); + printf("dd%d: %lf\n", i, dd); + } + + double b = va_arg(vl1, double); + printf("b: %lf\n", b); + long c = va_arg(vl1, long); + printf("c: %ld\n", c); + char *d = va_arg(vl1, char *); + printf("d: %s\n", d); + demo1 e = va_arg(vl1, demo1); + printf("e.a: %d\n", e.a); + printf("e.b: %d\n", e.b); + demo2 f = va_arg(vl1, demo2); + printf("f.a: %lf\n", f.a); + printf("f.b: %lf\n", f.b); + printf("f.c: %lf\n", f.c); + demo3 g = va_arg(vl1, demo3); + printf("g.a: %lf\n", g.a); + printf("g.b: %lf\n", g.b); + printf("g.c: %lf\n", g.c); + demo4 h = va_arg(vl1, demo4); + printf("g.a: %lf\n", h.a); + printf("g.a: %lf\n", h.arr[2]); + va_end(vl1); +} + +int main() { + int a = 20; // int + double b = 30.0; // double + long c = 123L; + char *d = "abc"; // ptr + demo1 e; // struct + e.a = 100; + e.b = 101; + demo2 f; + f.a = 1.1f; + f.b = 1.2f; + f.c = 1.3f; + demo3 g; + g.a = 3.14; + g.b = 1.234; + g.c = 1.0; + demo4 h; + h.a = 2.22; + h.arr[2] = 3.33; + func(a, b, c, d, e, f, g, h); + func1(a, 1, 2, 3, 4, 5, 6, 7 ,8, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 ,7.7, 8.8, b, c, d, e, f, g, h); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0037-VAArgExpr/expected.txt b/testsuite/c_test/driver_test/AST0037-VAArgExpr/expected.txt new file mode 100644 index 0000000000..41bf5fe6b9 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0037-VAArgExpr/expected.txt @@ -0,0 +1,44 @@ +a: 20 +b: 30.000000 +c: 123 +d: abc +e.a: 100 +e.b: 101 +f.a: 1.100000 +f.b: 1.200000 +f.c: 1.300000 +g.a: 3.140000 +g.b: 1.234000 +g.c: 1.000000 +g.a: 2.220000 +g.a: 3.330000 +a: 20 +ii1: 1 +ii2: 2 +ii3: 3 +ii4: 4 +ii5: 5 +ii6: 6 +ii7: 7 +ii8: 8 +dd1: 1.100000 +dd2: 2.200000 +dd3: 3.300000 +dd4: 4.400000 +dd5: 5.500000 +dd6: 6.600000 +dd7: 7.700000 +dd8: 8.800000 +b: 30.000000 +c: 123 +d: abc +e.a: 100 +e.b: 101 +f.a: 1.100000 +f.b: 1.200000 +f.c: 1.300000 +g.a: 3.140000 +g.b: 1.234000 +g.c: 1.000000 +g.a: 2.220000 +g.a: 3.330000 diff --git a/testsuite/c_test/driver_test/AST0037-VAArgExpr/test.cfg b/testsuite/c_test/driver_test/AST0037-VAArgExpr/test.cfg new file mode 100644 index 0000000000..04a9980212 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0037-VAArgExpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=VAArgExpr.c,OPTION="--no-maple-phase -o VAArgExpr") +run(VAArgExpr) diff --git a/testsuite/c_test/driver_test/AST0038-GlobalAggInit/GlobalAggInit.c b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/GlobalAggInit.c new file mode 100644 index 0000000000..c5100c57ab --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/GlobalAggInit.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct A { + int i[2]; + float f; +}; +const int cInt = 111; +enum { + e0, + e1 +}; +union U { + char c; + int i; + short s; +}; + +union U u = { 10 }; + +struct A Aarray[2] = { { { e0, e1 }, 11.1f }, + { { sizeof(int), 4 }, 22.2f } + }; +struct A a = { { 5, e1 }, 33.3f }; +int i[3] = { 3 + 1, 2, 1}; + +// +struct D { + int y; + double z; + int i; + int j; + struct E { + int i; + int j; + struct F { + int y; + } f; + } e; +} d; +struct F *pf = &d.e.f; + +int main() { + printf("a.i[0] = %d\na.i[1] = %d\n", a.i[0], a.i[1]); + printf("i[0] = %d\ni[1] = %d\ni[2] = %d\n", i[0], i[1], i[2]); + printf("u.i = %d\n", u.i); + pf->y = 2; + printf("d.e.f.y=%d, pf=%d\n", d.e.f.y, pf->y); + + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0038-GlobalAggInit/expected.txt b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/expected.txt new file mode 100644 index 0000000000..4aed69f12d --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/expected.txt @@ -0,0 +1,7 @@ +a.i[0] = 5 +a.i[1] = 1 +i[0] = 4 +i[1] = 2 +i[2] = 1 +u.i = 10 +d.e.f.y=2, pf=2 diff --git a/testsuite/c_test/driver_test/AST0038-GlobalAggInit/test.cfg b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/test.cfg new file mode 100644 index 0000000000..eb74625265 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalAggInit/test.cfg @@ -0,0 +1,2 @@ +compile(APP=GlobalAggInit.c,OPTION="--no-maple-phase -o GlobalAggInit") +run(GlobalAggInit) diff --git a/testsuite/c_test/driver_test/AST0038-GlobalVar/GlobalVar.c b/testsuite/c_test/driver_test/AST0038-GlobalVar/GlobalVar.c new file mode 100644 index 0000000000..a80d98cce0 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalVar/GlobalVar.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +// double c = 3.14159; // fail case +// long double d = 1.11111; // fail case +// float arr3[] = {1.0, -1.0, 0 , 0}; // fail case +// float arr4[] = {1.0f, -1.0, 0 , 0}; // fail case +// float arr4[] = {1.0f, -1.0f}; // fail case, wrong value +// struct A A = {10, 10.1, 10.2, 'a'}; // fail case +int a = 1; +float b = 1.1; +struct A { + int Aa; + float Ab; + double Ac; + char Ad; +} A; // A = {10, 10.1, 10.2, 'a'} fail + +struct A *pA = &A; +int arr[] = {1, 2, 3}; +float arr2[3] = {0.0}; +float arr3[] = {1.0, -1.0}; +char arr4[] = {'a','c'}; +float f = (1.17549435e-38f <= 1.1) ? 1.1 : 9.9; +struct B{ + int Barr[2]; + float Barr2[2]; + double Barr3[2]; + char Barr4[2]; +} B; +struct B *pB = &B; +int lenA = sizeof(A) + 1; +enum DAY{ + MON=1, TUE, WED, THU, FRI, SAT, SUN +} day = WED; +union data{ + int n; + char ch; + double f; +} data; +// const struct C { // fail case +// int a; +// char c; +// double d; +// } C = {1, 'a', 2.222}; +int main() { + A.Aa = 10; + A.Ab = 10.1; + A.Ac = 10.2; + A.Ad = 'a'; + B.Barr[0] = 20; + B.Barr[1] = 22; + B.Barr2[0] = 20.1; + B.Barr2[1] = 22.1; + B.Barr3[0] = 20.131; + B.Barr3[1] = 22.131; + B.Barr4[0] = 'b'; + B.Barr4[1] = 'c'; + data.n = 4; + data.ch ='s'; + data.f = 1.234; + printf("%d\n", a); + printf("%f\n", b); + printf("%f\n", A.Ac); + printf("%d%d%d\n", arr[0], arr[1], arr[2]); + printf("%f%f%f\n", arr2[0], arr2[1], arr2[2]); + printf("%f%f\n", arr3[0], arr3[1]); + printf("%c%c\n", arr4[0], arr4[1]); + printf("%f\n", f); + printf("%d%d%d\n", *arr, *(arr + 1), *(arr + 2)); + printf("%f%f%f\n", *arr2, *(arr2 + 1), *(arr2 + 2)); + printf("%f%f\n", *arr3, *(arr2 + 1)); + printf("%c%c\n", *arr4, *(arr4 + 1)); + printf("%d%d%d", lenA, sizeof(pA), sizeof(pB)); + printf("%d%d\n", day, sizeof(day)); + printf("%d%c%f\n",data.n, data.ch, data.f); + // printf("%c%c%c", A.Ad, B.Barr4[0], B.Barr4[1]); // fail case + // printf("%d\n", A.Aa); // fail case, wrong value + // printf("%f\n", A.Ab); // fail case, wrong value + // printf("%d%f%f\n", pA->Aa, pA->Ab, pA->Ac); // fail case + // printf("%d%d\n", pB->Barr[0], pB->Barr[1]); // fail case + // printf("%f%f%f%f\n", pB->Barr2[0], pB->Barr2[1], pB->Barr3[0], pB->Barr3[1]); // fail case + // printf("%f%f\n", arr4[0], arr4[1]); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0038-GlobalVar/expected.txt b/testsuite/c_test/driver_test/AST0038-GlobalVar/expected.txt new file mode 100644 index 0000000000..9113a848ff --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalVar/expected.txt @@ -0,0 +1,14 @@ +1 +1.100000 +10.200000 +123 +0.0000000.0000000.000000 +1.000000-1.000000 +ac +1.100000 +123 +0.0000000.0000000.000000 +1.0000000.000000 +ac +258834 +-927712936X1.234000 diff --git a/testsuite/c_test/driver_test/AST0038-GlobalVar/test.cfg b/testsuite/c_test/driver_test/AST0038-GlobalVar/test.cfg new file mode 100644 index 0000000000..aff0250733 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0038-GlobalVar/test.cfg @@ -0,0 +1,2 @@ +compile(APP=GlobalVar.c,OPTION="--no-maple-phase -o GlobalVar") +run(GlobalVar) diff --git a/testsuite/c_test/driver_test/AST0039-StructInArray/StructInArray.c b/testsuite/c_test/driver_test/AST0039-StructInArray/StructInArray.c new file mode 100644 index 0000000000..dac5f6b37f --- /dev/null +++ b/testsuite/c_test/driver_test/AST0039-StructInArray/StructInArray.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct A { + int a; + int b; +}; + +struct B { + int c; + int d; + struct A singleA; + int inB[2]; +}; + +int main() { + struct B s1; + s1.inB[1] = 15; + printf("%d\n", s1.inB[1]); + + struct A saa[4] = {{1,2},{3,4},{5,6},{7,8}}; + printf("%d\n",saa[0].a); + printf("%d\n",saa[1].b); + saa[0].a = 10; + printf("%d\n",saa[0].a); + saa[1].b = 20; + saa[0].a = 30; + printf("%d\n",saa[0].a); + printf("%d\n",saa[1].b); + printf("%d\n",saa[2].a); + printf("%d\n",saa[2].b); + printf("%d\n",saa[3].a); + printf("%d\n",saa[3].b); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0039-StructInArray/expected.txt b/testsuite/c_test/driver_test/AST0039-StructInArray/expected.txt new file mode 100644 index 0000000000..1e05afb0cd --- /dev/null +++ b/testsuite/c_test/driver_test/AST0039-StructInArray/expected.txt @@ -0,0 +1,10 @@ +15 +1 +4 +10 +30 +20 +5 +6 +7 +8 diff --git a/testsuite/c_test/driver_test/AST0039-StructInArray/test.cfg b/testsuite/c_test/driver_test/AST0039-StructInArray/test.cfg new file mode 100644 index 0000000000..2227cf217c --- /dev/null +++ b/testsuite/c_test/driver_test/AST0039-StructInArray/test.cfg @@ -0,0 +1,2 @@ +compile(APP=StructInArray.c,OPTION="--no-maple-phase -o StructInArray") +run(StructInArray) diff --git a/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/LocalAggInitialization.c b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/LocalAggInitialization.c new file mode 100644 index 0000000000..051bf80593 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/LocalAggInitialization.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +struct S { + float f; + int i[3]; +}; +union U { + char ch; + int i; + char c[4]; +}; +union U g = {}; +struct SU { + int i; + union U u; +}; +int main() { + struct S s0 = {}; + struct S s = { 3.14f, { 3, 4, 5, } }; + printf("%f, %d, %d, %d\n", s.f, s.i[0], s.i[1], s.i[2]); + union U u = {{0}}; + union U u0 = {}; + union U u1 = { 2 }; + union U u2 = { 'a', 2 }; + printf("%d %d %d %d %c %d\n", u.i, u0.i, u1.c[2], u1.i, u2.ch, u2.c[1]); + + struct SU su = { 22, { 33 }}; + printf("%d\n", su.u.i); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/expected.txt b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/expected.txt new file mode 100644 index 0000000000..e33c5c8bb2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/expected.txt @@ -0,0 +1,3 @@ +3.140000, 3, 4, 5 +0 0 0 2 a 0 +33 diff --git a/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/test.cfg b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/test.cfg new file mode 100644 index 0000000000..295a000261 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0040-LocalAggInitialization/test.cfg @@ -0,0 +1,2 @@ +compile(APP=LocalAggInitialization.c,OPTION="--no-maple-phase -o LocalAggInitialization") +run(LocalAggInitialization) diff --git a/testsuite/c_test/driver_test/AST0041-AddrOfLabel/AddrOfLabel.c b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/AddrOfLabel.c new file mode 100644 index 0000000000..eaac69b6e0 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/AddrOfLabel.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +int main() { + void *plb = 0; + int visited = 0; +lb: + printf("%d\n", 111); + plb = &&lb; + if (visited == 0) { + visited = 1; + goto *plb; + } + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0041-AddrOfLabel/expected.txt b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/expected.txt new file mode 100644 index 0000000000..2bbe845f4e --- /dev/null +++ b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/expected.txt @@ -0,0 +1,2 @@ +111 +111 diff --git a/testsuite/c_test/driver_test/AST0041-AddrOfLabel/test.cfg b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/test.cfg new file mode 100644 index 0000000000..9cf8408d6c --- /dev/null +++ b/testsuite/c_test/driver_test/AST0041-AddrOfLabel/test.cfg @@ -0,0 +1,2 @@ +compile(APP=AddrOfLabel.c,OPTION="--no-maple-phase -o AddrOfLabel") +run(AddrOfLabel) diff --git a/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/builtin_rotateXXX.c b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/builtin_rotateXXX.c new file mode 100644 index 0000000000..ff63585e3c --- /dev/null +++ b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/builtin_rotateXXX.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include +#include + +int ConvertBinaryToDecimal(long long n) { + int dec = 0, i = 0, rem; + while (n != 0) { + rem = n % 10; + n /= 10; + dec += rem * pow(2, i); + ++i; + } + return dec; +} + +int main() { + unsigned int x = ConvertBinaryToDecimal(10000110); + unsigned int z = __builtin_rotateleft8(x, 11); + printf("%u\n", z); // 52: 0011 0100 + x = ConvertBinaryToDecimal(1000001101000010); + z = __builtin_rotateleft16(x, 23); + printf("%u\n", z); // 41281: 1010 0001 0100 0001 + x = ConvertBinaryToDecimal(1000001101000010); + z = __builtin_rotateleft32(x, 23); + printf("%u\n", z); // 2701131841: 1010 0001 0000 0000 0000 0000 0100 0001 + uint64_t w = __builtin_rotateleft64(3, 63); + printf("%llu\n", w); // 9223372036854775809: 1000000000000000000000000000000000000000000000000000000000000001 + printf("\n"); + + x = ConvertBinaryToDecimal(10000110); + z = __builtin_rotateright8(x, 11); + printf("%u\n", z); // 208: 1101 0000 + x = ConvertBinaryToDecimal(1000001101000010); + z = __builtin_rotateright16(x, 23); + printf("%u\n", z); // 34054: 1000 0101 000 00110 + x = ConvertBinaryToDecimal(1000001101000010); + z = __builtin_rotateright32(x, 23); + printf("%u\n", z); // 17204224: 0000 0001 0000 0110 1000 0100 0000 0000 + w = __builtin_rotateright64(3, 1); + printf("%llu\n", w); // 9223372036854775809: 1000000000000000000000000000000000000000000000000000000000000001 + + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/expected.txt b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/expected.txt new file mode 100644 index 0000000000..aa8c2766be --- /dev/null +++ b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/expected.txt @@ -0,0 +1,9 @@ +52 +41281 +2701131841 +9223372036854775809 + +208 +34054 +17204224 +9223372036854775809 diff --git a/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/test.cfg b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/test.cfg new file mode 100644 index 0000000000..b2948b3a55 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0070-builtin_rotateXXX/test.cfg @@ -0,0 +1,2 @@ +compile(APP=builtin_rotateXXX.c,OPTION="--no-maple-phase -lm -o builtin_rotateXXX") +run(builtin_rotateXXX) diff --git a/testsuite/c_test/driver_test/AST0072-InvalidInitializer/InvalidInitializer.c b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/InvalidInitializer.c new file mode 100644 index 0000000000..0284bae906 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/InvalidInitializer.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include + +typedef struct { + char *auth_pwfile; + int x; +} auth_config_rec; + +void *Ptr = &((auth_config_rec*)0)->x; + +int main() { + printf("InvalidInitializer"); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0072-InvalidInitializer/expected.txt b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/expected.txt new file mode 100644 index 0000000000..bd9f94ccaf --- /dev/null +++ b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/expected.txt @@ -0,0 +1 @@ +InvalidInitializer \ No newline at end of file diff --git a/testsuite/c_test/driver_test/AST0072-InvalidInitializer/test.cfg b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/test.cfg new file mode 100644 index 0000000000..9653e72ce2 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0072-InvalidInitializer/test.cfg @@ -0,0 +1,2 @@ +compile(APP=InvalidInitializer.c,OPTION="--no-maple-phase -o InvalidInitializer") +run(InvalidInitializer) diff --git a/testsuite/c_test/driver_test/AST0073-RorOptimize/RorOptimize.c b/testsuite/c_test/driver_test/AST0073-RorOptimize/RorOptimize.c new file mode 100644 index 0000000000..b57edd50dc --- /dev/null +++ b/testsuite/c_test/driver_test/AST0073-RorOptimize/RorOptimize.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) [2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include +#include + +typedef unsigned long u64; +typedef unsigned int u32; +typedef unsigned short u16; + +// u64 +u64 __attribute__((noinline)) rot1(u64 a, u64 b) { + return (a >> (b&63)) | (a << (64 - (b&63))); +} + +u64 __attribute__((noinline)) rot2(u64 a, u64 b) { + return (a << (64 - (b&63))) | (a >> (b&63)); +} + +// u32 +u32 __attribute__((noinline)) rot3(u32 a, u32 b) { + return (a >> (b&31)) | (a << (32 - (b&31))); +} + +u32 __attribute__((noinline)) rot4(u32 a, u32 b) { + return (a << (32 - (b&31))) | (a >> (b&31)); +} + +// u16 +u16 __attribute__((noinline)) rot5(u16 a, u16 b) { + return (a >> (b&15)) | (a << (16 - (b&15))); +} + +u16 __attribute__((noinline)) rot6(u16 a, u16 b) { + return (a << (16 - (b&15))) | (a >> (b&15)); +} + +int main() { + u64 a = 9; // 1001 + u64 b = rot1(a, 1); + u64 c = rot2(a, 2); + u32 d = rot3(a, 3); + u32 e = rot4(a, 4); + u16 f = rot5(a, 5); + u16 g = rot6(a, 6); + printf("%lu, %lu, %u, %u, %u, %u\n", b, c, d, e, f, g); + return 0; +} diff --git a/testsuite/c_test/driver_test/AST0073-RorOptimize/expected.txt b/testsuite/c_test/driver_test/AST0073-RorOptimize/expected.txt new file mode 100644 index 0000000000..748c315c99 --- /dev/null +++ b/testsuite/c_test/driver_test/AST0073-RorOptimize/expected.txt @@ -0,0 +1 @@ +9223372036854775812, 4611686018427387906, 536870913, 2415919104, 18432, 9216 diff --git a/testsuite/c_test/driver_test/AST0073-RorOptimize/test.cfg b/testsuite/c_test/driver_test/AST0073-RorOptimize/test.cfg new file mode 100644 index 0000000000..678b9ca7bb --- /dev/null +++ b/testsuite/c_test/driver_test/AST0073-RorOptimize/test.cfg @@ -0,0 +1,2 @@ +compile(APP=RorOptimize.c,OPTION="--no-maple-phase -o RorOptimize") +run(RorOptimize) diff --git a/testsuite/c_test/driver_test/DRIVER0001-helloworld/test.cfg b/testsuite/c_test/driver_test/DRIVER0001-helloworld/test.cfg index b968e7ab38..3f7e77d5cf 100644 --- a/testsuite/c_test/driver_test/DRIVER0001-helloworld/test.cfg +++ b/testsuite/c_test/driver_test/DRIVER0001-helloworld/test.cfg @@ -1,2 +1,2 @@ -compile(APP=main.c,OPTION="--no-maple-phase --static") -run(a) +compile(APP=main.c,OPTION="--no-maple-phase -o app") +run(app) diff --git a/testsuite/c_test/driver_test/DRIVER0002-double/test.cfg b/testsuite/c_test/driver_test/DRIVER0002-double/test.cfg index c35ecc9614..100b7cc77d 100644 --- a/testsuite/c_test/driver_test/DRIVER0002-double/test.cfg +++ b/testsuite/c_test/driver_test/DRIVER0002-double/test.cfg @@ -1,2 +1,2 @@ -compile(APP="main.c helper.c",OPTION="--no-maple-phase --static") -run(a) +compile(APP="main.c helper.c",OPTION="--no-maple-phase ") +run(a.out) diff --git a/testsuite/c_test/driver_test/DRIVER0003-macro/test.cfg b/testsuite/c_test/driver_test/DRIVER0003-macro/test.cfg index ad25f535d3..be280a14b2 100644 --- a/testsuite/c_test/driver_test/DRIVER0003-macro/test.cfg +++ b/testsuite/c_test/driver_test/DRIVER0003-macro/test.cfg @@ -1,2 +1,2 @@ -compile(APP="main.c helper.c",OPTION="--no-maple-phase --static -DTEST1 -DNUM=20 -DTEST2 -UTEST2 -D TEST3 -D EXTRANUM=10") -run(a) +compile(APP="main.c helper.c",OPTION="--no-maple-phase -DTEST1 -DNUM=20 -DTEST2 -UTEST2 -D TEST3 -D EXTRANUM=10") +run(a.out) diff --git a/testsuite/c_test/driver_test/DRIVER0004-syslibs/test.cfg b/testsuite/c_test/driver_test/DRIVER0004-syslibs/test.cfg index d576379fe0..ea05e0e14c 100644 --- a/testsuite/c_test/driver_test/DRIVER0004-syslibs/test.cfg +++ b/testsuite/c_test/driver_test/DRIVER0004-syslibs/test.cfg @@ -1,2 +1,2 @@ -compile(APP=main.c,OPTION="--no-maple-phase --static -lm") -run(a) +compile(APP=main.c,OPTION="--no-maple-phase -lm") +run(a.out) diff --git a/testsuite/c_test/driver_test/SANITY0001-addr/addr.c b/testsuite/c_test/driver_test/SANITY0001-addr/addr.c new file mode 100644 index 0000000000..1e0281a16f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0001-addr/addr.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int deref(int *iptr) { + return *iptr; +} + +int deref1(int *iptr) { + int j = 8; + j = *iptr + j; + return j; +} + +int addrof(int *iptr) { + int j = 8; + int *jptr = &j; + *jptr = *iptr; + return *jptr; +} + +int main() +{ + int v = 5; + int *vptr = &v; + + if (*vptr != 5) { + abort(); + } + if (deref(&v) != 5) { + abort(); + } + if (deref1(&v) != 13) { + abort(); + } + if (addrof(&v) != 5) { + abort(); + } +} + diff --git a/testsuite/c_test/driver_test/SANITY0001-addr/expected.txt b/testsuite/c_test/driver_test/SANITY0001-addr/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0001-addr/test.cfg b/testsuite/c_test/driver_test/SANITY0001-addr/test.cfg new file mode 100644 index 0000000000..8ed4634494 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0001-addr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=addr.c,OPTION="--no-maple-phase -o addr") +run(addr) diff --git a/testsuite/c_test/driver_test/SANITY0002-argc/argc.c b/testsuite/c_test/driver_test/SANITY0002-argc/argc.c new file mode 100644 index 0000000000..2358a1da29 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0002-argc/argc.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main(int argc, char *argv[]) +{ + int i = 1; + if (i > argc) { + abort(); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0002-argc/expected.txt b/testsuite/c_test/driver_test/SANITY0002-argc/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0002-argc/test.cfg b/testsuite/c_test/driver_test/SANITY0002-argc/test.cfg new file mode 100644 index 0000000000..67e48c9e81 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0002-argc/test.cfg @@ -0,0 +1,2 @@ +compile(APP=argc.c,OPTION="--no-maple-phase -o argc") +run(argc) diff --git a/testsuite/c_test/driver_test/SANITY0003-array_single/.raw_file_list.txt b/testsuite/c_test/driver_test/SANITY0003-array_single/.raw_file_list.txt new file mode 100644 index 0000000000..5d23177ade --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0003-array_single/.raw_file_list.txt @@ -0,0 +1,4 @@ +expected.txt +array_single.c +test.cfg +----- diff --git a/testsuite/c_test/driver_test/SANITY0003-array_single/array_single.ast b/testsuite/c_test/driver_test/SANITY0003-array_single/array_single.ast new file mode 100644 index 0000000000000000000000000000000000000000..87b57771fc017b4d658c28c569b036746407c1b9 GIT binary patch literal 672984 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

{}7}v$e=SX<^bqfn+>Z3OSy`WXWbOhxA2r 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

31r+^|{p!m^oHRGgM9U-fKshdzD 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

  • fcfb?xYMy^cN8sq|BeOdYZ4YB{;zPNK2j_!-s?F%RD7)^ zU}bYDBPTGM6rw>(MJm4#ZU;KbM%vzOTyDM2zJ8~Jm z!kYxHs@4wV$cOt?GqNqu${ghkO8}A*T6-&Ihh|KX>UF-x4;Ep>F4C{eNyx%<4>yT< zykOs^42GOG*b8$K95ftPg=QLGdr>vqH9;i%%yLM63zE4-ND#|3I7VydZjoz#2o?G# zq})(6HY#*sHad`Asn3S$z{{4pySME<*)b>~k!|%YxAh`>Rzs$DBy=IIEVSnBXkJBZj~_~T=8(9VaMRzM z{5E20AvO4py>+UOHRcCZg^LqTPdx7X{ycr(&tgnn3Ub2nyWjueA>4RJH(!JnPtuF*XB|y{5)><<({{ zE8oG&Yu27bs5ZP5m)s1YHtN|;X+Y>TwXT!;&3-1`$)vRr%^sE``538c_SCIioZ+-f z2xpEwGL_?4kHlxIme{cOy4998&aKET@JTP1O7og*6hGzsdd$YPuUzj0*MZu(%$FBq zOm~hQ5q%eI=g6%D+lPbgPZXW|sw39WO3`}LA(~)6$~#w;_mc^apW+0)cKR$a&f2~h z28cId{IwCf_DG=jY=%9l==fB^EmupmHffTVnM)IJvo{sDP`#9A5{f!VMyb_SLlfKk zA-!)ZU!G0K=e198tjAJg)G?vKudT?I4FK#_y}Y>hmL`CugiH=GJ{vJ6Fkf`&pcBZ; zV`#Rr%FIE9=jbwCEqZvI6W(d2gq1d^MzuPpNXK!1v zQ<+Nomc3U$?PTW$DBl6)_v!5aOjxaP#sV%PvrHb$|BoWXCvGUq_jd5D?^TdLEoy&v zD4sO#hD59MnoJOXBRlf8?#SnR|5zRBsB2J-`dy{jrUfehZ54v8MdLe!%AJK&v|E|C{>xTvqhVg;%i{H7=}8i>4o2^w6bOx&Ju;cxo>S}R92zQ10A&XS*J z`1P8dMJd08COK4PX5^47TR#eHW9UxT)m58ISX~EQ-7eSBelw2Ir|amwZt%ty%X{JJ zEXZpPt{udiz3{9NyJ(L9%)KW)SZ&XVI&Cl#?0Xyq4&3igD zACzim-E5b3$#pWU#Xbq@1RK^3=1y^AN2*t#U_G`Djoa59TG$fniDoid3&BjhnCK$7 z*mB+CXPh!NkF6Qj5ET`GO5rN)RO~1M#66!KE%RoVmd%y~EAtLs$32R-?e|@dn-Knn zTjL#pt+ZW0jfR<_9G$i*IH#|h{2wRnqlGOLdaX>e?f`^F3OnwL>;pn{4R*o^>;yuk zzSmE5Ld!ra89By@gGuyNGxbcL3*@ogUm?BIR6e@yo6j|D_^OqkVfT^(t{)>RU#O^b zUswE5=zCu+>;g6KvB*lml4lC*>~}n~E6iPrV2SG@V-n=egR$qq*eKJh=M`8D!NFv5 z!2+hd1pQv*E4|kJ3$4RNE$?!a~s zBSKbLI9}L2*teo2)axz8EK z+iCT$M)o}S0w>j0to5+fua8awO4MT=yY7qV<5&c*|xu~st= zC?+M%na7ykwp_iyX&&e6v-LQ7%Sui^8yPvOM?TGsU@A;QaFh}}VO``yEC+Efhd2kO zd(Fgk|Cd87PcXJ{h(Cwp6WxfSkTpa#Q=%rXi|h$8ZxJR!wDN7rzU8|S8!e8tWy zB2Vl$-I>^<6JOa#n$HY?wDTa%Yp&|)<`uEP6`bprIM-M8e1$8X-~#N$6&VEtQI?y-y+|!vG+m!OwEb%uTL?X zh`oDE@wzU*Il+oH`a;oigVucrbYhTuOo{J!&1U+*=}Tl@eo$tNEe-$nAX969yYHPc zq|A5YjanC%*PgRba?H`n#+oy_$|@^+9v>aWlPMlX8U}k_=_}$MvU?D=3yOy1^|KN+ zNtUon>vWf@-BwP^DOP@iuH5f7n9foRzEKCy>3P!6jwU6sS}P(0SCw5Yx zax$i@Cg%iU$s@@cXwo=DLcQ0_i=;F--`B#HB-k>~%`!p=w*jhuRY||ecgz18FKUt} zk4hbzVji|PtfdOeE$$2B#Tg5GQ5SZr`*0qVG5jA4C*gcu;_y)2Vx0mmz zd4JUZZN4{-iFV43dwEttrD=ic`BJy{u5~L5t(?OtT%M06FfC<;%yN4{Kiw`8__uZc zH=q$!(hi`hR+YSH-GX~WRoboZGRn=BSl03*UNP-`Nr}7amQLQXAll+JcKYR?q4wT-S5=DC-?ZX<21KX-S!R043`&>(@O%?o_agYMGw$ zq+KA#+S+e%CMZkK_{V)q91HT;mFuiXa|&>Bs&4BOk+2&9C`A}!IYv=tbI*|v94GB3 zC}}SwYjN99Zm^K#&90oFPAQyt4o+;|_x&TG>8)j@vvSSG)5${P$VQo`T_>Y9DU&_V zWKa86ka-b(jK-;`3U;2^Hp_1w#366ZA%A+^V_${to3+Wg#q{G+uenMa^qzte^q6Oy z=q)f$L+^O#^_XXyuz@6%v4P*QfnM{x(}X_rA`?z#!snYX9f@L0w_WAoMPHkDLZe*S zW#y%Xxn>CV;v@yYf4CW=oUYy&qqlaF^}M>SRiP6QSf#(K%q$4~R)OF(=TH00P(E!H zTz+re_S=su-JB;YIp{4`^NFtJ{hmKFJ{S?Ly&(etP?em&S3tvC_`KJA(DN~F_@w=r zR+^UnOevR5AO=+05G{CUCUcyaPu+ zRgQkqgz9ZU0)M|@`_}2f_}Ul$Qs_0btuVNVsh~KRWiLyR zC?3`ErvAm&uQosldogm&&Q{5$1J{k}D?JL%$M<4MQv-x~=Oa8lK? zd*7m4oUFwP-o7<7MtF@6PSg(`aD`#Edo(L)uPgbn=MR4z?;OY(5Tq|Qnd}0Eq>;#< zd^M9p%@8}F;-j6iwEx=D8&4X(ddz>;U7F^2WGd0dWfEAC(l&4Di9OWwvVX|!a7BrI zxAwG$3UXLWA8}x!%#J6Eep)v`shq)QiA2B8+J5i(5gE{}7|;1E zr()~`RNC)7SM$n5GL5EE1}trYR!G`wpSQw$h2+Cc;6}B{h8qvV4f3!fbAw0OaAPan z_`?_cSTc8dgO!>`AjR5up0KHOHzoStpGG#k^cm3$tTl1oxc{n=y=+!n$E+)VW}w!1HE?U#!DB7ytV&BF)lr9Ival z?RDJ)=e_34AZmPO7Svn_HD@L+CScOsWcKgtGt+GGAE1BG#hs7UW;uMkh}CvUeC@nY z(6jMTQW&&6$Cf?-B(?(WiT67<9+F@QR*(K9@y{r8cJWBEyIPq1*=40y}0b6Y4WL5c(5@dQ42+q3bO0O}}&sr~zPCVj@{Tn0E|`-S4u=g79w)!+6w9 zj&tEO;0vd>!f9GE7suY?q~)Y{TVomdQjGT+jQ9BBjlDzn&^qtj##dP{{FCvu&rn~h zhYJ-TGE{t_``vT@(qr#^t$u(VF#bP9);uODv5LTa@GS&c5LVKm6eAXGNIj>-<1|E+ zd&VKQLd%>d3-7l-Lyw--L3=R5-j99im-yJd*871#(w+4(=wo|>pPVkA8IbtR-vXn? zOiD=}nUOvrb$q&c&mPr5M-AE^39}_G-w(__Q5kSSacjytNrjm7OGil?Y7Fg4vN5fn zF1onEK@|JU5Gd}ik~O4mP#ZbZ#a2E>Hd1vuziX6j$#v6@hL-%b3MBlB-2blA4&VQ0 zt`oY=D9NF;gaZDf14(0K`@JTm?&H^-1b_g_j12mM(S(7Cp8@Mr_TT@2bxN%6jx6U{ z8$7O7%Er`LCH25QQ_5ln=wdF}pVd|nk=_&8xuz|rN;H& zYUc{n1V=RqRcrd}XvSYpgu-jm+&(~pA0HUOAEfPn3Cl3}>WO^C(vkw+P89faa?PCt zCj7d_35l896bFyA&WpSX7Sp^Bn}0FP@|cN1>-L#;tow6acY3i4Hi;aiisn&lni7#T zpIHQH*C=UI>%JRcd0F%tr{`;SB}%y5yu>tuWKY)$RhPMH7l7yKVa8kn@OaG?`|JBV zfr)kf97y;a1cKjzXkSr0{>xCe#Zn0J9Go1rRQ2c1L!;Sq^99 zXNxW*V}BDYV3_ng2Hh4IMb>=cluMl~3wa}Mm$@_T*=tEJySncB7S{70c~K@ERtHLd zhXU{G>%J*>vciZ*Nx^3gNnr&%j8ZuXnz_12+`2>21}kiMTH4s;u@lB5n`>=y>zSA< z1~>BymUfq*eJdGVS@*YpTj^ZVcX?#Wh}3b({NL2k@TuOunOKRs^_uEBFKHRUN5a~5 zQ6aMJ88B-Fb5BSDZ+4LvR4Z zmg5TATY@viW^f`8iB6TT-Q;R&z}CSK)<%!>&57cJhTFh1>=YYu)qh1&3y~PQG$&3y z*NKoa$=KAMDL?n4M+5+UOL0%48R4n7+4PuaWlNEOWEHJj6VF@Yq#U%myhK-vO-e6g z?uHdn<_=dgg~h!!j6f4;aYxfI8bMEGar40FJ6!l&ZHB<-yOhs&xr`;hfw2p9?4r7r zgrCBhoK--fVtWU>pn|W%euy%Q6YsvpV%@QwZpcWaYuaecMD*O^#O`-FL19Ip3!W<0 z{TFfbiNG&*V{^3`4VxFkX7cYNQNSG*6tsZ??kXY;BoxEIlNm^j9(UYk9|nWlcY@pZ zB}Os=#TS(#g{L7uQRe53zXAl?1=(1_{?g0;PzWFt^|Q z#N7GJO|6`|Q{QrqNZ^Eo6r!{X(r|iT0b(a`YP@Dc;)y&52tPFeT`$Q1mmo3sATb+? zpV(ptoygMTA^r*2dS3H*-Q?||;9~DOIY=eewx_Y}UxKlZC*FE>sDK2t23=}2z?FzD zIze^Orv0B1V~{t%sBAIc?XD>JiMsjyCdleH@1OXfQ=*S!!2>a}>bW`jK^gZ=+9vu6igJ9j%`E%#@ej+O5B8^g;>1?D zdz>j|nwkpR`TTdvs815_z)%Xu#O%CEzx6Cpy4_r+1Z*w-?J2A1O=UrGPC2&c(<1Bq z`1qx&OcTCcZGPa}+x6RDHDSEp>|p%&I{xe8-Se7>`zrY;@Afa(Vzd=_R)z}aEav;VB`+K|~LwC>uEq(Q( zNs95kjkyVk^O|4k9^o-mct{dUPs%u1Xt-%0Zh(Eml$$Ooz%^F|J;-ANMc{&MCX7jfeRKMyXN36&nm#X;@&nZGpoQ?P&wNy0sN1s z$eZ=SZ1b6WVA~Zcbe{E*nO|)Rpztv$j51L!WBsOxvC_&i>c9bv&F}!VwWVsMU&+wr zI<#k3C$*h#J*d%(s(#V5L}M`?(=4ekH*5~7z#fid;Q{oykRUvp;5E(H?!i8WoopY?8aV7*}~ojVeiQY+}K-f2Eg70 z%HFn3U~jeQ2YXLc_MYNKh~H#D$O;HK#g!1h83ZABC?V~dK#1QAfRK|^<)50=hd6M! zzy-B7=!L&BU;UN#CI7rN)Qg^3f)$vZpGm1q^A+Z{SG|x9Nn0wM1i&g6X*rvhKtcyd z=#UiA9%TD^F{*{ygQp)@{7UHet(~7$o|{{4qUHMv*Bwhn6^8<2zzNCchC-Z>7lG*oK zyadJKRSnaVd3MPkUaQ!7W@TwHKD2h;x)RkrPrcHvuG?H~#<9((tE8RdI@)j27~N4v zN3UO8U<0Lpu4?L3z0HA5#pD-h~ZhTV2&4bt{9l8Qj< zW6G@7)q#pcspChbj!&I@IUep*#8XysCTf)C=_PGJ4xqXU}?L&1G!2^sOzGYU#bYTgFbpR+=bNh#?_wvl9>11PPG(6ip1EtVvUwipJXz$&qQQh)?aNt zWBpg?`p3GA^_#7Xy;8@HYa}<TTz^E{IfM=|N^@BbpyQn!S- z!GP36Q4!`1;DX%zr6;Yt&IumvmtpFVw@(70^^{HxBHd@E^3_L`^vjZ7#K#GiYfG== z*Gn0RDzm)Jyoz*R6btO$$UA39W>h9Ckl_t$!=;Y-b8}`#XGjWhQ55sBg zEM%3rlI1s3AnSg}Dr*8+ev=MaOO>pO121iJ+9a!%TcD0ZM^IvpqC|Dcks3*97(Rv0 zpjVj9oNh5{D)^_z_#!HEN@ zUCQdc=DGtvbNd?}{6;(*?DHiTp)uj?bxl}%wdus#uhF$%--Pjg)0y$tGM-Dyq`EGS zw5YnYY`mk;QVK2el7_zN6lH3-m6ANwpBY@hV2`g?`&&faE>d?OcYkvObtOUbES4 zX1~d1X5NID%`T=U^3exiyiI}hsU+u@X|%jIUozPjNRih(Q?j1~x$v?U!S9iO48@3 z<@SP`iV@`n#9Ro(yl~)e?@EGH*-YBwW|o_6*ctM3kYBI)M^XxboZ!sKf{K#Ta?%A& za$9<2G58;Db}5XNn<1<+R`PPvrT91D2CvlfBIl*bM6-(5Rcc;y=MiuNkB%sh-f$ld zPB8pW9lj+gy1mohg%s5Z91PV~1L6o_64~bgQAx8OL$|{^9@3+(!BP1698@8I<1zm{ zaG9OcJ0_KI$bITDes^?#=eD7XvzRHpis3&-#clm4BL^dPB+Ym%R2Mc-;gj5Z ziM(%O-jkG!ok=@7h0be@mIeq`SExLg#xnt!_M;08)n)-SY=#CpbGwZ7n>!i%6l4EW zGV}^97XUuf_%ge()YlI-JkG&m_n7~!FaF+&oi&*K8PjtxgmA^8?R(&V-Y+8$9~jAT z4BiKeSDI2KVc=pj2n@SJG0a<9wAR@bksOT%@W;vvxFW#9lAc(e>Jv8GQ1n~qHrhIX z_UIiQ&##=qLOq4;N;^FnT86@w9xETtdJ8H~pJyUM`#>PtSs#peMmcw* z`|{)qiaG`@sKWeYFX)hBXs3f;KN9)`RuYuWwZPC#4Cu7McV4KRT71qbFDj$>KhA9_ zr&a1lc+43G7gsv@LRRVZfG^YmX#ZVJku#k>oojC9)AN+sT{k2XW| zQ&xX&>3};#RZ#}GDr;u0zW0}Z|1!TG6Ws*f@Qep44=ZnCN*kZElop#d*k|%{JA22g zi6%_OV;m;?LnrH1IxpRR*O7Wf3cZUmOrKUV-6`g~5}B}HulqF@K{~yeGgP_;92`F| zG@I2HNP?QZk;5q9sSlDqpmeumLaIcXG@>~riFXrvt}fh=NkAhpC{k(3l3wnI)F28v z@)aEUcs=sNBY%m0mwc(SerZH$)h1amdqEu;k~Ydsg3ZCZm4hQA&qY5<<~md7NX>ru3&;sKWzF8voCm0fX`;p5oH?@=xu zb49OD`i8=aJv=YRKV2eQW)rr|SRI?$s~l_8>3&;+&Vj0QHtmvV@lFCyYv3s1whc#a zkej}W%qkKah(%nCn~NZ1_iB5;^;&yohS-%23eAJIkYn-j<3i>14XIdC!BGN>(GoaO zl@6C<@r$C=5zOiJms6a!MJz|HBV^eN*Cv8nD$w~G`uq}#mkm5C=316upgeJVhm{av zfE-`1MPr=wt7flZXfZf%I0Zp8KvdQgYO2j#sM(;@%-C=O2RYaL-b%QqL+f`dCfJY50Hix z9^RsErk&&5=3Ha`%dFS9FR|JzVTsS{60dU~?l(&r{(=slcktJ(q1$OOFsPCgc60l# zMBOo)=*{XvceQB?-M=X}Zao-}Ef~H=c?WOp%=4Xi1cI1QGiO8p2j$WnA@$9io@1W; zf1I5Md{kBT`0q?WK~PXsKt(`7qzUPXh!8`7C`|$?vN(p2KqP%qCWGjrA|R_Qin4am z)wM%_5U?vEqU$QM>RJ$8Dg|fXE8L>O}Xo$; zGAhH0x7vJ@-jn*oj$9!~xU=}8m60E_k*0cFf)e$h?r3H_Os~0X*9Tm6D^r+Tn3Gdd zZQdnR;p08u<$@l@uz()Ig?#aDm$gh`VJ*y@?>(@*EYImpSnhhUgV1T)r843e4)DN$ zFX%2rF;8xMTzT;fL)&OQ=!Yxiv&(i}iZ$LeQV19QAd6k6ty!RuLK6m}$c? zH*-vnd2GOw*EkudG!`!^lxHy$nROik+++UX4tv0y4D12rUQf9%51I}vuh!*HyYM17 zV?Mm7hw`FlmiPW!J24}=XX^*8Xi_yRfAnG zCef%6*T(bB*qVAcwqCE-uwuYQiZdO!qMcQyT(LJi;1=ZpYj%x?oWpO~Iw`5JVO8Th z(c#ZmvANC-awr$b#{fCaTHF>xx-1^c;uqb)4w$}xEy}jnyj1+szayEg^$N?Tkw}D& zKW`Aj(s>mx4OqS=lKkw~T2xMFfNbJH-ALWhJ9&B6c^_Mu@l`W&i*j-}u3K+z;J%Y*g?m_^=taCS1bA-V90nxdi z$p8KTeX9b!VSsOdqk_RijH!)%L2mDbfsgx(nW($g&30n0b~6CQiRS`>g9vD^+2p3} zfP~&D1f*dAo0@^|fSCp8&nf8dHe-Fz%x3-by8fTbpFmD@Yho%`AuA|N94hdP5x~;{ zc*s;AaCJ*(Es@aX(ORPTV&?QlGf{`x`@4+S(gqo>Mu)owZE&YeVUOJ-U--aHQ~}Rm zPH=~wV6!Xk111LC?@{Gwi|gv3Y02uny85%?^Aeq&ABJ7Dre3Z@NowX`l6Tec{9)HcMUfh71LH4Iy`|E$<3yX3>u+Cv+1XCXC2B%7++fqh zJ|7qPuwLYjT~FTc^gtR~#-u3GY|g+%j$!06JKc{HFohiF364W6dH3b`Ls}RSe*KZCU#Esmls#%_;vaa|6;!Lpn4Wx)5%Hc zEX>9kubNpEB-vN3u&}uDk1U*C;^kWDmkNKr|&jXRnsDT!Ww8H{m$3P70 zl^A~A^*rbZ$DX}f0EyB*?6?498hWw&z+4cG?Y$Ze@axnP_%BVKE-lzT~VwJ8djPYcYd81F6bG z-=XjP?nkgIoMbL`JoavA+M@l!F>B1dY3Lm4g+66>uc=Om=L98o-ppkj;ch)b#}(~g zb4u1fs)_`u-k74+r5~{uG*H}_CI5FmB>L-QsN_NALua~RC1C2oN)p$^Eit>5qjtRzdP2;dRT7Qyqgd2%D{sS3yrzo_3_-IW7_I|`E^eqLYZ=tu18TkI z>=nmy$>tZC#Umgh)S)pL+;154o= zPJT5B6GZc?RdJzx;U`|x%N@nE%Lc_n{!FiumT=6bmGLxWgySq@!!~MO^>*KsR@rRo zVN;LkKhRAYKtUZj^bwT?u`8OP|L_ts(SJ^bFqmYzdlL!b;a0mvM-qdz3CTQoF=?(` zW!&!DZg5&lkW=K6W}z*QrQlO3G;u}XxyUGMrQhz@wre<9{YZ+$lIZM9^sOPVuSLqf zk_VoP5)mG@&B@I#(6;-V@IX{@5gwCL@~>r1&f=pAZrC}@m-;^Z;uGZ;gI$jpFf|=Q*~7stEYb) zxqLUL_nP4)!CuGGf2WG2CHDlybmjj4z}_2PGU6vEK3pQzYb;GM8xv`3iLCLO5hcIu zh%9llD217#64>34P8UMh$cWuuU`EoOY&!ADGORTU6W_r0s5-ogH|7w6kdjQUazJq>z2cN3Y&J zu47yECuU8`8l9FteymJ?P9K%VC{lWtjva5ZLAJnP z@qlD8D&AUlpD{4Kj}x~%>ajxCA&&+aTFPr3q_6e5-8)WdL2oJ&91F`$CrrZY23|l; zMblO^+t}a?!Z9q7j19i^aU3VbTTD4XA+)^vk z;coWXiLt_ffZcQHLEcnFwD@p%esV)=oLBpyLn|LHag%@?`C%mB5Pj68&R`dqcLDoc zz$U~|V!L1iC8lF0l0{vx|p{Eens6U##R8TadU< za~e~kzW%`O%PS%&rNQ_q!KaRgs#2Ae&Ftef)w?^lmDYa+R!6f9e7ik&QoUmC6_K2; zVH3)zh3|>xOpB4O5jG6Dw)WLCYnEEX+_4y??z8Wd%WV+4_m2@xidZzHn z`74&c^;&k%g?rLz!DyI{qgk2#T{%=Q25d$x0QqXa{y>KoIA1z4@9$Tn1JkCg=G8v)L1s3Ene_wGp&B>CImR)q> zf@dGkYa^$4#ez4S@I>-Pyvmx%Fzqfd?SBk>>0&1(w=_^Lr8e-s*07#(wYQ#(Cck(| z&v8w|^_re(j;hVYc1P7lAabzhN={m?Sq0@~H0>)hxtF3kfH&qRteCdQvTW=MVG@;m zc_i1(Fg`fm67Dd@EHCM|Qxi%^yo>YEEuwrHja_^u1C-0pV*V^IIo4DinR=e1>*xuo zE2Fx00Q^Q!x4gB0S2HmA5hnza{>L~O5gu)Nk~WJK;xQ{ruK3YOhvoK=HEJSm>cNx% zUHr1!;(&RV#S?Y$t8R;f<~%qo+h1WU8e6;(KyPYoCU%}8A zQ8mombjs0?h#$ErOdN0-Z*M60_-Oals32$zGo+c|8dY=t6P3a7q0f1WTb03mw&IdA zB6)$%QYp)ckIR{=!y~@!DtP*Q_r{qLLoY7!yLJ*2C7$RP21S zJME5Ra?gkf_F-Dh<#5kVa8IxKE-F_9xl_2Av$>h?qH{%7wi(2uR<8JiI|50p1c7xR z&})8N@grI2QZ}zjfr^N-+=AR}f3DexOv>dc{&XJguH7B?w=(B(l;RTN z-vvHfBIFbome3O(@+R@DXnL-%DmQzkNd%jZg1KE$h_TB205Sfk#JIQQePoEl>-<(F zW<$(!6ZVGa0{1^H@E$B_6L5MlxP`QVs(P3G@iYb_or+xV6}h;b!qH*j-%4Kyxe-ss zt9eN8>+rw@#M5QG!oRRNYq$xoQ>&2%*GSh zIL5Rq{qW~VA4f$*v#%|~X;_6l(=PVzNmi%i;iJZ;P4LNRT_1lk#+&}fTeSWIPoiDy z*<-A%H*L?UX>Zz6Ie?136!k+M#Z|Y-<+g7QsC4WD)GGkBy$d-Ky?`A5tPkU4HzEs| z*CDbGl*mqT*_a3h8_!|mQ%aZcM#Ifqv2tmgHUxW0^ihxL;P&O9SPEf&DLm%gcKtLj z-;JK-HT|M&7-t@5Lz$t|&*gS#d&ceD#(})%f+#yO{hS@oV8;twcBFq9J1%5Lj~Ng< zsGF!`V}=jABy&QR*$)2_zGF4?h>P;Q6!R3{JCpA*Z6bC;k4RbwyABN}9p*6<=!GQJ zxatfDiViTy!>ThRmyUbJy|ghDRT7uV5LkRWW$}Yzui|XZX<;Qe=UA;>f+nXxefqV* zvC*6`Y`zuINU(xKkKD7ZoeXH8^I7abvn-Rp19>qfv-HEUPJytdk;ukC*t=<%OrR*U z)H^rQUnU*PNwvu?n`Ul@L2c)DGE4KRDGv9wTQ83q3lgp=n>Ya*N{--{e4L%#ZtN^ zHg&192btfD>Ot;+&2X3c_@##8?pog{D1-Dt4aC5ikhX3AMHyUl{sPz=(>t# zacSw7`Nmy2-b{u)3c@afWPQ<@FOT96m~XK%-|Rg%JnE!)Q?qN2ffNSpKNm$EG2<~) zqcdyvo&>Yb0UEEF5!>Ug$h{lF29%nH!UjFDaeDF&W|a1NFtSw|O1j-Djfz!0UEX+s z;kwdUmpIAI?5SECqoze)D2xZd>X~~!EfB_3keiesIUy7X=w2DM@~;Io@6i~msb5C+ zvZ~0~h&&mVmb$5>5XX0eDKrAP#BgeU#{Mkf8e|oIK8IIb#>4TVD&s!S4BTQrEM$}FK>(q)O<+MP*WDD zIgXfjjz=F?a>*_tN2x3fhzm>Yd*&}?Gqzjf)YHPHqhF=x{B zMn0`mxiddZG?tiuWRe7qXq;cu^Rh_%`h20(Aj;}ynrC?92Y5L1UGW<*8Q}L6#qVvd ztAl0)t2?mTYZjHB`mvLTLju*7_RdAGKc7*VXb_9`Jo0}KGm`qb6ykgl-rzBdV^@D8 z1r0i2&YxSNaZzS;mkuMJN2-M*?GlZ=bK@2a-12}v1Uz)7C8h5YF>hKYuPJ{PwJk#2 zBt!Cyx+o2t??jtcuD2!#n!8Z_)~Pb~x0+AvZje>lFXJAriLNty%KjF4QMLq_PD^2N zaBToLSuF*f_q%IzVC6Kx`-R7Se{2-`b zp*Ua`bA}X9{II*|1*!@}@6(9hhim>g+4;JWC$ufFrnB-3H$ylzdfm(1UWHgh1tq+gu(nB&D?7q4?Avwso}V-`S-_b?m&laD&?%%mR2I}-Ek-} zsAr7FC~ZT8py_I95E9Bb?az5{<-Cl;DE;5BPOI$%RTU3c0{@x7zdSbKHYdtfHO8h@ zHeRP2uW$vLVoZP*opObn7#G3;B^O#k8Qj0A&1C-h@MyuW?)DOnUnp#(^2h0GF zGf$CI7yHE%k>9somK4BLNg9HX7$P>7S6Jt|bI`=H^L*WTZ8&lY%np!K0dm&XO#J<* z@iRILJsAsqB0St{*6mr<$N;D1PB-0RxXRcg)O(3vC~d;n(KLA?Cnjs+=nQigh!L{w z+FyS61y>>pm`M=PSrE|+r3bD%whV1>_JDy<-~?Q>LxvvY@~M)mIb*sL4dNgW>K1Kg z`WdA7Ah%zPsvxlIrzi-2g0WH|SK7Tcl7(9LK{o^|A!<=N7XcrB$@Qc`Gntci;iNI< z6-TTWm{hQS1z3NjrsG3a^8s}w<>k!CE6ASiH=n{%1-nz8WliblIIEjF?L$2%L6ns6 z;bvLIuFO>5bM4ef1 zRBQOC^e+^NHDz{0!6+&g5Gu_U9#;)2g2#MP+WI>ujmzq0FWw=Z*pQ3x*??i%Lq*pS z0AwAg`zPSXn61q*ZXmmb7&o;TH(OnChbI!;JqYf$mL4Gl67FRY|7=+Sb>yn762&yT zcyb=|Wphj%pzy(eyTX5IYvl?@&`bf2hkzr-{5SR<9FsDs+-fIj`i|hAV5a|d$85l) zf!X$8_P=}DeBh*eNxKR0gB6+qu-woLManPi*@yU8+-^Y%|Dh*dq8$1Su;t7Tv zY9WUwl^lMKJ@djy;;}fRr2t!A=B>SPvO(>HXI(S|q04ijOGMR9mjeb&EC-y=0g1N8 zR^Xgq`m?&=Oq)wd&IO^nT($@@R~JvY;%K*<#0RuNNc;&Z@%P5w0@DqDGS;cB(RvpC zPv(II^no2}mXQES#r8pe1+|pRMHM)}vN#=~%@;i8H&<9__s+^{h2;;|)iiKtb&%CD z##8p?8&2nx4xd50E^#M>lP81|*9;AxL&l@wFAxpC?2^5Wu7TkhX%i-rem;D3n#s47 zhZWEbvEDK(oi;D0+&t7u{w8Mc@J^A^*e1{d>d?hIxCdg(gFMN?UD;udDAWy+ap7r9QrFbAq4SM4drMVU!S2u^VAHEmsQlJR`pq$o#i_x?Wem?~IU zbGA^tO>zDVDp-a-rITDg#k4*?HAA`0$$Q&WIQxDh`@q@Wb&xO-44lry> zea>?^8>Uy5gJ*{O{Q>@7sU0z!4=-^%jR{|yOc^PbZm;$Lbro@{VI?L?(IsVkYsIHIZ6a5 z8gi7djQDA9O0E__;^OkpYO6xbp$aJNvW#IFSC}dGOZw6eVU@Z0+8~sTJkBgdS;ERF zTw0uKJ6SeOVNPE8m-nqAsD@E%SvJo8rZ`L8yYQ^`Ak<2hHFNYI+ncFtC<|jjYMG0d zjIS+4sJ*BZJb2{{yXC1SM<2kmGI-^Ii&|(VQ&BO=&~&$ii*!;(dvRP;Cl@=v2ve4D zKDB^x({SxIb%<3I(K0hZ%Ig*l!?TC#>NUgS_Wh#;P3lAqq_&G7wmAUN4_n#oJnK?M zq^F0hYOzavqs9_t8a_TF!_4D#$u&NT4&X7vJ*qOUn+w9m!a%fg{%3IBhRsw(uH{(@^r5xK}XsoCP<^0R4?yA@CV@=Y>|bkOVwJT21D#%qz@HTdny9u0oaE-d48sfB- z7fy`iA(pn<5Hw2B#NgXANS%c?nfV?!d8ZQ{(^IY7Qt7AkAiksigy}0ce%s3Q;2e=2 z@bJtW7@AaU84pyn`*it2adcHj?u%FTqQ0s?+>I2cG-a3?fp5ss$w@P28B)q)s`n-Z zBctxtaRnlC1UqaeAb8EJ=7@R#X@jV*fb?e_d)sNI9Va`e+g=~{OPzF+ghL7#~vj567Fmrf>Ze3^YxoBX%zi#NOFuZTYz8qj z$w&=RK~6!Le`-O2+0L8$EBxAPZr}S*tH^sK5?7YZ$jP$Y@`|z|P2w@nKvkPrfBVWy zv#s|re3&nN)OfRr4+;721sadJLe4c9LM9 zomURUywjTEqq4V1^J*F}(a^O;^=fZ)?8_Y}pS&;b)i{e!R`_!XVNdgu!0?=&0KK07 zdd!1+zkM{4d0S`5o+jg_Ex&T_GcaBNz-yMRtmol1&Btz<`qJ1%UYrl+W!~byc#F%L zfil{pgRMN5R2EA`Af@)RaKfrr;)FweD<+sY)wmbw*H;1z2@(61?}2u zM;WKKzNk8x=^5rZTR(d7T2eow^FVIT*8>NT^1#Pe-lFQOw2v~M+Zexr|9Z_6d%IuK zC=b%cr;qeyW~KSkz>?3F2Q{cnPn4a9QrJ{;usXhrLg;5zZ>7>_R^D@p+O*`NrjJY; z?=$K4PA~Tqqy2eziO$!j@J7z&jXb~iWYT)VN8XaLUPih){>R)Z^_|u5@}7@->xE6dIsYiW%lYR6=Z9b>9(M2zH7c+Bdu z*V;P0SmKi?cve%^6mxkuQUTR`s4bg;CKcXw$bR8;QD|tLzdw%hXvnZOZYxho!jmD6 zmnX){bD-cnfb^I(dwcGQWQpa|vkMEe8BsPI)WhODX6@di3y1RZ{N`2mkP1A4E@eA= zM0zbPh$xOzb+YlUys$bQe--x(fa`R_-Nx zCp_y|lJiRPOf|9pO^W38(S;X>nT5FMufprixS#%ejIcvv)FCvjTa5f0hY-^QyB@Ql z?1GP+n6cGbj2D2DTz+FKqT)-Hs&6~PUSMVe`#TEzre>&RJk&+(S;wAU^Ulg`sAba5 zOH*3yRQZ-8$;IT+ytA^t{;0OAb}WOJGsJ#51Fn#b-gVdrp9UKhveCOMkD%d)qn*NS z33Bv?E~^#v_Z&7rQ(}W6Rr}vxx$a)amnTJN4K1qoqn-YQN#-$|9rjBxC$e9$?zbiG zrMsQFcnEuJ(ib2U7X){=pKnZ(GR=?n9=hI1mL1h1!PZnMH=LGBKNPO?G3<~um9JaN zVtQF&US`QO)Vuf*NAk9Q=NWj+cV&OR!O5F-bZE=oU-B*>1y7nO$HW zVb|~XegYbuOgpKMZ^$PC%#h&(!1cY!E7ddqu=l_D&e;m`>s7Yu3=CIt#xwPdKkn^| zThXcQi!@wnKs7?X@dVFdOAg1D^qL)I`#yDg+*Y=VsFKfcx)R zICE9C5T#-gpE*lEvvcJsq%=15zFU(9tg@mQIO85PnVoSJV~_cvP=f)s4uzw2~v%yUGZz;2<($CNiQv?x8Wx7a-{(_63N;`gT6KMnAc4?;^b7 z#~a$#O9f;#E&=&jr_A#}++rd#;j&ul^Ba67e#H3$Dq|11Vklr*f}y=&=+H{L;{)+N zv)ulkv~}{B!)50}e*?l~oGpInyx!2TEz)$C)7%Z;d_no+6*=B|7X_J}`vPoBBr0R%>z@QaV$n5L zNS5dN%Y9nOlv{4Lj35zMIaurXs3tYrW}`rLQw8dT`c;oR(KqR^)NNRaG=3b7Pbo#V zsqb*LlV+Ap_NL}LOo6+c&6{iEkE&w=LIv!ykFt)F>#v;Yw5iaWMtH|wLSK6IE}XV1 z5bylLA|G;yMe&{bUa%xXXYUfc@aiy4uokX$mR@Ub|MB-la%IbEEs^#QmF5%d&j&e5Z+}$b2njyN)xQM+w=jL;??zi` zX>w3_&C4UPIAH62{LN58ImI><#%*x4KJou&?k$wG81B6mF5AZy2@IJ53D<)JCbHLm zTV+`wbhs^=?(!v?YDU192@59NhifovxV!6F$hOQYHeOu{Nx^^=1h1l>E7 zU!?l2R!?+!G->Sez3wu&e*Xhv$5s?!ZsitLnuYwe{Jg2c@#0mre?+E9Si+HJu%R|@ zJ-LaSxCtTy@x2x~X-1NkW(E2lM531i2N;~92rDQ9kPl7Qe+ zmtzFX!yIFX9%Gct+Mrp++M&93+^T>5BwCLzbL^-~h8v&#$w4X(v;18TI~`W4b*<`< zc&bBCx0sDnf0N&dAKQHpH7_Qa)eCj?Rem>nA1XPFE?1z-ulBD#Yf6VvoeZP$m?{2vxNlQOF;lmuQshu*@}b*~M&Fo{43<8?Qm@H&-8g6lvHEsaXU9i1|3O1Nl$)=Vn^V8& zl}IU4=`XTdkM4v6e5TJZH~Osv%<@E9nd+@fkG?c$YFPTVF3pd>30F{46GK=!Zc-KO zbr&!Mwu5-wu8Y5Zypsxa3`eP0GaJ$faHFtXw`$`%mYch*Aioe!`MA6`escJ8U35Yq zixEP2TnVAj{~qBajCLGAVNRftCe@arkDy*s5Vh*#jmH%1jdHZnAQD&~?!%i_-NNth z&QokUR21{J!60Z<3Pi1%f;4$ZZGm!Elm^T?P&x{f(nQa7be0G7P=D-kWs<&l zJfxQh{~|b4KjlRyk6L!FpOS?X^CGamr#$JF_;-$TV%gI0#R`J8fi>)>%9$8SRDKK^ z-h-;IP^zA{YA^A`@a#HEY$)rtVhA-X9;u7xuX=NwBPYm#4#l3XgM==F0GRu;YU6oM z;9BBH3f=l6jc#S@1xUNLC>eRh#X46;sO=|xOSi2`NQwMhW4)>>Z;N>xKeOCp7Oook zn3Y&%`JgA5jesF?V&h*0oWJl9X@ZznTxNQJ`M<>9iVx}-f#610hJymv5$ZdFT1fz@ z{^nGtIHt7zoZ9GCIx&{oR<7mt`XH3!s;p%lxI*-JZ8nJzn4d%EA)J%=16_|%Ad`Kt}s}| z@ap(Y3}ccxk|EW!0%OEhOnVE_^3#()`0V4?6M$-3&cy`aih^(&t53#))d=GY{{7f$ z;X#9j`~Vq!$64V&mm$}`MyVnFJ~~$c{U^dz4k%YyU*9Il%8;BU{SCs>y(e)nd27QS zl0Dyw$|cxx9b96R((%UVT!OU&;1cs7Wsi9~{uM zB&UAW;3u4_lfD*5ue7MSDJ(w0|C9FKgY;ijYoX@gb* zLxUqN!i(ECjTjKu_K_Rt)RO>u7eN20{Y!Q3>O@w1%~tS-;f zY{fjwrERSbzU(Bj)vu;?;P~H>)-s zhzxHq`9vBy?t!Dd4UK-|!d}r5(z=t>pzQTq|J&>q-pyWG+g16?N=!V!9Z~xI&VTw( zPA|zW@{o#&TvX3TRrUPQ<>U+w;^ceS+-rV{s&~LR-{&P?$+3TO*_8Q0Y`Ry`xx=5B z*VqG~v5}EPU@wDkgs`)(6aw10>Wz}fOq;wC8F1sz&#N|v5ws~?z`f@>EN_^DbZN%;buHg@Jh5`MrpgYu z9v;(s*yHa<$KYdRKQw5&p@2~+egJIe@^t6$bQ#C(_PwCV=X-zWdwZLq+i;)l&~2(z zIMml~ilUy19N)p(?{w{f`URBfNuxH+B(&!95JJ(bY<-QO=1~0iCs-l(;iD#KTZ@dV z#&O|3p1xf8k3(eDk$C6WJ#NFxcn%BI)%~mgA;=_LYrqp!T&4=-CWr!=1#Y|v6V^s5 z;yxdP9SezOXhF^b_WM!Dr+nli>IcF{S(yj3EXp&}`Fr_U#vjT7%Ky9D0)1L;cumw~ zTS(64gS0+NXqMaoZz9((*LT~t-1}7|gS3>5h$!ZkbI79BhjVhmE#ycHJW90rD~VDz z4QYi4hD+Vvi`jDO4)0KYBeg-{mcRW{q&QES!3^M`j8txXYPrSDGxN+^6>_H~oZjC_ zJGQd?h*4YPuWFF*Z^IQ%+qV?GC7fwmpF-8az_DIVEY$N3FXyy`IkdED#laNAW}#vq zi-!L)i9F%!V5I1`H6UroUuou|yQiZ2bW9lgQsf64H8;&YLgeoN?ceFM?v$|5uKw1f z&rs##NA{iWct-B@jD7D6jYJo`r$X96$&@oD)Ms)pPeLqY+9xzev*R-MC&MkF021y) z7%nn5fMJj6TJ9oeAfC>g;Cem5ISKzC{6pSt*EE_7!arh6&wayha*`Wmxs_^xA~&`T z!r6;<+;eq&2dgqr)Dd~%s3OvOu9vNf47`y=2_IxxFGZ1xTND2>lY4g9SiR) zhHz9sb;5fWSIFK;ZdhfcCs>`U+EIGh=jM8`*c zdxH~xBnPD_2}yY)3Y}<7E&Cf&hF#?`mz2MPv##l4D_vQZo6FE{PDA#1O#14LUpm2W z&oH!fOCPuqPj-wM=8l_ySq5%i12@CmaYH{)aFYRUhLtZH?ZmIc5R3Enio$2X!xQ1*BlnGo%EKi~Xe%7>OBl*X zw<`>o$i_3NK822j-m~5`_5hd?&?#qKFhvgEF7?4^oVHHKbho|&!2=ht%el2s7!;-Ur>qOu054eB6 zf%~*Dlgpp|FcJg{ABZ4o^>uM;thjx!zsWABgY-dN2B@2y@cku`z*?J1!x9UC%}AK5 z&~+y7d;ciY&ekpH&`i1@->)1lfa1!1W-H>4A;xM)|T$0#u}71p4ZgXr*3m{ z;#(PF4Q{NEhmvm_e;>lSyv?br+mUGME2y_SI4&b55Y zwM;9IDrV#rW+P_0A!e9=E%1- zsSZDaW~fDZ`O|$f%p`71gxg=?KXj>c12Sk%1jqvbIl~3Wp!o2an`%ax8na-3JsqDocOC4YIp&JxL``~^$S+-zHF%h|_c zDiT~pp3rV*MBep0D~|~_!=~Zbt1`$3M)C8QSqaG}It8e#Jo->AZg|)=|9t$|8eX{G zed1xLGqG_Dtw`HlpYj7Yz%S zSQZ*qXDG&NZe8u1f#r}-XE zLlmq$vAvA8D$SE@##%dJ;|o5zVD*1*b4*EQM!eW0SYGV(UU$Yt;d$_y+Y+J)R7sTC zgh0IqfqL8OyYOTlG0#VgA2ws~EuU+EyJ!<~>-j955Ni%LDVBY5@KH(-j=I(tToY{isAyrw$d8QL6 zry8qS+7yH|8+1GmA>GrAuLjL#zWN{i>ffSYOTZlAS_<`A?u))OXntd95lg-1!SXjx zhJIEHPVuK#2T?S`J#Q8bSWRhFt2S4{rtepbKeM_ssa{UiuT0HuXfHWr zC=Hho!VIA*zcks3OX-XP-?(Apd>LbgWu^((b+*rUXSOU|?xLrFi)H93L)9W*;i3hw z_;mmnr&>VG>bi3yjcmOme@OxD4W#}%%i2(Rb53?cR z?>9s`0vhDJOld){&>Hi_ERNy+Jmz1k|I^c{kV%xB#;=7n961pk=YUf52T>&mV!UuT z^=m3Y{+;mker=;DzP&tCI+95n+?LmT9R3e8jGuqV&yMlbO@5@a+d_sOI zJ%X>#!T~NY)c`zF>F#qkZVb^S^1^R}8`Bsp;fIySHV_+gkZr`HRG4RAoEdt_+x9K5 za$?gt1wlKV>~<8`B&DaX_6?mG$>Bl_BHpUC+`@fMLTB}uZ&&|vgB97yx?&>HaFm#G zqLJ1Qd>EWxEAnq9LI+aWUkqV9WwXVX8 z&!-JVl&bJLx#E?sPCl}b52m4|^E@6_yi(e!wb6}j_J0Z?Hca6;Eit+&%i{F_a=8kz zjdbL|JySSXr~SXfs2xlfN^@*4b_Sn2h0k?LbT^HGt_v^h z20eF|+H>$@JLv`Z#EL2kEl%+but;4D!K;e5(j#dx%*;?fUOifBzACimy1^YVBiOV9 zaL1S)6^+&_M&A3dm+p{FkNqyzE2j~i@_MY-9*Ii_MY5t0!?Ow%MP5$i#?R1`_jH3U zXflEBRK3LW_uspwt@cl1yg6NT>^`-lj%um12_`4{To?3FkLlxrtAN=LuC7y!zF+P8 z=zigiB`w&+CL`u*1`jvpB)C^Umpy~#AbZYK{P#~hAzDtEWQkU4v$ZeP^uM6uv{_F2 zKzLRzC~U0Qd~gUH3JRr$V*j}BkMd+>V**xd4#a$Y^@$bto$o}%+DMFTu~0MMop*MT z{gP^1!JooYJuGa@z`n7?7z zDMA%! zK||<;@&eYU(Y}Y%drVgC*_8K1BuH9549QAJ=gh)yf0-jouS_g!C$pERzY64;OeDxp zNDz;?+7*KV(-REdq^$l=uB(Hl7prg9)lXn>+NIQ!D=Tq~!}^EMXz)pXs3# zJ);>K8t1>8yCH=b;PdxC{ic)pfSFIVM58M@JR~H7ZX+UI+AT9QXaCnDHKEf^vG5ttn$*T-6qnVGN8%)fs((?z75jb?OoxHE5~9(qmr{t71ZNXm1B zfDC=IQBmG(e|vizaoEJ_cb(`%&(_oi4F$ZQ-+bWdq3~3>LXVhb^>w$WU3msVZ(sAyJ?3V|mz!rM@^YuM&SP##{NsR=&?_Q2%4V?J5~%G) z)sHcAYwx*Usx|Yb<)n(O!t;$D2?I=(SC@xQpWojNT<)+mSMwvfhyeW($H zH1M(4UW4omfBcr5E%*C#3v@ieWy8pLz!JK(!pakyILdgH@aI(|4vus;Sid?ouOY2X zvXH*!5nszMc+LEZ2k@LX&G_)sgQh_t-!YVd!2HU5`*RbD%?ju%#w@7#7eyPw20~o2 zkWNn71OiK{%|?ul-8`=aj>sx7*&u5M$Xbxt=_=(V^m!!@kXq0zN(HkfjL%3LZ3ftc zx!_#6xxefmzQsv~3CFLnI6gA$hg1UG8V6qFcGIK^ansjw(;oBJFkKh$H*?qBlxr+@ z+l4G4cFERVmefi*yQAV0(f>a5Y`FPs(A!Pf>e6PMk4Q1+`&Q5Qw~FLxPLwQ()V2-s z35fd~OfxE`8JiQ>W%KXY+-vTum`}Gu955kvVdXCkGo$T0`8SN}zS{pgBb4~cdKlqm zWrUB`uBITeDYeUE#AD8VZi&SkgdF#n$K1{vFrRYXFZ8^RyDbiy&sn@x7e7%Oz?*Qq zskD+%C6YBX224Po9`j7?73VndVkBBoq0KSc44{*s8V%3ZUem|w3WjGN6*}FQHF5ax z%&U-$-@u`SQ_UQ0%(IC%#XG$`djHGiS&H6+D0&wwfX}(0iRQPU=`%&s^ZRd~@5BYH zu78%x8tbJrg($Jo(Q=o~>3_@SQY}DduI6ZI-0&2%w1?C%U)?PIhhJF;3rtj^SmTQE zfH@J2SE@->=Z;E>mqDdWwDp>``@^~qW-%{qGh9lp?1ia?W=mG zfSp6hD}l$oRWbL1$Sp;$o}u31DIC3!i}09@wb2HciGkb~yuP6F{@wkP$Tw=LiCeP@ ztvrjaoyodY#qERI&KxOPg_7_biPVkdW!!>oPXnvOHp3%ds&&aF+8weKA0ijM6MA?O z#>jw_Ff;cVn8`O~^?zJfGt8OQb6D*) zU+n)O$w@|*X%sS)j6DQnb`ihxMQz<-XJt>kGfe^xA*scUzS^64=IW>3R`De@r^hp0 zH7^ejwX_+NpCM3($9%Ovf3DTYPYUy3hvf#dKz}ahe?8{Ei4(7Ix<6r7(hx_yZXMxN zN0gU*TicF{bdna?Hp{$`)QbUdDtc~J{B$U?d`E2%2}EpzdY|O;-`CPTpQULiGu96( zCP4jQ|NSLse%24y%isUV-?w0Wy17LapdI^rk1gjGSl8~SF=8HV}+W%^o(o=#_ z0(fF~S+&arB>^)Blnhkny}M#29%-j^2D$ErFbA(DbkmUb5pG)gd3((smrn)F&3sBK z3-;KD9c8}NS6XlX|1svT>b>8exOJ0dKw8n)VHsn_(&&-gXvAbJzam)3f=E5)!2atA zZH8aDjpOO%L5s;sW11_#u*V!soJ10Z)A_K=B3hh0REjohQinQSUtzW; z?V{OEzW{1bMdCyoq8a8+&UWH~;dpMHAre2GgpCW$>p=7Y5VbTXCGCKRhQ}hTCsH9< zi8EBHmm)B~;IJpzAIdjR0OCn&9%4S0Od!b0ygFm-aNoEIBeA=N`7TKtKRz>KeA)yW zv`#RsZThLWPJX31^drQ1IrK9Z`Z+176S38BCTYJaEole8&{_;`D;1N6+PmNX220N8-U|O;Gkq{jemKh;%w0b-4WuIAdd7v89YehPYNK77n6q>PauA?18t=6`^`Yvr{+s78SE z!#8GZI`42ohMB1f2z5g31m^As_WkUnuBq>qhn|yNPKux8*@t@`#SnQsjYN8NGW0l5 zLkOkmbF?RUs%^0l!?;#0k=|>fI-}TmEVe~QYzsnbYqIA#OWz1(GE%#Eu{TXw5a1ru zx6;iQ#n*NX#f_)u=(pySjm}QC2w4v<>_&k6_WFJVfc5tKCzX4TQM(kb23fUBy^wMnHZ1)Z^~4<%Gq9dG5pXI+tLtKVF!{%{_EOgymr zyB6B64bmygpIT8a<53<_Q{p1`0|ZPx2M`jzXw7{Lg_ej3ZjT0^(MXeJtF-;ElFwc2 zzGcwtXUpr@lGbX?Q&wO^=?I$zs;rDiaxo~NgU%@k1-;PB%9fOfgu5_Hic4~eD~igQ zZ}1#I-0qRf8I|%udA6n^;Hf8s)SYVr@_48%z z)XLu-gR0ilYDrUGdLa`fVDlc6lXOhdlVY;zkY0Z!y=iNfzT_0kY$#b4I~$Pi&0w-B z?89qvqpQ1I+Y!{=ov6FHl_US{^i(8Hs_I&$`39?N9e{XE-hpRHB$H$X~-u>5ssf2 zp5LT$s|9-Tg)Zn1n0rD0MT-7nm$gB2KWhi;+LFq9?1|z25{gvKXV|zgrnGWYoW&Bf zQ%+n8xadDpaKR9B{*)eQ^J8RY9V_@i-`!Ab!Iszfo2M>(?aQ6scx}XaLhs?T}S`Ri+qt%F8C9^%ieF&S?bHXGTb#^PR3@ZL)k|2BDnjJfxMB-7QT|jFT ziFIjoc157hb2)#&)N=ky_52H5)&@--Yo%)hwHB4*DS>Ee#FptyVzDz9aMsnF^|k}Q z!HSz&Jw$iP;K#OmvLp0;1X7{6qH@XtCmpi9tcZ?vZ2Vn1vs4KRGg0P%2OZL3(pn{> zM-at4ap6U|s0RO2?zK2++==4TDx6wgT$N+i+wP%n^ugX+IlM6PNFj}MMu8=$Up*D$ zgx5riuI5QFu3U;IZ&L~O^nszTMIyrXc);E)(@{K*yWnuIDzMM5`M;2({BADf_^6U& zjhozJ_3_<#m3r|jlhWRD(mype9MxUevLAg=fS76N2YQWhda@`_`eX|SFfv6=kTq-O zlRDOvbfjOGwvsZ(qbby5uC1y3jdYA~1K57NlA2_NQno<|+YozRQ&;J&iPXonJ4t9- zFkHfX&pp>gV=ZJ;`(Z6IHNj(EUXx7ATO@ek6G`wm`Emzzt+WXCAA^J zG5pQgIMrz$)`S%vSxdkugOf7)JNirKeJ$jr*YeWec7N%t?#xU7l}GXRff>_UsAgGJ zMv^nV9P`jp17>^+xy?<@(KA5r{pcAlqi1ZYyhx`p<>*+xThOLG=G~~A1WzOA`em54N#~ar^UEI`xKbthRl_PCQ8iXQ4s584vq~J$3Yx|kq z2wtqY?taT%FD*;eUH=cEVSc9Z$7{A7coTu!G_~QVerFL5lnmq)leR2b&bj`I zf^u_24?y}J|0RFj1&n~%3K(B17(ctL4VrDN-NstH<7=WlTak2&dA2FMmpw`I79At0 zGt7t&EAr?v6lVhb+H3Z$*?{vgyceJKDkWh9edkja{s~m?i_SVhTWeV7K3J#M986k_ zrXDVL8^ldE;7HaXuup<{AA*1mMq}Tw#R}N>)39&aPE}gjDJYmrU=UvOTjl@#?TECB zg?{F9sNW7;V-NSt%0%~hK&|ZGqcclRx(uujRc7f;uC!*i%2du`)76etouZ`QBH5ka zvD@+NP;f zOh^;sYA)Ax9anH_U0Yj~%|X7=JJM{CefSCThrtWUE1$DU+r;*h8CzFo4x2C%lnt^! zc)=W5*YRM-agh#+hKrZ>mS{wLbSyg2H>zfII{3=^$meSXa6 z3#}5eQj`584U2BYcb(sjPXXJBEKNy_`M=-}tNLv&b(h4r{@=ko%Q; zx$#lirmxdBGfXeGIe~4wre9rDrw~n;hKwNI2(|TdKW4ye;+PXSW{l}y6;*fUY21!P zUBlY`2VHe%R-ehvzrm~eCs*y3o?o~*r5}>n#WCdP5Pv-80(T&T=3Ta$$cMdVKwVU} z$CJ5>2bjvU8Q_G-0y6+ao}~9Nuqv8H&jGe0hrd-hoK$ygJ_r~3dZ;ni!ZJK2waVf` z*?#kgy7DiqdhnRtCxzq-O$Riw!|MIKxUMM8$yaJ67g&nriD02piGE0Oq0OJ9R82Dl zJto8DbCfdjxnKC4*NmvExlUccnl<3d8ar`3lM6c_+=Lp>>P~T&%Wf1pvfB~eEwieU z_Dtc9-iGJRcxmD5l_nRi{x@D=rt3iirX2^Z(t}=F_sY#q@=KcGHOUze89luh`S3VA zJmxaj4+YK1d?=tF8dLY~D=lPD1e*2KiaecRB5%%P#wPdd;ADbFG=t#Nwgv_aspr#< z1^1NKj6Yb6NiB@qN^P4sh5-AR44E$fp3NW&7Sr&fs>N<6o+JZcbk3Q^9?l_7p|mpL zU=6O}rZ$Mh!jyp>TQtE`(gMD9H=|=lOiFfq72QZprWwIv{fWb zsf$vdf;KRkhj+S4KA#(K0dpAO3KY0&?I$y}+Wdtl!xVsnY5%k=ZJmW=4|SBDLQ+D9 zaSuBeMq?b}HF*s9(|{k}U~*`F8vZ+-;gMT6;z{cg8y(kl z1)jzwcCp!aulodj(~~_&xu*9*mm^ENDKvZFqCWx?O=S)SpK@BP?Oo)_6q@x(#1LRv z1$Ccx(L5h$^AbX)Ss58)bWXdx)e4Ph6dpY0;FNfz_Go$6{3P?oV~UddeXsE+D-U+0 z>2JULE6$aFE=gW;y(A)MBg4#yk$5*z+-dsnb~^laoNl{fyxeUuzIPV?q>C%7F8V#P z1Y)Y@_2xqDPeXn&rpgUj0kZ*QjR#p(bz2kFiv_ZVWsJ(0kl`CP7Qb}*sIkm`xfu>5 zSbG<4RCO?uVXns+s~cr0L?u6BOM6V9>Rb%t@W{Kx(WDVp0o?3;^pAVNn%7jjffh6y z0WAyAst?ZD8p$Rt)x%0buy}k`9PJGCF7paHr?eQ{8LE%M!yUAUAe?>pgA zc`6icaXoFoR0DNCPJ7G27iK$RM#JmkG%Ga6Uw{V&HO^yhb=^5=X0daB#p8m5gS$J8 zpNrt%h+~ao+Lka#8UYjUpl|E83ytG`j$-h)}VIb`ZhVi*Y z(-KmspUvX^$ zm%nkzMJkFGyKWvdZPdf_c`tfjPcwz9cAT<@=ZpXM-Cm4ltGtu#foYi-7qa(aXCmIp)c!iw$z+fY|iEze`^LoFv16dz~RDS?`y_-CiAeK z!Bwn(pz5pxqAN%v$FSS?J2>JL+i5x3pAC9Ispgm9I zTF>BGW6UGTKYbaAR_o>19W^Z+ln%zaIm4Jo4%QS}wyuUMhGnE@j!qlp8C|{b}6c^FLS?zfT`gYMk?t)nmmb&npUPT8+7DW8lTMw z>T2b2KNg0N0+R?r;z7t`?w<&nReVBP4&%~KzTFWgMYhDym)<&&N-DenUh|AQ3dx8A zg->zjXIwB7Fn6&kRWb8y-5|8^reY%7n)fbz{~&K;2PEw^&$&ZE#vD*Q&Hm51KoK-| zv+6>H;`yrYx`x!CjPc_wHE4k?&?}X}EO$p3eF{NXg(9rReK{QiSzgKVnz}>(JIV=T z$M4Nk{PRNI11(~bbKkN;z;-PQQ`aELO}4UcQ1+SEUA6atNNHzr5D6;dbyst#CFgll z9Tw{j9(yWLJglb8Y3Oy3yvMv$bxCsMzM&^X{*ukdHi7tmgHn%q-Bp~!>32bk)0GzA zsGEOkbR-mrz0zt`JyQ z)TEYBa%eA38>80F=Pp}gxUzMjZoT#3cGStHTZE^ z5%_?mTH0^Z?;E$u+HJ|d<~i|nt3|O&mZd4=;^4&dm~WEHT06U8B$9Mg6|&gV@A4u) z(ii!iJ9Yx5H`r+bb||H&8*n&MyKUf&C5<71u5ib5kT%~Re0gD`|5=`C$p75mKI|ra ztUtH|5j1@PqNQHZkM3v>n0V0MTE)orgYVyEqdhB=?jU2*MrUM=OH0r2rKhHv7i~yp z6P?|DuwboIs#0Y4<`i=yD$#OSU<>n;+clB1!!=#RHT~ocbjq>OThKfA$9?hr5!2IilW(~st&{?f8?il}+~ z+4}f*)%}ixKb)ai&r9Z5Te112eECJbysIj6j?>B$b-7~fkE&OB-dbvcW^Xs$3B7RI%JI|QOqxNF zOWmR=txT^l`Dq;s8~feF%VeqCZCDO#tM0Y z#nUoz2v+!+@~bDTy{Tne(~Vypk)9qpiZl^J+aqamZ2D!s;o~zh%#F73^6@3|TkY1C zA15hv{;&bZ8@+OFqU1_~C$G)v6KUjHCnxVr6rL2*9}DX^*a=a;Lv9irgKQ2GdY>u+b9~_xFT(NPQ;y#$Wyvll8j~54(#xn#2Ku+Aad!?(bhK~m7T1;+^yVa9g?g*b zJahxeL9Ifb5tA5WVPYwm@S1Lidc0%lk~X1?$NQIt&u{5*vaG$C+uxXODN8z7C6kwB zObXS)U1?L&!&eE;&sn?w+sJ$X!D#qsIpHPZ6L=q}-UhWEbMD%E&vJ?pXh~KmRRhXv zOti=x3XU~w)WaPK0W%jQ#3>Sbrqtmo6Wux|Ha65>&hnE7n3CCH1QW`j5U)AUeczy& z$G-9GdtQo*+efZ=&p9Y$&<26ZL(Pz5P?HqptVE76+56D55Jgx^JW5*amUvVin!5p+ ziQa3YvU(oWy|DV1xGrLcfvBD~z}*T(eyJ2W;80?2<18}q!dP07%pxPUqtx-<<$|<< zYa7~-G1ta?f~pw@l?@DZyCYI7v0j+@Kwli%1EO+VOsR+(6v(844?L}>8I$rEwHx7<6_qPe2X3B$ zk}pyoI(BVz_XZG4rzR3!0dZW)3;irMV|jydh~>}BEvPngxoE-4zn2MCvI65fwKC^M zK2ynW&MwRKg}M>@s&cbuni!sJCG?*am6h|F5@F>hD8HF-j8joaz^Ml7ss5BQlDsBI z4R40!DpmjfTr|Aj)Ec}d(D7o6H%={>iOvL(ftUfaxGp{85l_q z*QV+ksdftZtLbWQ14p1^2|4J+_;SK=^~)th5Y2@+`}WgIWTLX6Q`AdkmYh;O0Gq-xC z#p098RLm`0d&~1}m0%l#$4tCnZFV^!+Zs>TMb!`5d(9B<4VIda~SbU1?J5ur; z6+meTtcBz(C<)ItvKifO8h&{b~F%+RbG+lX?q-tW_!WXv#gqBZ07J5Ur|`j2n2`BK%m_qxlj=NV$%#!=$$OGKYm!-i;8a zJh=sz3g#X^^vuha*E&mNerS<6|7FoZnE&H0rw*86PTfmS{STM5K~u`w^L6c$&EU`o zh^kZ~7I0{fc{U1=@TZ~y9joAXj z>oD67V799dZJOwGQ_|W-`-p)3$1X;@K>=AEn0<9*`k>@dQkBIBiucfaSHOKJR0y;U zI7u~xn)GhB?4as+e5>#k=8Law)6z*Q=qMd<@E$Mc3Yb3Oh_#RJlB>_N!ghINqniGx z8uHUwwS;wRv-e04TH3S2s?*?zbtt?96V|rFoD%d!q#tCB96LVTUVYy-uGWA?k9jqG zw*r&SZfn`iYhH6dVZhAdgwJup*HSK|;dRrzb$y=|4eyg@sd}G0&&PP4X^2e18i5gb zp?ZYNH_SJGW%#H-`!`KG*3Zd^JqD_~!xuEOf$w>}f%R+OD~^1A7Hu_F@%2okp(Hwp z$GjOBPD)eL;F*kdu&;JQPpZ|GXg4%ZW#YtJfcqU)1~(nL63={7LbnnetcD=+gw7|k z1lK=B2)348SZ$tG`ums5aRR0n$GKUL^S;}00%jw}*`mk!z-8m0>CMKssIInoZ6d0Y zQ@umD9TBPPqxzdqhR`sKr?%M*u%OulVEUv4^cw=#5q(cCE)ToUQtvG{x` zA)0uJrJV>proha9N=ZizaOy`B*$A>>JiMUp-aeQ>D%5^Xxgf^rgpyVvD)lOeCllg{ zF*^f;&UJz)JJ(;BBM^;cS$8zLool~3DkqxARh+pIzuP}yKRW{llf)(u&0HvyN*mFU z(4i08EGnoh>VIo9QSrhhqm6@UqV%Ic0AB_i{NIYzJ!|`-GN0%4{u>fTVW^h6ZGMCN z{-<=k*Nv-#ugBr)mq2PBQ-5gXNlsX>O3MTwu6YswdCj4~uXEI_633q%6*ie5NJQ&} zP|cx3b3S#lI;b2FtK$<`+hk>JzZ{ydraf8aA(YwJ`oYGQA8eH?#!U4+*G6Kj(d?oA zMT0vTNYp!3q8?Z6W>dj#-UCq|E27%CZcevrHouF_z2?Nj?iLu^SMv+c@(U-rZcZ0# z)-F-VPdQw0oDoKeGaFub5|Syxg!!! z`hmol&ec(@G*+%haoCLF(0ScWC~Zv>lBDlKMG;TuO19ey(R4oi&3b167}i<}A!gf* zA^`8@fnLPR^O`Q}9Nyhjvw(NE8Jg>Ixc@Oy73V|o~bt*29V==|1>_DROW(rL4Y?z|g^h#ZIO)GPL6IK%L?hiSi#M@tu zBzhM1(8~$z0<)AG_(b74zxsN(dN@b3-lvu9&z3k7V>?rd)JnkUy>7u9kz`}7#z7gc z%sB_P)Sd74PJQX($V;%FJy~pY@#1pZ4I=H8jlHJNx{G)aO+iqrzl;X5to|(n=7@pP zCpC(2;M}#4%%w^)eb?1X(|qnrJGkZ`0MOskM_e zX@uUjX%k0H2$fW%*^K@QHS#Vzd~8;a;=T=5?^9Mk=x|cJ(+Cq%gaQ)HghZ@}W^XL1 z7RurVS63``x=}0j#aeyu1#k&4MSGOPf4n5VfV`42d^maLIq;JNp5BB&W6Y4lKT;l| z)eu>}u@fhZn>fJ~+b4TQ{T~QM-_k)_jikeGZR|n05 ztiD)RU*-aEz}yVLv3mWZUDgK8-2X?}nZVgty$}4{8AA3Xl@ubOEJ>EZ*v7u^+NQx+ zX9hEanK5RPP$7xzl1fs^Qpz?aNlIzcPDyrtDoJ9D`G22t&g;JS&YgSx&*$^p=Q+!J z?pdGnoabzWy^pZrsz;Nj8V4%2M7fO0cIV@$S`Wi5d!!cGDLUyfsKD2gPqC|!!bPp}b{7P{k3=D@nS^}iTm7EBXZ)q6l{Q^Qdhwg+GwUQX!CI{0@BAKwZhu9f9y`mQ0Ho~XLe>ArQx?r7|xp`OncPO)F)pu_jefOZnWxbW81e>n%%IV{FoHRl9#IFWms^2 zOvtkE;}rS{PZx*c$Ar#C#elg)SD6R1bYdrM{? zboEBeRhe?cHQC0VhyX&8y$d2`Kb7R zVOp7vIF|IjtkauuvHlr7{CO{?7(FhT7dk8hdXDnsxXI?9Ilq{{f!WOpRCtYc@IJH} zJZIeGxk$6lrY}>9AC#1g#+=Ea?2D4hnfw|T5r-OEU|BU8Tb|To%aq^+m7+RRP%r3$ zni@Q4n(9i>`2^)*gU$0A1{#IN3>}fkGlGNEE`okT(5FHbD7P6=ps(m&`%II&U-T_~ zJLzTRDo$U`qNXrgIETpdOsIId#)x=d)fM$@s9}XJdXiz~2*Zj;%?>8{!QkJA7kAdY z`1w?`;+>SHc=&|zYhh51&%gACOICzSE^N~AxUcflP94T4>rq_qEnbg6UJhYm;pX?8 zC5#b6XbiKYEnxZs;c8KnWxA&hPaQKlS;cgOU52CXPo2Kj=)Z-tB`C+8>G@o~p=DUfANrlAsYFUav~QSz7s=Sr6a%;*0mZjV}ivCnz4=fJf@ zSpNaNMp#9Xj1e5BUTxBCdZ4OC){EB)!twe5)@tOhS1-QNB@pM=x9Sy2h za=mu3>oMQ%W=d9+6y|o9M-X9RX+j?Lx~;$D(drGlf0%kJ1a}rz4tJK7xVM`8gZLqZ z(!E_f77x0%>eHqJZ);#f%;=+5QE}2^Z+cArX-!b6jYieHB{Ol@5Kqg7%r5)T$nFlE z-Sr_uvlETbAL`JXQ+vD_Xv>bzv9POKc4Ug(ipE}s#vZ1&UOcwJx67M?MYnGzyTu81 zfTB-(gL^xD0TW_EuOTGZr!&X z>ouw~?oz(y=A`YxnJo2I6DC^-ChJij1e3MM@@f*;Rwr;rlmC^H!;;a_6UHT~k~DMq z#~K@?I6e<55E0EVy84}T_0NL~M1(AdK$MC=#QyqF0uiA-WaKXzAiLh1%wzf`qF^g7 z_iojzO^4_ny}GyS*d|dN-!Dp9P@2H;9ZF=|7r#U6qrh6sW51WH^ z9T8Z2(siPB*ZHYQ|0jIAnGuC#+o_Q)cU9(WDn;f|`!9C+CD652`cfO8?J_=FTFC39 zRxCc~UUB$h#>;`0$h|x9WvV|BmM@z@!qk!AY=8z4OEu?j5eqx!i}VNZjAU z{amPlj50gTKz5XY?A+#WSc-OEy&02;wg^=_fr?Q`KkMG`&*m#sPX1{EGOd21K#H|t zZ3bMeGC!ZXa73Wc<^?2u)tfp@g~c#{a9_MD6LBhvOl%|*JQbVzH=~~vjo*QH_VO)n z&waNjce&3d=wM1F2GYZBqle`NVK~S_oA2iSQ2H~sxTh8U%XiQ*jdonZm{D<~wfbiV z?7fHdt~4{WPl#2oX~{6W>D-fn8oWHDW42uEuFnb(;)zEUYr3*kAdL{Z88kw9RDKTP zf=3nKa^Lg5jryt-AXm~dj!37=q2wzUmGC8-j{Q4O8e|pT=sFsq87WTPdQ_

    E$96 z()%sx4O3-8gylXG!hT2CGMC!U3?#PJ53qISS5@%81 z4^ZG`({B9UH)dyU#YGzOD62HYÔnl<0JB@{o9qKk(gyhd?^tMW~ooB7P>gpotl zE}G(Ss-XOqpd1e_(Hk!D7kI*gewk;X` z3!w>%?vWTXEIvj(!TbU(`j)rvH{zSV)mHY5UR9YqVnxC^Pohpw`xiZG;KkPoR=-8n zE~mC4b#2|=v=qAsWFxq5>B)3_xIUtm;@ zSr)0O-Hwwkn&nk*`tJX%qA%LH4Pu8CCsOqqORcnOs{&j@;P?LZF4~2Rp6}B+JgQ#W zMfTguXl&lx=-P_I&*pG$bEF~(IJKDstl#v0)TaUGnEGBQX%^%wOXuspEg{%5rO*iW zJVQ6Rrk7qVfbk5WU!I5YT%h`!HkB)TQG>D-D<)}_`Vw|4M$VnFb+&0NuNsyjA7)#O zIm}rfCMa20lOSPQq*dAIE4i88pwG}ryI#-+Igqx^9n&FrF6rOd7BLSN5T;sh*?7We zq1t!p*t!k7#8%m&i>K+fZW@9`NSDu|(RI^}u1(q~s<{Xm(X*!2k^xLC;8AV2Os?n4 zqDSb9gJZ{z<5Xk>B^9qrqy44ZZ3yQTV)DcXe;aLoMlMTJq_{WN7h56q7#0f~MIop9 zh2n`MVj1mbyOtjYG~Lfm9@)0pE2?eBUQuoOM0e}cp<5Sqkf@|J{zqkUgHKwOCj$+O z9572@7YvP}QDufjEtSQjJ{+^cAfDFP49Wjw?x^GpGd1oj2;pj z7n>ZbmY@gP0N)8yX~D-^Qrnk?B9oW2YZ`C)pdsV!^_uym2W3j6c@f#$M)uOT)JEiW z?*@(=5}Pt+sOn6&r?jY$$3wCj;>)IY$;OW`^+eNF^8(eMxz~u2-TVMDCc5_HEn_7aZ^T$RLywhHx6Ds30f!hG%LcpBmP46)yrzX7Mu{qu%3P}}bNZ$C zl6^<^s}iZa`65E5w5bUc_=>_(P&0zDK!oo*X}Gd@#SY)J;*WYyn2V0Yj4Y+CVDWjn zgqq!S$gDtvBd;+m+iKr^r`wvEeJK5 zlD8)G%9*-XF1&Q;{(_{IK`yDKBsDQ!*TkaWoQO8l1Wr^!bE3tea>~6MpQDUP_C&F25Y>KIkQr8OE+k2tvbPgD-_( zg5+s7&F6jHd|nMP*i*c_80>rL2C*_I(<9y@w4Ed!bahjEI~S)|RPPSl%uR-PIW(

    ls%H38Eu%r!avq* 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 literal 0 HcmV?d00001 diff --git a/testsuite/c_test/driver_test/SANITY0003-array_single/array_single.c b/testsuite/c_test/driver_test/SANITY0003-array_single/array_single.c new file mode 100644 index 0000000000..22c881cdde --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0003-array_single/array_single.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int A[5]; +int foo(int i) { + A[3] = i + A[2]; + return A[(i >= 0 && i < 5) ? i : 0]; +} + +float B[15]; +float bar(int i) { + B[3] = i + B[2]; + return B[(i >= 0 && i < 5) ? i : 0]; +} + +// variable array type +void vararr(int sz) { + int my[sz]; + int i; + for (i = 0; i < sz; ++i) { + my[i] = i; + } + for (i = 0; i < sz; ++i) { + if (my[i] != i) { + abort(); + } + } +} + +int main() +{ + vararr(4); + + A[0] = 0; + A[2] = A[3] = 2; + if (A[3] != 2) { + abort(); + } + if (foo(2) != 2) { + abort(); + } + if (A[3] != 4) { + abort(); + } + if (foo(5) != 0) { + abort(); + } + if (A[3] != 7) { + abort(); + } + + B[0] = 0; + B[1] = B[2] = B[3] = 3; + if (B[3] != 3) { + abort(); + } + if (bar(1) != 3) { + abort(); + } + if (B[3] != 4) { + abort(); + } + if (bar(5) != 0) { + abort(); + } + if (B[3] != 8) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0003-array_single/expected.txt b/testsuite/c_test/driver_test/SANITY0003-array_single/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0003-array_single/test.cfg b/testsuite/c_test/driver_test/SANITY0003-array_single/test.cfg new file mode 100644 index 0000000000..1f6e84400b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0003-array_single/test.cfg @@ -0,0 +1,2 @@ +compile(APP=array_single.c,OPTION="--no-maple-phase -o array_single") +run(array_single) diff --git a/testsuite/c_test/driver_test/SANITY0004-binop/binop.c b/testsuite/c_test/driver_test/SANITY0004-binop/binop.c new file mode 100644 index 0000000000..733be02b68 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0004-binop/binop.c @@ -0,0 +1,73 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int a = 0x80000001; +unsigned int ua = 0x00000002; +unsigned int val = 0xffffff84; + +int main() +{ + int c = a; + + c += a | 0; + c += a & 1; + c += a ^ 0; + c += a >> 0; + c += a << 0; + + c += a | 1; + c += a & 5; + c += a ^ 1; + c += a >> 1; + c += a << 1; + + c += a | 0x7ff; + c += a & 0x7ff; + c += a ^ 0x7ff; + c += a >> 16; + c += a << 16; + + c += a | 0xfff; + c += a & 0xfff; + c += a ^ 0xfff; + c += a >> 24; + c += a << 24; + + c += a | 0xffff; + c += a & 0xffff; + c += a ^ 0xffff; + c += a >> 31; + c += a << 31; + + unsigned int u = ua; + u += ua >> 0; + u += ua >> 1; + u += ua >> 16; + u += a >> 24; + u += a >> 31; + + if (c != 0xc102af83) { + abort(); + } + if (u != 0xffffff84) { + abort(); + } + if (u != val) { + abort(); + } +} diff --git a/testsuite/c_test/driver_test/SANITY0004-binop/expected.txt b/testsuite/c_test/driver_test/SANITY0004-binop/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0004-binop/test.cfg b/testsuite/c_test/driver_test/SANITY0004-binop/test.cfg new file mode 100644 index 0000000000..9561de3a26 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0004-binop/test.cfg @@ -0,0 +1,2 @@ +compile(APP=binop.c,OPTION="--no-maple-phase -o binop") +run(binop) diff --git a/testsuite/c_test/driver_test/SANITY0005-cand/cand.c b/testsuite/c_test/driver_test/SANITY0005-cand/cand.c new file mode 100644 index 0000000000..fa71bffcbb --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0005-cand/cand.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int i = 2; +int main() { + int v = (((i > 0) && (i < 3)) ? 1 : 2); + if ( v != 1 ) { + abort(); + } + + v = (((i > 0) && (i < 2)) ? 1 : 2); + if ( v != 2 ) { + abort(); + } + + v = (((i > 2) && (i < 3)) ? 1 : 2); + if ( v != 2 ) { + abort(); + } +} diff --git a/testsuite/c_test/driver_test/SANITY0005-cand/expected.txt b/testsuite/c_test/driver_test/SANITY0005-cand/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0005-cand/test.cfg b/testsuite/c_test/driver_test/SANITY0005-cand/test.cfg new file mode 100644 index 0000000000..75021196e6 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0005-cand/test.cfg @@ -0,0 +1,2 @@ +compile(APP=cand.c,OPTION="--no-maple-phase -o cand") +run(cand) diff --git a/testsuite/c_test/driver_test/SANITY0006-goto/expected.txt b/testsuite/c_test/driver_test/SANITY0006-goto/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0006-goto/goto.c b/testsuite/c_test/driver_test/SANITY0006-goto/goto.c new file mode 100644 index 0000000000..a0bad57bf4 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0006-goto/goto.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int g = 5; + +int main() { + for (int i = 0; i < 10; i++) { + if (i == 1) { + goto label; + } + g = i; // 0 + } + abort(); + +label: + if (g != 0) { + abort(); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0006-goto/test.cfg b/testsuite/c_test/driver_test/SANITY0006-goto/test.cfg new file mode 100644 index 0000000000..532cd95a41 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0006-goto/test.cfg @@ -0,0 +1,2 @@ +compile(APP=goto.c,OPTION="--no-maple-phase -o goto") +run(goto) diff --git a/testsuite/c_test/driver_test/SANITY0007-hello/expected.txt b/testsuite/c_test/driver_test/SANITY0007-hello/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0007-hello/hello.c b/testsuite/c_test/driver_test/SANITY0007-hello/hello.c new file mode 100644 index 0000000000..8b6d7b83d5 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0007-hello/hello.c @@ -0,0 +1,27 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main() { + char str[32]; + int v = sprintf(str,"hello world\n"); + + if (v != 12) { + abort(); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0007-hello/test.cfg b/testsuite/c_test/driver_test/SANITY0007-hello/test.cfg new file mode 100644 index 0000000000..25bf685d1b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0007-hello/test.cfg @@ -0,0 +1,2 @@ +compile(APP=hello.c,OPTION="--no-maple-phase -o hello") +run(hello) diff --git a/testsuite/c_test/driver_test/SANITY0008-if_call_return/expected.txt b/testsuite/c_test/driver_test/SANITY0008-if_call_return/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0008-if_call_return/if_call_return.c b/testsuite/c_test/driver_test/SANITY0008-if_call_return/if_call_return.c new file mode 100644 index 0000000000..e55533bd1f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0008-if_call_return/if_call_return.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int i = 1; +float f = 2.2; +long long ll = 3; +double d = 4.4; + +int fi(){ return i; } +float ff(){ return f; } +long long fll(){ return ll; } +double fd(){ return d; } + +int main() { + if (fi() != 1) { + abort(); + } + if (ff() != (float)2.2) { + abort(); + } + if (fll() != 3) { + abort(); + } + if (fd() != 4.4) { + abort(); + } + return 0; +} + diff --git a/testsuite/c_test/driver_test/SANITY0008-if_call_return/test.cfg b/testsuite/c_test/driver_test/SANITY0008-if_call_return/test.cfg new file mode 100644 index 0000000000..f69eadad91 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0008-if_call_return/test.cfg @@ -0,0 +1,2 @@ +compile(APP=if_call_return.c,OPTION="--no-maple-phase -o if_call_return") +run(if_call_return) diff --git a/testsuite/c_test/driver_test/SANITY0009-if_else/expected.txt b/testsuite/c_test/driver_test/SANITY0009-if_else/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0009-if_else/if_else.c b/testsuite/c_test/driver_test/SANITY0009-if_else/if_else.c new file mode 100644 index 0000000000..63d19c2a83 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0009-if_else/if_else.c @@ -0,0 +1,28 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main() { + int i = 1; + + if (i > 1) { + abort(); + } else { + printf(""); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0009-if_else/test.cfg b/testsuite/c_test/driver_test/SANITY0009-if_else/test.cfg new file mode 100644 index 0000000000..a06c1e66f0 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0009-if_else/test.cfg @@ -0,0 +1,2 @@ +compile(APP=if_else.c,OPTION="--no-maple-phase -o if_else") +run(if_else) diff --git a/testsuite/c_test/driver_test/SANITY0010-if_else_fp/expected.txt b/testsuite/c_test/driver_test/SANITY0010-if_else_fp/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0010-if_else_fp/if_else_fp.c b/testsuite/c_test/driver_test/SANITY0010-if_else_fp/if_else_fp.c new file mode 100644 index 0000000000..65d0609a14 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0010-if_else_fp/if_else_fp.c @@ -0,0 +1,108 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main() { + double d1 = 10; + double d2 = 20; + int i = 0; + + if (d1 <= d2) { + i++; + } else { + abort(); + } + + if (d2 >= d1) { + i++; + } else { + abort(); + } + + if (d2 > d1) { + i++; + } else { + abort(); + } + + if (d1 < d2 && d2 > d1) { + i++; + } else { + abort(); + } + + if (d1 != d2) { + i++; + } else { + abort(); + } + + d1 = 20; + if (d1 <= d2) { + if (d1 == d2) { + i++; + } else { + abort(); + } + } + + float f1 = 10; + float f2 = 20; + + if (f1 <= f2) { + i++; + } else { + abort(); + } + + if (f2 >= f1) { + i++; + } else { + abort(); + } + + if (f2 > f1) { + i++; + } else { + abort(); + } + + if (f1 < f2 && f2 > f1) { + i++; + } else { + abort(); + } + + if (f1 != f2) { + i++; + } else { + abort(); + } + + f1 = 20; + if (f1 <= f2) { + if (f1 == f2) { + i++; + } else { + abort(); + } + } + + if (i != 12) { + abort(); + } +} diff --git a/testsuite/c_test/driver_test/SANITY0010-if_else_fp/test.cfg b/testsuite/c_test/driver_test/SANITY0010-if_else_fp/test.cfg new file mode 100644 index 0000000000..79cfd99805 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0010-if_else_fp/test.cfg @@ -0,0 +1,2 @@ +compile(APP=if_else_fp.c,OPTION="--no-maple-phase -o if_else_fp") +run(if_else_fp) diff --git a/testsuite/c_test/driver_test/SANITY0011-ind_call/expected.txt b/testsuite/c_test/driver_test/SANITY0011-ind_call/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0011-ind_call/ind_call.c b/testsuite/c_test/driver_test/SANITY0011-ind_call/ind_call.c new file mode 100644 index 0000000000..6cfda4c04c --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0011-ind_call/ind_call.c @@ -0,0 +1,31 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int x = 1; + +int foo(){return x;} + +int main() { + int (*fptr)() = foo; + int v = fptr(); + + if (v != 1) { + abort(); + } + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0011-ind_call/test.cfg b/testsuite/c_test/driver_test/SANITY0011-ind_call/test.cfg new file mode 100644 index 0000000000..c05b42ed6b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0011-ind_call/test.cfg @@ -0,0 +1,2 @@ +compile(APP=ind_call.c,OPTION="--no-maple-phase -o ind_call") +run(ind_call) diff --git a/testsuite/c_test/driver_test/SANITY0012-large_stack/expected.txt b/testsuite/c_test/driver_test/SANITY0012-large_stack/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0012-large_stack/large_stack.c b/testsuite/c_test/driver_test/SANITY0012-large_stack/large_stack.c new file mode 100644 index 0000000000..41bc2c2449 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0012-large_stack/large_stack.c @@ -0,0 +1,43 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +#define asize 500 +int sum = 0; +void vararr(int sz) { + int my[sz]; + volatile int a[asize], b[asize], c[asize]; + + for (int i = 0; i< asize; i++) { + a[i] = i; b[i] = i + 1; c[i] = i + 2; + sum = a[i] + b[i] * c[i]; + if (i < sz) { + my[i] = sum; + } + } + + if ((my[0] != 2) || + (my[1] != 7) || + (my[2] != 14) || + (my[3] != 23)) { + abort(); + } +} + +int main() { + vararr(4); +} diff --git a/testsuite/c_test/driver_test/SANITY0012-large_stack/test.cfg b/testsuite/c_test/driver_test/SANITY0012-large_stack/test.cfg new file mode 100644 index 0000000000..34877620e8 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0012-large_stack/test.cfg @@ -0,0 +1,2 @@ +compile(APP=large_stack.c,OPTION="--no-maple-phase -o large_stack") +run(large_stack) diff --git a/testsuite/c_test/driver_test/SANITY0013-memexpr/expected.txt b/testsuite/c_test/driver_test/SANITY0013-memexpr/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0013-memexpr/memexpr.c b/testsuite/c_test/driver_test/SANITY0013-memexpr/memexpr.c new file mode 100644 index 0000000000..5417248d6a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0013-memexpr/memexpr.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main() { + struct PSas { + short a, b; + int *p; + }(*PSas0), (*PSas1); + + struct PSas pSas0, pSas1, pSasa[10]; + + int i = 5; + PSas0 = &pSas0; + PSas1 = &pSas1; + + pSasa[8].a = 2; + (*PSas0).a = 3; + (*PSas1).p = &i; + + if (pSasa[8].a != 2 || (*PSas0).a != 3 || *((*PSas1).p) != 5) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0013-memexpr/test.cfg b/testsuite/c_test/driver_test/SANITY0013-memexpr/test.cfg new file mode 100644 index 0000000000..249f93d1e9 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0013-memexpr/test.cfg @@ -0,0 +1,2 @@ +compile(APP=memexpr.c,OPTION="--no-maple-phase -o memexpr") +run(memexpr) diff --git a/testsuite/c_test/driver_test/SANITY0014-select/expected.txt b/testsuite/c_test/driver_test/SANITY0014-select/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0014-select/select.c b/testsuite/c_test/driver_test/SANITY0014-select/select.c new file mode 100644 index 0000000000..dfe621fe53 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0014-select/select.c @@ -0,0 +1,28 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main(int argc, char *argv[]) +{ + int i = (argc != 1) ? ((argc != 2) ? ((argc != 3) ? 6 : 7) : 5) : ((argc == 4) ? 8 : 9); + + if (i != 9) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0014-select/test.cfg b/testsuite/c_test/driver_test/SANITY0014-select/test.cfg new file mode 100644 index 0000000000..4a400fc2ae --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0014-select/test.cfg @@ -0,0 +1,2 @@ +compile(APP=select.c,OPTION="--no-maple-phase -o select") +run(select) diff --git a/testsuite/c_test/driver_test/SANITY0015-select_fp/expected.txt b/testsuite/c_test/driver_test/SANITY0015-select_fp/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0015-select_fp/select_fp.c b/testsuite/c_test/driver_test/SANITY0015-select_fp/select_fp.c new file mode 100644 index 0000000000..6c3019a975 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0015-select_fp/select_fp.c @@ -0,0 +1,29 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main(int argc, char *argv[]) +{ + float f = 2000; + int i = (argc == 1) ? ((f != 200) ? ((f == 2000) ? 6 : 7) : 5) : ((argc == 4) ? 8 : 9); + + if (i != 6) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0015-select_fp/test.cfg b/testsuite/c_test/driver_test/SANITY0015-select_fp/test.cfg new file mode 100644 index 0000000000..dff21dfb16 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0015-select_fp/test.cfg @@ -0,0 +1,2 @@ +compile(APP=select_fp.c,OPTION="--no-maple-phase -o select_fp") +run(select_fp) diff --git a/testsuite/c_test/driver_test/SANITY0016-set/expected.txt b/testsuite/c_test/driver_test/SANITY0016-set/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0016-set/set.c b/testsuite/c_test/driver_test/SANITY0016-set/set.c new file mode 100644 index 0000000000..3eaca49ef8 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0016-set/set.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include + +void foo1(int x) { // x = (0, 1, -1, 1, 0, 0) + int a1 = x++ == 0; + int a2 = x-- != 0; + int a3 = --x < 0; + int a4 = x+2 > 0; + int a5 = ++x <= 0; + int a6 = x >= 0; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +void foo2(int x) { // x = (1, 2, 0, 2, 1, 1) + int a1 = x == 1; + int a2 = ++x != 1; + int a3 = x-2 < 1; + int a4 = x > 1; + int a5 = --x <= 1; + int a6 = x >= 1; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +void foo3(int x, int y) { // x&y = (1==1, 1!=2, 0<2, 0>-1, 0<=0, 0>=0) + int a1 = x == y; + int a2 = x != ++y; + int a3 = --x < y--; + int a4 = x > y-2; + int a5 = x <= --y; + int a6 = x >= --y; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +void foo4(unsigned x) { // x = (0, 1, 0xf-f, 1, 0, 0) + unsigned a1 = x++ == 0; + unsigned a2 = x-- != 0; + unsigned a3 = (--x < 0) + 1; + unsigned a4 = x+2 > 0; + unsigned a5 = ++x <= 0; + unsigned a6 = x >= 0; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +void foo5(unsigned x) { // x = (1, 2, 0, 0xf-f, 1, 1) + unsigned a1 = x == 1; + unsigned a2 = ++x != 1; + unsigned a3 = x-2 < 1; + unsigned a4 = x-3 > 1; + unsigned a5 = --x <= 1; + unsigned a6 = x >= 1; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +void foo6(unsigned x, unsigned y) { // x&y = (1==1, 1!=2, 0<2, 0xf-f>1, 0<=0, 0>=0, + // 0xf-f>=0) + unsigned a1 = x == y; + unsigned a2 = x != ++y; + unsigned a3 = --x < y--; + unsigned a4 = --x > y; + unsigned a5 = ++x <= --y; + unsigned a6 = x >= y; + unsigned a7 = --x >= y; + if (a1+a2+a3+a4+a5+a6+a7 != 7) { + abort(); + } +} + +void foo7(unsigned x) { // x = (4096, 4097, 4094, 4097, 4096, 4096) + unsigned a1 = x == 4096; + unsigned a2 = ++x != 4096; + unsigned a3 = x-3 < 4095; + unsigned a4 = x > 4096; + unsigned a5 = --x <= 4096; + unsigned a6 = x >= 4096; + if (a1+a2+a3+a4+a5+a6 != 6) { + abort(); + } +} + +int main() { + foo1(0); + foo2(1); + foo3(1, 1); + foo4(0); + foo5(1); + foo6(1, 1); + foo7(4096); +} diff --git a/testsuite/c_test/driver_test/SANITY0016-set/test.cfg b/testsuite/c_test/driver_test/SANITY0016-set/test.cfg new file mode 100644 index 0000000000..667fda6a6b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0016-set/test.cfg @@ -0,0 +1,2 @@ +compile(APP=set.c,OPTION="--no-maple-phase -o set") +run(set) diff --git a/testsuite/c_test/driver_test/SANITY0017-struct_bits/expected.txt b/testsuite/c_test/driver_test/SANITY0017-struct_bits/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0017-struct_bits/struct_bits.c b/testsuite/c_test/driver_test/SANITY0017-struct_bits/struct_bits.c new file mode 100644 index 0000000000..7deea9e24a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0017-struct_bits/struct_bits.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +typedef struct x { + long x; + unsigned int z1:3; + unsigned int z2:12; + int z3:2; + int z4:10; + int z5:5; + int y; + char z[32]; +} x; + +typedef struct y { + long x; + long long x1 : 5; + long long x2 : 16; + unsigned long long x3 : 33; + long long x4 : 10; + int y; +} y; + +void foo() { + x xxx; + xxx.x = 1; + xxx.y = 2; + xxx.z1 = 0x7; + xxx.z2 = 0x800; + xxx.z3 = 0x3; + xxx.z4 = 0x201; + xxx.z5 = 0x11; + xxx.z[0] = 4; + xxx.z[31] = 6; + xxx.z[1] = 5; + + if (xxx.z1 != 7) { + abort(); + } + if (xxx.z2 != 0x800) { + abort(); + } + if (xxx.z3 != -1) { + abort(); + } + if (xxx.z4 != -511) { + abort(); + } + if (xxx.z5 != -15) { + abort(); + } +} + +void bar() { + y yyy; + + yyy.x = 3; + yyy.y = 4; + yyy.x1 = 7; + yyy.x2 = 0xff; + yyy.x3 = 0x800f0008; + yyy.x4 = 0x15; +} + +int main() { + foo(); + bar(); + return 0; +} + diff --git a/testsuite/c_test/driver_test/SANITY0017-struct_bits/test.cfg b/testsuite/c_test/driver_test/SANITY0017-struct_bits/test.cfg new file mode 100644 index 0000000000..7d6718faaa --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0017-struct_bits/test.cfg @@ -0,0 +1,2 @@ +compile(APP=struct_bits.c,OPTION="--no-maple-phase -o struct_bits") +run(struct_bits) diff --git a/testsuite/c_test/driver_test/SANITY0018-sum_array/expected.txt b/testsuite/c_test/driver_test/SANITY0018-sum_array/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0018-sum_array/sum_array.c b/testsuite/c_test/driver_test/SANITY0018-sum_array/sum_array.c new file mode 100644 index 0000000000..714090b691 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0018-sum_array/sum_array.c @@ -0,0 +1,43 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +//int main(int argc, char *argv[]) +int main() +{ + int a[10], b[10], c[10], i; + + for (i = 0; i < 10; i++) { + b[i] = i << 2; + c[i] = i << b[i]; + } + + for (i = 0; i < 10; i++) { + a[i] = b[i] + c[9-i]; + } + + int sum = 0; + for (i = 0; i < 10; i++) { + sum += a[i]; + } + + if (sum != 1985229660) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0018-sum_array/test.cfg b/testsuite/c_test/driver_test/SANITY0018-sum_array/test.cfg new file mode 100644 index 0000000000..dfd4ff4f73 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0018-sum_array/test.cfg @@ -0,0 +1,2 @@ +compile(APP=sum_array.c,OPTION="--no-maple-phase -o sum_array") +run(sum_array) diff --git a/testsuite/c_test/driver_test/SANITY0019-sum/expected.txt b/testsuite/c_test/driver_test/SANITY0019-sum/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0019-sum/sum.c b/testsuite/c_test/driver_test/SANITY0019-sum/sum.c new file mode 100644 index 0000000000..d49699cfd2 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0019-sum/sum.c @@ -0,0 +1,31 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main(int argc, char *argv[]) { + int sum = 0; + + for (int i = 0; i < 10; i++) { + sum += i; + } + + if (sum != 45) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0019-sum/test.cfg b/testsuite/c_test/driver_test/SANITY0019-sum/test.cfg new file mode 100644 index 0000000000..939fe40e92 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0019-sum/test.cfg @@ -0,0 +1,2 @@ +compile(APP=sum.c,OPTION="--no-maple-phase -o sum") +run(sum) diff --git a/testsuite/c_test/driver_test/SANITY0020-vararg2/expected.txt b/testsuite/c_test/driver_test/SANITY0020-vararg2/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0020-vararg2/test.cfg b/testsuite/c_test/driver_test/SANITY0020-vararg2/test.cfg new file mode 100644 index 0000000000..6bb3bd0f2a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0020-vararg2/test.cfg @@ -0,0 +1,2 @@ +compile(APP=vararg2.c,OPTION="--no-maple-phase -o vararg2") +run(vararg2) diff --git a/testsuite/c_test/driver_test/SANITY0020-vararg2/vararg2.c b/testsuite/c_test/driver_test/SANITY0020-vararg2/vararg2.c new file mode 100644 index 0000000000..eb0fcd53dd --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0020-vararg2/vararg2.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include + +static double f (float a, ...); +static double (*fp) (float a, ...); + +main () { + fp = f; + if (fp ((float) 1, (double)2) != 3.0) { + abort (); + } + exit (0); +} + +static double +f (float a, ...) { + va_list ap; + + va_start(ap, a); + float i = va_arg(ap, double); + return (double)a + i; +} diff --git a/testsuite/c_test/driver_test/SANITY0021-cc_param2/cc_param2.c b/testsuite/c_test/driver_test/SANITY0021-cc_param2/cc_param2.c new file mode 100644 index 0000000000..083050da0a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0021-cc_param2/cc_param2.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +// +// Test calling convention of passing half-half struct param +// +#include +typedef struct { long long i; int j; } S0; +typedef struct { long long i; int j; } S1; +typedef struct { long long i; int j; } S2; + +// IntCC: 1 intreg short, half of s passed on stack, half in fpreg +void foo1( int i1, int i2, int i3, S0 r, int i4, int i5, int i6, int i7, S1 s, S1 t ) +{ + if (r.j != 2) abort(); + if (s.j != 4) abort(); + if (t.j != 6) abort(); +} + +void foo2( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, S1 s, S1 t ) +{ + if (s.j != 4) abort(); + if (t.j != 6) abort(); +} + +int main() +{ + S0 x = { 1, 2 }; + S1 y = { 3, 4 }; + S1 z = { 5, 6 }; + + foo1(1,2,3,x,4,5,6,7, y, z); + foo2(0,0,0,0,0,0,0,0, y, z); +} diff --git a/testsuite/c_test/driver_test/SANITY0021-cc_param2/expected.txt b/testsuite/c_test/driver_test/SANITY0021-cc_param2/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0021-cc_param2/test.cfg b/testsuite/c_test/driver_test/SANITY0021-cc_param2/test.cfg new file mode 100644 index 0000000000..5f39bb1e95 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0021-cc_param2/test.cfg @@ -0,0 +1,2 @@ +compile(APP=cc_param2.c,OPTION="--no-maple-phase -o cc_param2") +run(cc_param2) diff --git a/testsuite/c_test/driver_test/SANITY0022-cc_param3/cc_param3.c b/testsuite/c_test/driver_test/SANITY0022-cc_param3/cc_param3.c new file mode 100644 index 0000000000..9caad4774d --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0022-cc_param3/cc_param3.c @@ -0,0 +1,72 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include + +typedef struct { int i; long long j; } S1; +// IntCC: no intreg, entire s passed on stack +void foo0( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, S1 s ) +{ if (s.j != 2) abort(); } + +// IntCC: 1 intreg short, half of s passed on stack, half $a7 reg +void foo1( int i1, int i2, int i3, int i4, int i5, int i6, int i7, S1 s ) +{ if (s.j != 2) abort(); } + +// FpCC: 1 intreg short, move to IntCC: 1 stack +typedef struct { float i; int j; } S2; +void foo2( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, S2 s ) +{ if (s.j != 4) abort(); } + +// FpCC: 1 fpreg short, move to IntCC: 1 intreg + 1 stack +void foo3( float i1, float i2, float i3, float i4, float i5, float i6, float i7, float i8, S2 s ) +{ if (s.j != 4) abort(); } + +// FpCC: 2 fpregs short, move to IntCC: 2 stacks +typedef struct { double i; double j; float k; } S4; +void foo4( float i1, float i2, float i3, float i4, float i5, float i6, float i7, float i8, S4 s ) +{ if (s.j != 6) abort(); } + +// IntCC: 1 float on stack, 8 intregs +typedef struct { float i; int j; } S5; +void foo5( int i1, int i2, int i3, int i4, int i5, int i6, int i7, + float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, + S5 s ) +{ if (s.i != 7.0f || s.j != 8) abort(); } + +// IntCC: 1 int on stack, 8 fpregs +void foo6( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, + float f1, float f2, float f3, float f4, float f5, float f6, float f7, + S5 s ) +{ if (s.i != 7.0f || s.j != 8) abort(); } + +int main() +{ + S1 s1 = { 1, 2 }; + foo0(1,2,3,4,5,6,7,8, s1); + foo1(1,2,3,4,5,6,7, s1); + + S2 s2 = { 3, 4 }; + foo2(1,2,3,4,5,6,7,8, s2); + foo3(0,0,0,0,0,0,0,0, s2); + + S4 s4 = { 5, 6 }; + foo4(0,0,0,0,0,0,0,0, s4); + + S5 s5 = { 7.0f, 8 }; + foo5( 1,2,3,4,5,6,7, 10,20,30,40,50,60,70,80, s5 ); + foo6( 1,2,3,4,5,6,7,8, 10,20,30,40,50,60,70, s5 ); + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0022-cc_param3/expected.txt b/testsuite/c_test/driver_test/SANITY0022-cc_param3/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0022-cc_param3/test.cfg b/testsuite/c_test/driver_test/SANITY0022-cc_param3/test.cfg new file mode 100644 index 0000000000..05a974719f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0022-cc_param3/test.cfg @@ -0,0 +1,2 @@ +compile(APP=cc_param3.c,OPTION="--no-maple-phase -o cc_param3") +run(cc_param3) diff --git a/testsuite/c_test/driver_test/SANITY0023-cc_sret/cc_sret.c b/testsuite/c_test/driver_test/SANITY0023-cc_sret/cc_sret.c new file mode 100644 index 0000000000..3b32e2106e --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0023-cc_sret/cc_sret.c @@ -0,0 +1,186 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +// +// Test calling convention of struct return type +#include +typedef struct { int x; int y; } s1; +typedef struct { long long x; long long y; } s2; +typedef struct { long long x; long long y; int z; } s3; +typedef struct { float x; float y; } f1; +typedef struct { double x; double y; } f2; +typedef struct { float x; char y; char z; short w; } m1; +typedef struct { int x[4]; } a1; +typedef struct { double x[4]; } a2; +typedef struct { float x[2]; } f3; +typedef struct { float x[3]; } f4; +typedef struct { int x; float y; } m2; +typedef struct { double x; long long y; } m3; + +s1 foo1(int i){ s1 x = {1,2}; return x; } // 1 intreg return +s2 foo2(int i){ s2 x = {3,4}; return x; } // 2 intregs return +s3 foo3(int i){ s3 x = {5,6,7}; return x; } // hidden 1st arg, >16by +f1 foo4(int i){ f1 x = {8,9}; return x; } // 2 fpregs return +f2 foo5(int i){ f2 x = {10,11}; return x; } // 2 fpregs return +m1 foo6(int i){ m1 x = {12,13,14,15}; return x; } // 1 intregs return +a1 foo7(int i){ a1 x = {16,17,18,19}; return x; } // 2 intregs return +a2 foo8(int i){ a2 x = {20,21,22,23}; return x; } // hidden 1st arg, >16by +f3 foo9(int i){ f3 x = {24,25}; return x; } // 2 fpregs return +f4 foo10(int i){ f4 x = {26,27,28}; return x; } // 2 intregs return +m2 foo11(int i){ m2 x = {29,30.0}; return x; } // 1 intreg 1 fpreg +m3 foo12(int i){ m3 x = {31.0,32}; return x; } // 1 fpreg 1 intreg + +typedef struct { int a[2]; } sz8; // 8 byte struct +typedef struct { int a[4]; } sz16; // 16 byte struct +typedef struct { int a[8]; } sz32; // 32 byte struct + +sz8 call8() +{ + s1 x; + s2 y; + s3 e; + f1 z; + f2 w; + f3 v; + f4 u; + m1 m; + m2 n; + m3 o; + a1 a; + a2 b; + + x = foo1( 0 ); + if (x.y != 2) abort(); + y = foo2( 0 ); + if (y.y != 4) abort(); + e = foo3( 0 ); + if (e.z != 7) abort(); + z = foo4( 0 ); + if (z.y != 9) abort(); + w = foo5( 0 ); + if (w.y != 11) abort(); + m = foo6( 0 ); + if (m.w != 15) abort(); + a = foo7( 0 ); + if (a.x[3] != 19) abort(); + b = foo8( 0 ); + if (b.x[3] != 23) abort(); + v = foo9( 0 ); + if (v.x[1] != 25) abort(); + u = foo10( 0 ); + if (u.x[2] != 28) abort(); + n = foo11( 0 ); + if (n.x != 29 || n.y != 30.0) abort(); + o = foo12( 0 ); + if (o.x != 31.0 || o.y != 32) abort(); + + sz8 x8 = { 1, 2}; + return x8; +} + +sz16 call16() +{ + s1 x; + s2 y; + s3 e; + f1 z; + f2 w; + f3 v; + f4 u; + m1 m; + m2 n; + m3 o; + a1 a; + a2 b; + + x = foo1( 0 ); + if (x.y != 2) abort(); + y = foo2( 0 ); + if (y.y != 4) abort(); + e = foo3( 0 ); + if (e.z != 7) abort(); + z = foo4( 0 ); + if (z.y != 9) abort(); + w = foo5( 0 ); + if (w.y != 11) abort(); + m = foo6( 0 ); + if (m.w != 15) abort(); + a = foo7( 0 ); + if (a.x[3] != 19) abort(); + b = foo8( 0 ); + if (b.x[3] != 23) abort(); + v = foo9( 0 ); + if (v.x[1] != 25) abort(); + u = foo10( 0 ); + if (u.x[2] != 28) abort(); + n = foo11( 0 ); + if (n.x != 29 || n.y != 30.0) abort(); + o = foo12( 0 ); + if (o.x != 31.0 || o.y != 32) abort(); + + sz16 x16 = { 1, 2, 3, 4}; + return x16; +} + +sz32 call32() +{ + s1 x; + s2 y; + s3 e; + f1 z; + f2 w; + f3 v; + f4 u; + m1 m; + m2 n; + m3 o; + a1 a; + a2 b; + + x = foo1( 0 ); + if (x.y != 2) abort(); + y = foo2( 0 ); + if (y.y != 4) abort(); + e = foo3( 0 ); + if (e.z != 7) abort(); + z = foo4( 0 ); + if (z.y != 9) abort(); + w = foo5( 0 ); + if (w.y != 11) abort(); + m = foo6( 0 ); + if (m.w != 15) abort(); + a = foo7( 0 ); + if (a.x[3] != 19) abort(); + b = foo8( 0 ); + if (b.x[3] != 23) abort(); + v = foo9( 0 ); + if (v.x[1] != 25) abort(); + u = foo10( 0 ); + if (u.x[2] != 28) abort(); + n = foo11( 0 ); + if (n.x != 29 || n.y != 30.0) abort(); + o = foo12( 0 ); + if (o.x != 31.0 || o.y != 32) abort(); + + sz32 x32 = { 1, 2, 3, 4, 5, 6, 7, 8}; + return x32; +} + +int main() +{ + call8(); + call16(); + call32(); +} diff --git a/testsuite/c_test/driver_test/SANITY0023-cc_sret/expected.txt b/testsuite/c_test/driver_test/SANITY0023-cc_sret/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0023-cc_sret/test.cfg b/testsuite/c_test/driver_test/SANITY0023-cc_sret/test.cfg new file mode 100644 index 0000000000..e23ccfa7be --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0023-cc_sret/test.cfg @@ -0,0 +1,2 @@ +compile(APP=cc_sret.c,OPTION="--no-maple-phase -o cc_sret") +run(cc_sret) diff --git a/testsuite/c_test/driver_test/SANITY0024-vararg1/expected.txt b/testsuite/c_test/driver_test/SANITY0024-vararg1/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0024-vararg1/test.cfg b/testsuite/c_test/driver_test/SANITY0024-vararg1/test.cfg new file mode 100644 index 0000000000..fe1319a086 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0024-vararg1/test.cfg @@ -0,0 +1,2 @@ +compile(APP=vararg1.c,OPTION="--no-maple-phase -o vararg1") +run(vararg1) diff --git a/testsuite/c_test/driver_test/SANITY0024-vararg1/vararg1.c b/testsuite/c_test/driver_test/SANITY0024-vararg1/vararg1.c new file mode 100644 index 0000000000..9560448c53 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0024-vararg1/vararg1.c @@ -0,0 +1,73 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "stdarg.h" +#include "stdlib.h" + +int a,b; +typedef int vfunc_t(int x, int y, ...); +int foo1( int x, int y, ... ) +{ + va_list ap; + + va_start(ap, y); + a = va_arg(ap, int); + b = va_arg(ap, int); + return (int)a + b; +} + +typedef struct { int i; long long j; } S; +int foo2( int a0, int a1, ... ) +{ + va_list ap; + + va_start(ap, a1); + S b = va_arg(ap, S); + if (b.i+b.j != 30) + abort(); +} + +typedef struct { long long x; long long y; int z; } T; +void foo3( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, T x, ...) +{ + va_list ap; + + va_start(ap, x); + a = va_arg(ap, int); + if (a != 10) // on the stack + abort(); +} + +int main() +{ + vfunc_t *f = &foo1; + int x; + + x = foo1(1,2,3,4); + if (x != 7) + abort(); + x = (*f)(1,2,5,6); + if (x != 11) + abort(); + + S s = {10,20}; + foo2( 1,2, s ); + + T y = { 1, 2, 3 }; + + foo3(1,2,3,4,5,6,7,8, y,10 ); +} + + diff --git a/testsuite/c_test/driver_test/SANITY0025-cc_param1/cc_param1.c b/testsuite/c_test/driver_test/SANITY0025-cc_param1/cc_param1.c new file mode 100644 index 0000000000..c2b2865213 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0025-cc_param1/cc_param1.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +// +// Test calling convention of passing struct param +// +#include +typedef struct { int x; int y; } s1; +typedef struct { long long x; long long y; } s2; +typedef struct { long long x; long long y; int z; } s3; +typedef struct { float x; float y; } f1; +typedef struct { double x; double y; } f2; +typedef struct { float x; char y; char z; short w; } m1; +typedef struct { int x[4]; } a1; +typedef struct { float x[4]; } a2; + +void foo1( s1 x ){ if (x.y != 2) abort(); } // 1 intreg +void foo2( s2 x ){ if (x.y != 4) abort(); } // 2 intregs +void foo3( f1 x ){ if (x.y != 9.0f) abort(); } // 2 fpregs +void foo4( f2 x ){ if (x.y != 11.0) abort(); } // 2 fpregs +void foo5( m1 x ){ if (x.w != 15) abort(); } // 1 intreg +void foo6( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, s2 x) { + if (x.y != 4) abort(); // 8 intregs + 16-by stk +} +void foo7( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, s3 x) {; + if (x.z != 7) abort(); // 8 intregs + 8-by stk addr + 24-byte s3 anywhere +} +void foo8( a1 x ){ if (x.x[3] != 19) abort(); } // 2 intregs +void foo9( a2 x ){ if (x.x[3] != 23) abort(); } // 2 intregs + +int main() +{ + s1 x = { 1, 2 }; + s2 y = { 3, 4 }; + s3 e = { 5, 6, 7 }; + f1 z = { 8, 9 }; + f2 w = { 10, 11 };; + m1 m = { 12, 13, 14, 15 }; + a1 a = { 16, 17, 18, 19 }; + a2 b = { 20, 21, 22, 23 }; + + foo1( x ); + foo2( y ); + foo3( z ); + foo4( w ); + foo5( m ); + foo6( 1,2,3,4,5,6,7,8,y ); + foo7( 1,2,3,4,5,6,7,8,e ); + foo8( a ); + foo9( b ); + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0025-cc_param1/expected.txt b/testsuite/c_test/driver_test/SANITY0025-cc_param1/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0025-cc_param1/test.cfg b/testsuite/c_test/driver_test/SANITY0025-cc_param1/test.cfg new file mode 100644 index 0000000000..7dbabda35f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0025-cc_param1/test.cfg @@ -0,0 +1,2 @@ +compile(APP=cc_param1.c,OPTION="--no-maple-phase -o cc_param1") +run(cc_param1) diff --git a/testsuite/c_test/driver_test/SANITY0026-matrixmult/expected.txt b/testsuite/c_test/driver_test/SANITY0026-matrixmult/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0026-matrixmult/matrixmult.c b/testsuite/c_test/driver_test/SANITY0026-matrixmult/matrixmult.c new file mode 100644 index 0000000000..d672640fe1 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0026-matrixmult/matrixmult.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +int main() +{ + int a[3][3], b[3][3], c[3][3]; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + a[i][j] = i; + b[i][j] = j; + c[i][j] = 0; + } + } + + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 3; ++j) { + for (int k = 0; k < 3; ++k) { + c[i][j] += a[i][k] * b[k][j]; + } + } + } + int sum = 0; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; ++j) { + sum += c[i][j]; + //printf("c[%d][%d] = %d\n", i, j, c[i][j]); + } + } + if (sum != 27) { + printf("sum = %d\n", sum); + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0026-matrixmult/test.cfg b/testsuite/c_test/driver_test/SANITY0026-matrixmult/test.cfg new file mode 100644 index 0000000000..9a28ecb23f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0026-matrixmult/test.cfg @@ -0,0 +1,2 @@ +compile(APP=matrixmult.c,OPTION="--no-maple-phase -o matrixmult") +run(matrixmult) diff --git a/testsuite/c_test/driver_test/SANITY0027-convert/convert.c b/testsuite/c_test/driver_test/SANITY0027-convert/convert.c new file mode 100644 index 0000000000..848ecbbe99 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0027-convert/convert.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include +#include + +signed char c = 0xff; +unsigned char uc = 0xff; +short s; +int i; +long long l; + +int main() +{ + s = c; + i = s; + l = i; + //printf("signed = %ld ", l); + if (l != -1) { + abort(); + } + + s = uc; + i = s; + l = i; + //printf("unsigned = %ld\n", l); + if (l != 255) { + abort(); + } + + return 0; +} diff --git a/testsuite/c_test/driver_test/SANITY0027-convert/expected.txt b/testsuite/c_test/driver_test/SANITY0027-convert/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0027-convert/test.cfg b/testsuite/c_test/driver_test/SANITY0027-convert/test.cfg new file mode 100644 index 0000000000..24f68d8f92 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0027-convert/test.cfg @@ -0,0 +1,2 @@ +compile(APP=convert.c,OPTION="--no-maple-phase -o convert") +run(convert) diff --git a/testsuite/c_test/driver_test/SANITY0028-inlineasm/asm.c b/testsuite/c_test/driver_test/SANITY0028-inlineasm/asm.c new file mode 100644 index 0000000000..a210e3bfc2 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0028-inlineasm/asm.c @@ -0,0 +1,500 @@ +#include +#include + +#define TEST01 +#define TEST02 +#define TEST03 +#define TEST04 +#define TEST05 +#define TEST06 // "m" +#undef TEST07 // fail // goto label +#define TEST08 +#define TEST09 // "m" +#define TEST10 +#undef TEST11 // fail // unsupported op +#define TEST12 +#define TEST13 +#undef TEST14 // works on arm server not qemu +#define TEST15 +#define TEST16 +#define TEST17 +#define TEST18 + +#ifdef TEST01 +int test01a(int a, int b) { + int c; +// asm volatile("\tadd %0, %1, %2\n" + asm volatile("\tadd %w0, %w1, %w2\n" + : "=r"(c) + : "r"(a), "r"(b)); + return c; +} +void test01() { + long long l1 = 0x80000000LL; + long long l2 = 0x100000000LL; + if (test01a(l1, l2) != 0x80000000) { + printf("test01 failed\n"); + abort(); + } +} +#endif +#ifdef TEST02 +int test02a(int a, int b) { + int c; + asm volatile("add %w0, %w1, %w2" : "=r"(c) : "r"(a), "r"(b) : "x5", "w4", "s2", "d3", "v9"); + return c; +} +void test02() { + long long l1 = 0x80000000LL; + long long l2 = 0x100000000LL; + if (test02a(l1, l2) != 0x80000000) { + printf("test02 failed\n"); + abort(); + } +} +#endif +#ifdef TEST03 +int test03a(int a, int b) { + int c, d; + asm volatile("add %w0, %w2, %w3\n\t" + "add %w1, %w2, %w3\n" + : "=&r"(c), "=r"(d) : "r"(a), "r"(b) : "x5", "w4", "s2", "d3", "v9"); + return (c + d); +} +void test03() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test03a(l1, l2) != 0x00121000) { + printf("test03 failed\n"); + abort(); + } +} +#endif +#ifdef TEST04 +int test04a(int a, int b) { + int *e = &a; + asm ("mov %w[e], %w[b]" : [b] "=r" (b) : [e] "r" (*e)); + return a; +} +void test04() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test04a(l1, l2) != 0x00000800) { + printf("test04 failed\n"); + abort(); + } +} +#endif +#ifdef TEST05 +int test05a(int a, int b) { + int c; + asm ("add %w[c], %w1, %w2" : [c] "=r" (c) : "r" (a), "r" (b)); + return c; +} +void test05() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test05a(l1, l2) != 0x00090800) { + printf("test05 failed\n"); + abort(); + } +} +#endif +#ifdef TEST06 +int test06a(int a, int b) { + int c; + asm ("ldr %x[c], %x1" : [c] "=r" (c) : "m" (a)); + return c; +} +void test06() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test06a(l1, l2) != 0x00000800) { + printf("test06 failed\n"); + abort(); + } +} +#endif +#ifdef TEST07 +int test07a(int a, int b) { + asm goto ("b %l0\n" + : /* no output */ + : /* no input */ + : /* no clobber */ + : gohere); + return 0; +gohere: + return 1; +} +void test07() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test07a(l1, l2) != 1) { + printf("test07 failed\n"); + abort(); + } +} +#endif +#ifdef TEST08 +int test08a(int a, int b) { + /* %w[c] should not be in the same reg as %w1 */ + int c; + asm ( + "add %w[c], %w1, %w2\n\t" + "mov %w[c], %w1" + : [c] "+r" (c) + : "r" (a), "r" (b)); + return c; +} +void test08() { + long long l1 = 0x00000800LL; + long long l2 = 0x00090000LL; + if (test08a(l1, l2) != 0x00000800) { + printf("test08 failed\n"); + abort(); + } +} +#endif + +#ifdef TEST09 +long g; +int test09a(long x) { + asm volatile("\tldr %0, %1\n" + : "=r"(x) + : "m"(g)); + return x; +}; +void test09() { + g = 0x400; + long l1 = 0x00000800LL; + if (test09a(l1) != 0x0400) { + printf("test09 failed\n"); + abort(); + } +} +#endif + +#ifdef TEST10 +int h1[2]; +int *h = h1; +int test10a() { + long long y; + int z; + asm volatile("add %x0, %x2, #4\n" + "\tldr %w1, [%x0]\n" + : "=r"(y), "=r"(z) + : "r"(h), "m"(h) + : "x1"); + return z; +} +void test10() { + h1[0] = 0x400; + h1[1] = 0x800; + if (test10a() != 0x0800) { + printf("test10 failed\n"); + abort(); + } +} +#endif + +#ifdef TEST11 +unsigned int +crc32c_arm64_u8(unsigned char data, unsigned int init_val) +{ + __asm__ volatile( + "crc32cb %w[crc], %w[crc], %w[value]" + : [crc] "+r" (init_val) + : [value] "r" (data)); + return init_val; +} +unsigned int test11() { + unsigned char data = 10; + unsigned int init_val = 5; + init_val = crc32c_arm64_u8(data, init_val); + printf("init_val %x\n", init_val); +} +#endif + +#ifdef TEST12 +void +prfm_arm64_u8(void *ptr) +{ + asm volatile( + "prfm pstl1keep, %a0\n" + : + : "p" (ptr)); +} +unsigned int test12() { + long long ptr; + prfm_arm64_u8(&ptr); +} +#endif + +#ifdef TEST13 +#define octeontx_load_pair(val0, val1, addr) ({ \ + asm volatile( \ + "ldp %x[x0], %x[x1], [%x[p1]]" \ + :[x0]"=r"(val0), [x1]"=r"(val1) \ + :[p1]"r"(addr) \ + ); }) + +#define octeontx_store_pair(val0, val1, addr) ({ \ + asm volatile( \ + "stp %x[x0], %x[x1], [%x[p1]]" \ + ::[x0]"r"(val0), [x1]"r"(val1), [p1]"r"(addr) \ + ); }) +void test13() +{ + long long addr[2] = {0x111, 0x222}; + long long val0, val1; + long long *ptr = addr; + octeontx_load_pair(val0, val1, ptr); + if (val0 != 0x111) { + printf("test13 val0 failed\n"); + abort(); + } + if (val1 != 0x222) { + printf("test13 val1 failed\n"); + abort(); + } + addr[0] = 0x333; + addr[1] = 0x444; + octeontx_store_pair(val0, val1, ptr); + if (addr[0] != 0x111) { + printf("test13 addr[0] failed\n"); + abort(); + } + if (addr[1] != 0x222) { + printf("test13 addr[1] failed\n"); + abort(); + } +} +#endif + +#ifdef TEST14 +unsigned long long +test14a(void *addr, long long off) +{ + unsigned long long old_val; + + __asm__ volatile( + " .cpu generic+lse+sve\n\t" + " ldadd %1, %0, [%2]\n" + : "=r" (old_val) : "r" (off), "r" (addr) : "memory"); + + return old_val; +} +void test14() +{ + long long val = 5; + long long off = 1; + if (test14a(&val, off) != 5LL && val != 6) { + printf("test14 failed\n"); + abort(); + } +} +#endif + +#ifdef TEST15 +#include +#include +#include +#include + + uint16x4_t byte_cnt; +unsigned char cp = 5; + unsigned char *p = &cp; + uint8x16_t rxdf; + uint64x2_t rearm; +uint8_t e0p; + uint8_t *e0 = &e0p; +uint8_t e1p; + uint8_t *e1 = &e1p; +uint8_t e2p; + uint8_t *e2 = &e2p; +uint8_t e3p; + uint8_t *e3 = &e3p; + uint8x16_t mcqe_shuf_m1; + uint8x16_t mcqe_shuf_m2; + uint16x8_t crc_adj; + uint8x8_t len_shuf_m; + +uint16x4_t +test15() +{ + __asm__ volatile ( + /* A.1 load mCQEs into a 128bit register. */ + "ld1 {v16.16b - v17.16b}, [%[mcq]] \n\t" + /* B.1 store rearm data to mbuf. */ + "st1 {%[rearm].2d}, [%[e0]] \n\t" + "add %[e0], %[e0], #16 \n\t" + "st1 {%[rearm].2d}, [%[e1]] \n\t" + "add %[e1], %[e1], #16 \n\t" + /* C.1 combine data from mCQEs with rx_descriptor_fields1. */ + "tbl v18.16b, {v16.16b}, %[mcqe_shuf_m1].16b \n\t" + "tbl v19.16b, {v16.16b}, %[mcqe_shuf_m2].16b \n\t" + "sub v18.8h, v18.8h, %[crc_adj].8h \n\t" + "sub v19.8h, v19.8h, %[crc_adj].8h \n\t" + "orr v18.16b, v18.16b, %[rxdf].16b \n\t" + "orr v19.16b, v19.16b, %[rxdf].16b \n\t" + /* D.1 store rx_descriptor_fields1. */ + "st1 {v18.2d}, [%[e0]] \n\t" + "st1 {v19.2d}, [%[e1]] \n\t" + /* B.1 store rearm data to mbuf. */ + "st1 {%[rearm].2d}, [%[e2]] \n\t" + "add %[e2], %[e2], #16 \n\t" + "st1 {%[rearm].2d}, [%[e3]] \n\t" + "add %[e3], %[e3], #16 \n\t" + /* C.1 combine data from mCQEs with rx_descriptor_fields1. */ + "tbl v18.16b, {v17.16b}, %[mcqe_shuf_m1].16b \n\t" + "tbl v19.16b, {v17.16b}, %[mcqe_shuf_m2].16b \n\t" + "sub v18.8h, v18.8h, %[crc_adj].8h \n\t" + "sub v19.8h, v19.8h, %[crc_adj].8h \n\t" + "orr v18.16b, v18.16b, %[rxdf].16b \n\t" + "orr v19.16b, v19.16b, %[rxdf].16b \n\t" + /* D.1 store rx_descriptor_fields1. */ + "st1 {v18.2d}, [%[e2]] \n\t" + "st1 {v19.2d}, [%[e3]] \n\t" + :[byte_cnt]"=&w"(byte_cnt) + :[mcq]"r"(p), + [rxdf]"w"(rxdf), + [rearm]"w"(rearm), + [e3]"r"(e3), [e2]"r"(e2), [e1]"r"(e1), [e0]"r"(e0), + [mcqe_shuf_m1]"w"(mcqe_shuf_m1), + [mcqe_shuf_m2]"w"(mcqe_shuf_m2), + [crc_adj]"w"(crc_adj), + [len_shuf_m]"w"(len_shuf_m) + :"memory", "v16", "v17", "v18", "v19"); + return byte_cnt; +} +#endif + +#ifdef TEST16 +void test16(unsigned int a) { + __asm__ volatile("mrs %x0, CNTV_CTL_EL0\n\t" : "=r" (a) : : "memory"); +} +#endif + +#ifdef TEST17 +int test17a(int a) { + int c; + asm volatile("\tadd %w0, %w1, %2\n" + : "=r"(c) + : "r"(a), "i"(16)); + return c; +} +void test17() { + long long l1 = 0x80000000LL; + if (test17a(l1) != 0x80000010) { + printf("test01 failed\n"); + abort(); + } +} +#endif + +#ifdef TEST18 +#if 0 +#define _ATOMIC_CMPSET(bar, a, l) \ +_ATOMIC_CMPSET_IMPL(8, w, b, bar, a, l) +//_ATOMIC_CMPSET_IMPL(16, w, h, bar, a, l) +//_ATOMIC_CMPSET_IMPL(32, w, , bar, a, l) +//_ATOMIC_CMPSET_IMPL(64, , , bar, a, l) + +#define _ATOMIC_CMPSET_IMPL(t, w, s, bar, a, l) \ +_ATOMIC_CMPSET_PROTO(t, bar, _llsc) \ +{ \ +uint##t##_t tmp; \ +int res; \ + \ +__asm __volatile( \ +"1: mov %w1, #1\n" \ +" ld"#a"xr"#s" %"#w"0, [%2]\n" \ +" cmp %"#w"0, %"#w"3\n" \ +" b.ne 2f\n" \ +" st"#l"xr"#s" %w1, %"#w"4, [%2]\n" \ +" cbnz %w1, 1b\n" \ +"2:" \ +: "=&r"(tmp), "=&r"(res) \ +: "r" (p), "r" (cmpval), "r" (newval) \ +: "cc", "memory" \ +); \ +return (!res); \ + +#endif + +void *p1; +long long cmpval; +int newval; +void test18a() { + unsigned long long tmp; + int res; + __asm __volatile( + "1: mov %w1, #1\n" + " ldr %x0, [%2]\n" + " cmp %x0, %x3\n" + " b.ne 2f\n" + " stp %w1, %w4, [%2]\n" + " cbnz %w1, 1b\n" + "2:" + : "=&r"(tmp), "=&r"(res) + : "r" (p1), "r" (cmpval), "r" (newval) + : "cc", "memory" + ); +} + +//void test18() { +// test18a(); +//} +#endif + +int main() +{ +#ifdef TEST01 + test01(); +#endif +#ifdef TEST02 + test02(); +#endif +#ifdef TEST03 + test03(); +#endif +#ifdef TEST04 + test04(); +#endif +#ifdef TEST05 + test05(); +#endif +#ifdef TEST06 + test06(); +#endif +#ifdef TEST07 + test07(); +#endif +#ifdef TEST08 + test08(); +#endif +#ifdef TEST09 + test09(); +#endif +#ifdef TEST10 + test10(); +#endif +#ifdef TEST11 + test11(); +#endif +#ifdef TEST12 + test12(); +#endif +#ifdef TEST13 + test13(); +#endif +#ifdef TEST14 + test14(); +#endif +#ifdef TEST15 + test15(); +#endif +#ifdef TEST17 + test17(); +#endif +} diff --git a/testsuite/c_test/driver_test/SANITY0028-inlineasm/expected.txt b/testsuite/c_test/driver_test/SANITY0028-inlineasm/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0028-inlineasm/test.cfg b/testsuite/c_test/driver_test/SANITY0028-inlineasm/test.cfg new file mode 100644 index 0000000000..f09e4e7f7a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0028-inlineasm/test.cfg @@ -0,0 +1,2 @@ +compile(APP=asm.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o asm") +run(asm) diff --git a/testsuite/c_test/driver_test/SANITY0029-extensions/expected.txt b/testsuite/c_test/driver_test/SANITY0029-extensions/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0029-extensions/extensions.c b/testsuite/c_test/driver_test/SANITY0029-extensions/extensions.c new file mode 100644 index 0000000000..538ad2a473 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0029-extensions/extensions.c @@ -0,0 +1,86 @@ +#include +#include + +unsigned char u8 = 0x80; +unsigned short u16 = 0x8000; +unsigned int u32 = 0x80000000; +unsigned long long u64 = 0x8000000000000000ULL; + +signed char i8 = 0x80; +signed short i16 = 0x8000; +signed int i32 = 0x80000000; +signed long long i64 = 0x8000000000000000LL; + +int main() { + signed char ti8 = u8; + if (ti8 != 0xffffff80) abort(); + signed short ti16 = u8; + if (ti16 != 0x80) abort(); + signed int ti32 = u8; + if (ti32 != 0x80) abort(); + signed long long ti64 = u8; + if (ti64 != 0x80) abort(); + + ti8 = u16; + if (ti8 != 0) abort(); + ti16 = u16; + if (ti16 != 0xffff8000) abort(); + ti32 = u16; + if (ti32 != 0x8000) abort(); + ti64 = u16; + if (ti64 != 0x8000) abort(); + + ti8 = u32; + if (ti8 != 0) abort(); + ti16 = u32; + if (ti16 != 0) abort(); + ti32 = u32; + if (ti32 != 0x80000000) abort(); + ti64 = u32; + if (ti64 != 0x80000000) abort(); + + ti8 = u64; + if (ti8 != 0) abort(); + ti16 = u64; + if (ti16 != 0) abort(); + ti32 = u64; + if (ti32 != 0) abort(); + ti64 = u64; + if (ti64 != 0x8000000000000000) abort(); + + unsigned char tu8 = i8; + if (tu8 != 0x80) abort(); + unsigned short tu16 = i8; + if (tu16 != 0xff80) abort(); + unsigned int tu32 = i8; + if (tu32 != 0xffffff80) abort(); + unsigned long long tu64 = i8; + if (tu64 != 0xffffffffffffff80) abort(); + + tu8 = i16; + if (tu8 != 0) abort(); + tu16 = i16; + if (tu16 != 0x8000) abort(); + tu32 = i16; + if (tu32 != 0xffff8000) abort(); + tu64 = i16; + if (tu64 != 0xffffffffffff8000) abort(); + + tu8 = i32; + if (tu8 != 0) abort(); + tu16 = i32; + if (tu16 != 0) abort(); + tu32 = i32; + if (tu32 != 0x80000000) abort(); + tu64 = i32; + if (tu64 != 0xffffffff80000000) abort(); + + tu8 = i64; + if (tu8 != 0) abort(); + tu16 = i64; + if (tu16 != 0) abort(); + tu32 = i64; + if (tu32 != 0) abort(); + tu64 = i64; + if (tu64 != 0x8000000000000000) abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0029-extensions/test.cfg b/testsuite/c_test/driver_test/SANITY0029-extensions/test.cfg new file mode 100644 index 0000000000..a6cee4f3ef --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0029-extensions/test.cfg @@ -0,0 +1,2 @@ +compile(APP=extensions.c,OPTION="--no-maple-phase -o extensions") +run(extensions) diff --git a/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test.cfg new file mode 100644 index 0000000000..a1b8bf2226 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test1.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test1") +run(test1) diff --git a/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test1.c b/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test1.c new file mode 100644 index 0000000000..a8ef4ea401 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0029-neonintrinscs/test1.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +uint32x4_t foo(void *p) { + uint16x8_t u16 = vld1q_u16(p); + return vpaddlq_u16(u16); +} + +uint16_t foo2(void *p) { + uint16x8_t u16 = vld1q_u16(p); + return vaddvq_u16(u16); +} + +int main() +{ + char s[] = {1,1,1,1, 2,2,2,2, 3,3,3,3, 4,4,4,4}; + uint32x4_t f1 = foo( &s ); + uint32_t t1, t2, t3, t4; + t1 = vgetq_lane_u32(f1, 0); + // printf("t0: 0x%x\n", t1); + t2 = vgetq_lane_u32(f1, 1); + // printf("t1: 0x%x\n", t2); + t3 = vgetq_lane_u32(f1, 2); + // printf("t2: 0x%x\n", t3); + t4 = vgetq_lane_u32(f1, 3); + // printf("t3: 0x%x\n", t4); + if (t1 != 0x202 || t2 != 0x404 || t3 != 0x606 || t4 != 0x808) + abort(); + + // printf("-- Test 2: --\n"); + uint16_t f2 = foo2( &s ); + // printf("f2: %d\n", f2); + if (f2 != 0x1414) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test.cfg new file mode 100644 index 0000000000..6e7b404abb --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test2.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test2") +run(test2) diff --git a/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test2.c b/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test2.c new file mode 100644 index 0000000000..1fd7deaad8 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0030-neonintrinscs/test2.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +uint8x16_t foo(void *p) { + uint8x16_t u1 = vld1q_u8(p); + uint8x16_t u2 = vrev32q_u8(u1); /* reverse */ + return vextq_u8(u1, u2, 8); /* merge at 8 */ +} + +int main() +{ + char s[] = {1,1,2,2, 3,3,4,4, 5,5,6,6, 7,7,8,8}; + uint8x16_t f2 = foo( &s ); + long u8m[2]; + vst1q_u8((void*)&u8m, f2); + // printf("f2: 0x%lx,0x%lx\n", u8m[0], u8m[1]); + if (u8m[0] != 0x808070706060505 || u8m[1] != 0x303040401010202) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test.cfg new file mode 100644 index 0000000000..a70a5c7ca5 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test3.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test3") +run(test3) diff --git a/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test3.c b/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test3.c new file mode 100644 index 0000000000..d24ed9943e --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0031-neonintrinscs/test3.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +uint32_t foo(void *p) { + uint32x4_t u1 = vld1q_u32(p); + uint32_t uit = vgetq_lane_u32(u1, 3); + unsigned int ui = uit; + if (ui != 4) + abort(); + return uit; +} + +int main() +{ + unsigned int s[] = {1, 2, 3, 4}; + uint32_t ui = foo( &s ); + uint32x4_t t = {1, 1, 1, 1}; + t = vsetq_lane_u32(ui, t, 3); + ui = vgetq_lane_u32(t, 1); + if (ui != 1) + abort(); + if (vgetq_lane_u32(t, 3) != 4) + abort(); + // printf("t: 0x%x 0x%x\n", ui, vgetq_lane_u32(t, 3)); +} diff --git a/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test.cfg new file mode 100644 index 0000000000..feae807c00 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test4.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test4") +run(test4) diff --git a/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test4.c b/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test4.c new file mode 100644 index 0000000000..7e0772e89b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0032-neonintrinscs/test4.c @@ -0,0 +1,53 @@ +/* +2 + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +int32x4_t foo1(void *p) { + return vandq_s32( vld1q_s32(p), vdupq_n_s32(3)); +} + +uint16x8_t foo2(void *p, void *q) { + return vandq_u16( vld1q_u16(p), vld1q_u16(q)); +} + +int main() +{ + int s[] = {7,7,7,7}; + int32x4_t r = foo1( &s ); + int t[4]; + vst1q_s32((void*)&t, r); + // printf("r: %x %x %x %x\n", t[0], t[1], t[2], t[3]); + if (t[0] != 3 || t[1] != 3 || t[2] != 3 || t[3] != 3) + abort(); + + // printf("-- Test 4b: uint16x8_t --\n"); + unsigned short s2[] = {7,7,7,7,7,7,7,7}; + unsigned short t2[] = {3,3,3,3,3,3,3,3}; + uint32x4_t r2 = vpaddlq_u16( foo2( &s2, &t2 ) ); + // printf("r2: %x %x %x %x\n", + // vgetq_lane_u32(r2, 0), + // vgetq_lane_u32(r2, 1), + // vgetq_lane_u32(r2, 2), + // vgetq_lane_u32(r2, 0)); + if (vgetq_lane_u32(r2, 0) != 6 || + vgetq_lane_u32(r2, 1) != 6 || + vgetq_lane_u32(r2, 2) != 6 || + vgetq_lane_u32(r2, 0) != 6) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test.cfg new file mode 100644 index 0000000000..cdb4b6f408 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test5.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test5") +run(test5) diff --git a/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test5.c b/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test5.c new file mode 100644 index 0000000000..7e0772e89b --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0033-neonintrinscs/test5.c @@ -0,0 +1,53 @@ +/* +2 + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +int32x4_t foo1(void *p) { + return vandq_s32( vld1q_s32(p), vdupq_n_s32(3)); +} + +uint16x8_t foo2(void *p, void *q) { + return vandq_u16( vld1q_u16(p), vld1q_u16(q)); +} + +int main() +{ + int s[] = {7,7,7,7}; + int32x4_t r = foo1( &s ); + int t[4]; + vst1q_s32((void*)&t, r); + // printf("r: %x %x %x %x\n", t[0], t[1], t[2], t[3]); + if (t[0] != 3 || t[1] != 3 || t[2] != 3 || t[3] != 3) + abort(); + + // printf("-- Test 4b: uint16x8_t --\n"); + unsigned short s2[] = {7,7,7,7,7,7,7,7}; + unsigned short t2[] = {3,3,3,3,3,3,3,3}; + uint32x4_t r2 = vpaddlq_u16( foo2( &s2, &t2 ) ); + // printf("r2: %x %x %x %x\n", + // vgetq_lane_u32(r2, 0), + // vgetq_lane_u32(r2, 1), + // vgetq_lane_u32(r2, 2), + // vgetq_lane_u32(r2, 0)); + if (vgetq_lane_u32(r2, 0) != 6 || + vgetq_lane_u32(r2, 1) != 6 || + vgetq_lane_u32(r2, 2) != 6 || + vgetq_lane_u32(r2, 0) != 6) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test.cfg new file mode 100644 index 0000000000..326a3e5f6a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test6.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test6") +run(test6) diff --git a/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test6.c b/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test6.c new file mode 100644 index 0000000000..eaa326e6a1 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0034-neonintrinscs/test6.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include +#include + +int main() +{ + char s[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + uint8x16_t p = vld1q_u8((void*)s); + uint8x16_t idx = vrev32q_u8(p); + char r[17] = {0}; + uint8x16_t x; + + x = vqtbl1q_u8(p, idx); // reverse + vst1q_u8((void*)r, x); + //printf("r = %s\n", r); + char answer[] = {5, 4, 3, 2, 9, 8, 7, 6, 13, 12, 11, 10, 0, 16, 15, 14}; + if (memcmp(r, answer, 16)) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test.cfg new file mode 100644 index 0000000000..05cc29a559 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test7.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test7") +run(test7) diff --git a/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test7.c b/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test7.c new file mode 100644 index 0000000000..f8d20d4c18 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0035-neonintrinscs/test7.c @@ -0,0 +1,82 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include +#include + +void foo1() +{ + uint32x2_t c = {1,1}; + + uint8x16_t x = vdupq_n_u8(10); + uint64x2_t y = vreinterpretq_u64_u8(x); + uint64x2_t z = vmlal_u32(y, c, vdup_n_u32(1)); + uint32x4_t r = vreinterpretq_u32_u64(z); + //printf("r: 0x%x 0x%x 0x%x 0x%x\n", vgetq_lane_u32(r, 0), vgetq_lane_u32(r, 1), + // vgetq_lane_u32(r, 2), vgetq_lane_u32(r, 3)); + // printf("z = 0x%lx, 0x%lx\n", vget_high_u64(z), vget_low_u64(z)); + if (vgetq_lane_u32(r, 0) != 0xa0a0a0b || vgetq_lane_u32(r, 1) != 0xa0a0a0a || + vgetq_lane_u32(r, 2) != 0xa0a0a0b || vgetq_lane_u32(r, 3) != 0xa0a0a0a) + abort(); +} + +void foo2() { + uint64x2_t x = { 2, 4 }; + uint32x4_t zero = { 0, 0, 0, 0 }; + uint32x4_t r = veorq_u32( vreinterpretq_u32_u64(x), zero ); + if (vgetq_lane_u32(r, 0) != 2) + abort(); + if (vgetq_lane_u32(r, 1) != 0) + abort(); + if (vgetq_lane_u32(r, 2) != 4) + abort(); + if (vgetq_lane_u32(r, 3) != 0) + abort(); +} + +void foo3() { + uint64x2_t x = { 2, 4 }; + uint64x2_t zero = { 0, 0 }; + uint32x4_t r = vreinterpretq_u32_u64( veorq_u64( x, zero ) ); + if (vgetq_lane_u32(r, 0) != 2) + abort(); + if (vgetq_lane_u32(r, 1) != 0) + abort(); + if (vgetq_lane_u32(r, 2) != 4) + abort(); + if (vgetq_lane_u32(r, 3) != 0) + abort(); +} + +void foo4() { +#if 0 // Turn off temporarily, awaiting arm_neon.h to be updated. Turn on + // again after that. + uint32x2_t a = {1, 0}; + uint32x2_t b = vdup_n_u32(10); + uint32x4_t r = vreinterpretq_u32_u64( vmull_u32(a, b) ); + if (vgetq_lane_u32(r, 0) != 0xa || vgetq_lane_u32(r, 1) != 0 || + vgetq_lane_u32(r, 2) != 0 || vgetq_lane_u32(r, 3) != 0) + abort(); +#endif +} + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test.cfg new file mode 100644 index 0000000000..5eef22367a --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test8.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test8") +run(test8) diff --git a/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test8.c b/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test8.c new file mode 100644 index 0000000000..b1bf636d0f --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0036-neonintrinscs/test8.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include + +int32x4_t f1( int32x4_t p, int32x4_t q ) +{ + return p << q; +} + +uint32x2_t f2( uint32x2_t p, uint32x2_t q ) +{ + return p >> q; +} + +int main() +{ + int32x4_t x = vdupq_n_s32( 1 ); + int32x4_t y = vdupq_n_s32( 1 ); + + int32x4_t m1 = f1( x, y ); + uint32x4_t c1 = m1 == 2; + if (vgetq_lane_u32(c1, 0) != 0xffffffff || + vgetq_lane_u32(c1, 1) != 0xffffffff || + vgetq_lane_u32(c1, 2) != 0xffffffff || + vgetq_lane_u32(c1, 3) != 0xffffffff) + abort(); + + uint32x2_t x2 = vdup_n_u32( 2 ); + uint32x2_t y2 = vdup_n_u32( 1 ); + + uint32x2_t m2 = f2( x2, y2 ); + uint32x2_t c2 = m2 == y2; + if (vget_lane_u32(c2, 0) != 0xffffffff || + vget_lane_u32(c2, 1) != 0xffffffff) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test.cfg new file mode 100644 index 0000000000..b61963492c --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test9.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test9") +run(test9) diff --git a/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test9.c b/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test9.c new file mode 100644 index 0000000000..3bbe0841be --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0037-neonintrinscs/test9.c @@ -0,0 +1,34 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ + +#include "arm_neon.h" +#include + +int main() +{ + uint16x8_t s1 = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + uint16x8_t r1 = s1 == s1; + uint16x8_t r2 = vceqq_u16(s1, s1); + uint16x8_t r3 = r1 == r2; // all 1s + int64x2_t r4 = (int64x2_t)r3; + int64x2_t r5 = ~r4; // all 0s + uint32x4_t r6 = (uint32x4_t) (r5 < 0); // zero compare instr + if (vgetq_lane_u32(r6, 0) != 0 || + vgetq_lane_u32(r6, 1) != 0 || + vgetq_lane_u32(r6, 2) != 0 || + vgetq_lane_u32(r6, 3) != 0) + abort(); +} diff --git a/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test.cfg new file mode 100644 index 0000000000..77cc108587 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test10.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test10") +run(test10) diff --git a/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test10.c b/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test10.c new file mode 100644 index 0000000000..23f99d43ae --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0038-neonintrinscs/test10.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ +#include "arm_neon.h" +#include "stdlib.h" + +uint64x1_t foo1( uint64x2_t s ) +{ + return vget_high_u64(s) + vget_low_u64(s); +} + +uint16x4_t foo2( uint16x8_t s ) +{ + return vget_high_u16(s) + vget_low_u16(s); +} + +int64x1_t foo3( int32x2_t s ) +{ + return vpaddl_s32(s); +} + +int main() +{ + uint64x2_t s = { 10, 20 }; + uint64x1_t r1 = foo1( s ); + if ((long)r1 != 30) + abort(); + +#if 0 + uint16x8_t s2 = { 1,1,1,1,2,2,2,2 }; + uint16x4_t r2 = foo2( s2 ); + if (vget_lane_u16(r2,0) != 3 || + vget_lane_u16(r2,3) != 3) + abort(); + + int32x2_t s3 = { 10, 20 }; + int64x1_t t3 = foo3( s3 ); + if ((long)t3 != 30) + abort(); +#endif +} + diff --git a/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test.cfg new file mode 100644 index 0000000000..1874f7dd94 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test11.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test11") +run(test11) diff --git a/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test11.c b/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test11.c new file mode 100644 index 0000000000..2000c202de --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0039-neonintrinscs/test11.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ +#include "arm_neon.h" +#include + +uint32x2x2_t foo( uint32x4_t data, uint32x2x2_t a ) +{ + uint32x2x2_t r = vzip_u32( vget_low_u32(data), vget_high_u32(data) ); + uint32x2_t t1 = r.val[0] == a.val[0]; + uint32x2_t t2 = r.val[1] == a.val[1]; + + if (vget_lane_u32(t1, 0) != 0xffffffff || + vget_lane_u32(t1, 1) != 0xffffffff || + vget_lane_u32(t2, 0) != 0xffffffff || + vget_lane_u32(t2, 1) != 0xffffffff) + abort(); + + return r; +} + +int main() +{ + uint32x4_t data = { 10, 20, 30, 40 }; + uint32x2x2_t a; + uint32x2x2_t r; + + a.val[0] = vset_lane_u32(10, a.val[0], 0); + a.val[0] = vset_lane_u32(30, a.val[0], 1); + a.val[1] = vset_lane_u32(20, a.val[1], 0); + a.val[1] = vset_lane_u32(40, a.val[1], 1); + + r = foo( data, a ); + + uint32x2_t a1 = { 1, 3 }; + uint32x2_t b1 = { 2, 4 }; + uint32x2_t m1 = { 1, 2 }; + uint32x2_t m2 = { 4, 5 }; + + uint32x2x2_t c = vzip_u32( a1, b1 ); + uint32x2_t r1 = c.val[0] == m1; // vzip_u32(a,b).val[0] == m1; + if (vget_lane_u32(r1, 0) != 0xffffffff || + vget_lane_u32(r1, 1) != 0xffffffff) + abort(); + + m1 = c.val[1] + 1; + uint32x2_t r2 = m1 == m2; + if (vget_lane_u32(r2, 0) != 0xffffffff || + vget_lane_u32(r2, 1) != 0xffffffff) + abort(); +} + + diff --git a/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/expected.txt b/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test.cfg b/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test.cfg new file mode 100644 index 0000000000..82b4ea6b82 --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test.cfg @@ -0,0 +1,2 @@ +compile(APP=test12.c,OPTION="--no-maple-phase -I${MAPLE_BUILD_OUTPUT}/lib/include -o test12") +run(test12) diff --git a/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test12.c b/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test12.c new file mode 100644 index 0000000000..d3e945572e --- /dev/null +++ b/testsuite/c_test/driver_test/SANITY0040-neonintrinscs/test12.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) [2021] Futurewei Technologies, Inc. All rights reverved. + * + * Licensed under the Mulan Permissive Software License v2. + * You can use this software according to the terms and conditions of the MulanPSL - 2.0. + * You may obtain a copy of MulanPSL - 2.0 at: + * + * https://opensource.org/licenses/MulanPSL-2.0 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the MulanPSL - 2.0 for more details. + */ +#include "arm_neon.h" +#include + +/* Testing calling convention of 64x1 */ + +uint64x1_t foo1( uint64x1_t x, uint64x1_t y ) +{ + return x + y; +} + +int64x1_t G = { 40 }; +int64x1_t foo2() { + return G; +} + +int64x1_t foo3( int64x1_t x ) +{ + return x; +} + +typedef struct S { + int x; + int64x1_t y; +} SS; + +int main() +{ + uint64x1_t a = { 10 }; + uint64x1_t b = { 20 }; + + uint64x1_t r1 = foo1( a, b ); + if ((uint64_t)r1 != 30) + abort(); + + int64x1_t r2 = foo3( foo2() ); + if ((int64_t)r2 != 40) + abort(); + + SS s1 = { 1, 50 }; + int64x1_t r3 = foo3( s1.y ); + if ((int64_t)r3 != 50) + abort(); + + SS s2 = { 1, 50 }; + SS *ps = &s2; + int64x1_t r4 = foo3( ps->y ); + if ((int64_t)r4 != 50) + abort(); + + int64x1_t c = { 60 }; + int64x1_t *p = &c; + int64x1_t **q = &p; + int64x1_t r5 = foo3( **q ); + if ((int64_t)r5 != 60) + abort(); + + int64x1_t (*fp)(int64x1_t) = foo3; + uint64x1_t r6 = (uint64x1_t)foo3( fp(c) ); + if ((int64_t)r6 != 60) + abort(); +} diff --git a/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/Mpl.c b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/Mpl.c new file mode 100644 index 0000000000..d1bbc881fb --- /dev/null +++ b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/Mpl.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) [2020-2021] Huawei Technologies Co.,Ltd.All rights reserved. + * + * OpenArkCompiler is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR + * FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ +#include "stdio.h" +#include + +// void print_float64x1(float64x1_t *a, int n) { +// float64_t *p = (float64_t *)a; +// int i; +// for (i = 0; i < n; i++) { +// printf("%f ", *(p+i)); +// } +// printf("\n"); +// } + +// int main() { +// float64x1_t A = {2.2}, B = {4.4}; +// float64x1_t C; +// C = __builtin_mpl_vector_merge_v1f64(A, B, 0); +// print_float64x1(&C,1); + +// return 0; +// } + +// int main() { +// int64x1_t A = {2}; +// int64_t B; +// B = __builtin_mpl_vector_get_element_v1i64(A, 0); +// printf("%d", B); + +// return 0; +// } + +void print_int64x1(int64x1_t *a, int n) { + int64_t *p = (int64_t *)a; + int i; + for (i = 0; i < n; i++) { + printf("%d ", *(p+i)); + } + printf("\n"); +} + +int main() { + int64x1_t A = {2}; + A = __builtin_mpl_vector_set_element_v1i64(9, A, 0); + print_int64x1(&A, 1); + + return 0; +} + diff --git a/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/expected.txt b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/expected.txt new file mode 100644 index 0000000000..ec635144f6 --- /dev/null +++ b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/expected.txt @@ -0,0 +1 @@ +9 diff --git a/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/test.cfg b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/test.cfg new file mode 100644 index 0000000000..142e86cf47 --- /dev/null +++ b/testsuite/c_test/driver_test/issue-AST0061-NEON-Mpl/test.cfg @@ -0,0 +1,2 @@ +compile(APP=Mpl.c,OPTION="--no-maple-phase -o Mpl") +run(Mpl) diff --git a/testsuite/driver/src/mode/DRIVER.py b/testsuite/driver/src/mode/DRIVER.py index 0743434509..324d98eba1 100644 --- a/testsuite/driver/src/mode/DRIVER.py +++ b/testsuite/driver/src/mode/DRIVER.py @@ -24,7 +24,7 @@ DRIVER = { ], "run": [ Shell( - "${OUT_ROOT}/tools/bin/qemu-aarch64 -L ${OUT_ROOT}/tools/gcc-linaro-7.5.0/aarch64-linux-gnu/libc ${APP}.out > output.log 2>&1" + "${OUT_ROOT}/tools/bin/qemu-aarch64 -L ${OUT_ROOT}/tools/gcc-linaro-7.5.0/aarch64-linux-gnu/libc ${APP} > output.log 2>&1" ), CheckFileEqual( file1="output.log", -- Gitee