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.
patch_array_notation_cpp_2013_02_11.txt.bz2
Description: patch_array_notation_cpp_2013_02_11.txt.bz2