Hello Everyone,
   Attached, please find a patch that implements Array Notations for C++. This 
patch affects the C++ compiler and should build (or be applied) on top of the 
Array Notation for C patch (2 of n: 
http://gcc.gnu.org/ml/gcc-patches/2013-01/msg01213.html). To my best knowledge, 
I have implemented all the applicable comments that GCC reviewers have made 
about my previous patches into this. Please let me know if it is Ok for trunk.

Here are the ChangeLog Entries:

gcc/cp/Changelog
2013-02-11  Balaji V. Iyer  <balaji.v.i...@intel.com>

        * typeck.c (cp_build_array_ref): Added a check if array notation used
        as index for an array has a rank greater than 1.  If so, then emit an
        error.
        (cp_build_binary_op): Find the correct type when array notation expr. is
        used in op0 and op1.
        (cp_build_addr_expr_1): Check if array notation is used and if so then
        handle the arg and var like you handle an array.
        (convert_for_assignment): If array notation is used, then just return
        the rhs.
        * semantics.c (finish_return_stmt): Added a check for array notations in
        return statement.  If so, then issue an error.
        (cxx_eval_constant_expression): Added a ARRAY_NOTATION_REF case.
        (potential_constant_expression_1): Likewise.
        * tree.c (lvalue_kind): Likewise.
        * pt.c (tsubst_copy_and_build): Likewise.
        (type_unification_real): Return 1 when array notation is used and cilk
        plus is enabled.
        (instantiate_decl): Check if array notation is used in (sub)tree when
        Cilk plus is enabled.  If so, then expand them.
        * parser.c (cp_parser_nested_name_specifier_opt): Added a check if cilk
        plus is enabled.  If so, then we don't issue the error.
        (cp_parser_postfix_open_square_expression): Added checks for colon(s)
        after square braces when cilkplus is enabled.  if so, then do the array
        notation parsing.
        (cp_parser_compound_statement): Added a check to see if array notations
        are used in the (sub)tree.  if so, then call function to expand them.
        (cp_parser_ctor_initializer_opt_and_function_body): Likewise.
        (cp_parser_function_definition_after_declarator): Likewise.
        (cp_parser_selection_statement): Added a check if array notation is used
        in a switch statement.  If so, then issue an error.
        (cp_parser_iteration_statement): Likewise for while and do-while and for
        statements.
        (cp_parser_direct_declarator): Added a check for intialization near an
        array notation.  If so, then issue an error.    
        * cp-tree.h (build_x_array_notation_expr): New function declaration.
        (contains_array_notation_expr): Likewise.
        (fix_array_notation_exprs): Likewise.
        (is_builtin_array_notation_fn): Likewise.
        (find_correct_array_notation_type): Likewise.
        (cp_parser_array_notation): New function.
        * cp-objcp-common.c (cp_common_init_ts): Marked ARRAY_NOTATION_REF as
        typed.
        * call.c (convert_like_real): Added a check for array notations when
        cilkplus is enabled.
        (build_over_call): Added a check if the function call is a builtin
        array notation function.  If so, then no type conversion is necessary.
        * cp-array-notation.c: New file.
        * Make-lang.in (CXX_AND_OBJCXX_OBJS): Added cp/cp-array-notation.o

gcc/testsuite/Changelog
2013-02-11  Balaji V. Iyer  <balaji.v.i...@intel.com>

        * g++.dg/cilk-plus/array_notation/compile/array_test1.cc: New test.
        * g++.dg/cilk-plus/array_notation/compile/array_test2.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/builtin_fn_double.cc: 
        Likewise.
        * g++.dg/cilk-plus/array_notation/compile/builtin_funcs.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/gather_scatter.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/if_test1.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/if_test2.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/postdecr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/postincr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/preincr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/predecr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/compile/sec_implicit_ex.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/decl-ptr-colon.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/fn_ptr.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/fp_triplet_values.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/gather_scatter.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/misc.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/parser_errors.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/parser_errors2.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/parser_errors3.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/parser_errors4.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/rank_mismatch.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/sec_implicit.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/sec_implicit2.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/an-if.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test1.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test1_tplt.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test2.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test2_tplt.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test_ND.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/array_test_ND_tplt.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_fn_custom.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_fn_custom_tplt.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_fn_mutating_tplt.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_func_double.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/builtin_func_double2.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/execute/comma_exp.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/conditional.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/exec-once.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/gather_scatter.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/if_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/n-ptr-test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/postdecr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/postincr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/preincr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/predecr_test.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/sec_implicit_ex.cc: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/test_builtin_return.cc:
        Likewise.
        * g++.dg/cilk-plus/array_notation/compile/compile.exp: New script.
        * g++.dg/cilk-plus/array_notation/errors/errors.exp: Likewise.
        * g++.dg/cilk-plus/array_notation/execute/execute.exp: Likewise.


Thanks,

Balaji V. Iyer. 

Attachment: patch_array_notation_cpp_2013_02_11.txt.bz2
Description: patch_array_notation_cpp_2013_02_11.txt.bz2

Reply via email to