Implemented Cilk Plus Array Notation for C++
authorBalaji V. Iyer <balaji.v.iyer@intel.com>
Fri, 21 Jun 2013 19:36:47 +0000 (19:36 +0000)
committerBalaji V. Iyer <bviyer@gcc.gnu.org>
Fri, 21 Jun 2013 19:36:47 +0000 (12:36 -0700)
commit2ce86d2eb54f42359291f388a833fa05b6f1bf19
treee7207dc359e56d6ee18d5ceeab12e6a330340857
parentfa1e55b0a0c843b58c6e628fb3c29afa36fcf778
Implemented Cilk Plus Array Notation for C++

Implemented Cilk Plus Array Notation for C++
gcc/c-family/ChangeLog
2013-06-21  Balaji V. Iyer  <balaji.v.iyer@intel.com>

        * c-common.h (struct cilkplus_an_parts): New structure.
        (struct cilkplus_an_loop_parts): Likewise.
        (cilkplus_extract_an_triplets): New prototype.
        (fix_sec_implicit_args): Likewise.
        * array-notation-common.c (cilkplus_extract_an_triplets): New function.
        (fix_sec_implicit_args): Likewise.

gcc/cp/ChangeLog
2013-06-21  Balaji V. Iyer  <balaji.v.iyer@intel.com>

        * call.c (convert_like_real): Added a check if array notation is present
        in expression.  If so, then no conversion of arguments is necessary.
        (build_over_call): Likewise.
        * typeck.c (cp_build_function_call_vec): Likewise.
        (convert_for_assignment): Likewise.
        (cp_build_array_ref): Reject array notations with a rank greater than 1
        as an array's index.
        (cp_build_binary_op): If array notations are preent in op, then call
        find_correct_array_notation_type.
        (cp_build_addr_expr_1): Handle ARRAY_NOTATION_REF similar to ARRAY_REF.
        * cp-array-notation.c: New file.
        * cp-objcp-common.c (cp_common_init_ts): Marked ARRAY_NOTATION_REF tree
        as typed.
        * cp-tree.h (fix_array_notation_exprs): New prototype.
        * semantics.c (finish_return_stmt): Reject array notations as
        return value.
        (cxx_eval_constant_expression): Added ARRAY_NOTATION_REF case.
        (potential_constant_expression_1): Likewise.
        * tree.c (lvalue_kind): Likewise.
        * error.c (dump_decl): Likewise.
        (dump_expr): Likewise.
        * pt.c (ARRAY_NOTATION_REF): Likewise.
        (type_unification_real): Do not unify any arguments if array notations
        are found in arg.
        (instantiate_decl): Added a check for array notaitons inside the
        function body.  If so, then expand them.
        * parser.c (cp_parser_array_notation): New function.
        (cp_parser_postfix_open_square_expression): Added a check for colons
        inside square braces.  If found, then handle the array access as an
        array notation access.  Also, disable auto-correction from a single
        colon to scope when Cilk Plus is enabled.
        (cp_parser_compound_statement): Added a check for array notations
        inside the statement.  If found, then expand them.
        (cp_parser_ctor_initializer_opt_and_function_body): Likewise.
        (cp_parser_function_definition_after_declarator): Likewise.
        (cp_parser_selection_statement): Searched for array notations inside
        condition.  If so, then emit an error.
        (cp_parser_iteration_statement): Likewise.
        (cp_parser_direct_declarator): Reject array notations inside a
        variable or array declaration.
        * Make-lang.in (CXX_AND_OBJCXX_OBJS): Added cp/cp-array-notation.o.

gcc/testsuite/ChangeLog
2013-06-21  Balaji V. Iyer  <balaji.v.iyer@intel.com>

        * c-c++-common/cilk-plus/AN/array_test1.c: Make this an execution test.
        Also changed the returns from error as distinct values so that debugging
        can get easier.
        * c-c++-common/cilk-plus/AN/if_test_errors.c (main): Made certain
        errors specific to C, if necessary.  Also added new error hooks for C++.
        * c-c++-common/cilk-plus/AN/misc.c (main): Likewise.
        * c-c++-common/cilk-plus/AN/parser_errors.c (main): Likewise.
        * c-c++-common/cilk-plus/AN/parser_errors2.c (main): Likewise.
        * c-c++-common/cilk-plus/AN/parser_errors3.c (main): Likewise.
        * c-c++-common/cilk-plus/AN/pr57541.c (main): Likewise.
        * c-c++-common/cilk-plus/AN/parser_errors4.c (main): In addition to the
        same changes as parser_errors3.c, spaces were added between colons to
        not confuse C++ compiler with 2 colons as scope.
        * c-c++-common/cilk-plus/AN/vla.c: Make this test C specific.
        * g++.dg/cilk-plus/AN/array_test1_tplt.cc: New test.
        * g++.dg/cilk-plus/AN/array_test2_tplt.cc: Likewise.
        * g++.dg/cilk-plus/AN/array_test_ND_tplt.cc: Likewise.
        * g++.dg/cilk-plus/AN/braced_list.cc: Likewise.
        * g++.dg/cilk-plus/AN/builtin_fn_custom_tplt.cc: Likewise.
        * g++.dg/cilk-plus/AN/builtin_fn_mutating_tplt.cc: Likewise.
        * g++.dg/cilk-plus/AN/fp_triplet_values_tplt.c: Likewise.
        * g++.dg/cilk-plus/AN/preincr_test.cc: Likewise.
        * g++.dg/cilk-plus/AN/postincr_test.cc: Likewise.
        * g++.dg/cilk-plus/cilk-plus.exp: New script.
        * gcc/testsuite/g++.dg/dg.exp: Included Cilk Plus C++ tests in the list.

From-SVN: r200319
35 files changed:
gcc/c-family/ChangeLog
gcc/c-family/array-notation-common.c
gcc/c-family/c-common.h
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/cp/call.c
gcc/cp/cp-array-notation.c [new file with mode: 0644]
gcc/cp/cp-objcp-common.c
gcc/cp/cp-tree.h
gcc/cp/error.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cilk-plus/AN/if_test_errors.c
gcc/testsuite/c-c++-common/cilk-plus/AN/misc.c
gcc/testsuite/c-c++-common/cilk-plus/AN/parser_errors.c
gcc/testsuite/c-c++-common/cilk-plus/AN/parser_errors2.c
gcc/testsuite/c-c++-common/cilk-plus/AN/parser_errors3.c
gcc/testsuite/c-c++-common/cilk-plus/AN/parser_errors4.c
gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c
gcc/testsuite/c-c++-common/cilk-plus/AN/vla.c
gcc/testsuite/g++.dg/cilk-plus/AN/array_test1_tplt.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/array_test2_tplt.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/array_test_ND_tplt.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/braced_list.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/builtin_fn_custom_tplt.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/builtin_fn_mutating_tplt.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/fp_triplet_values_tplt.c [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/postincr_test.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/AN/preincr_test.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp [new file with mode: 0644]
gcc/testsuite/g++.dg/dg.exp