aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/ChangeLog
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-08-10 13:22:27 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-08-10 13:22:27 +0000
commit32129a17506ba18a34d07145eb2c1e9f9827034f (patch)
treef8018f92c534466fa12d6791f1df3d201d24df10 /gcc/c/ChangeLog
parent7c23ac0d25d2d5f814f53a6357d4c572e48f06d3 (diff)
downloadgcc-32129a17506ba18a34d07145eb2c1e9f9827034f.zip
gcc-32129a17506ba18a34d07145eb2c1e9f9827034f.tar.gz
gcc-32129a17506ba18a34d07145eb2c1e9f9827034f.tar.bz2
C/C++: show pertinent open token when missing a close token
gcc/c/ChangeLog: * c-parser.c (c_parser_error): Rename to... (c_parser_error_richloc): ...this, making static, and adding "richloc" parameter, passing it to the c_parse_error call, rather than calling c_parser_set_source_position_from_token. (c_parser_error): Reintroduce, reimplementing in terms of the above, converting return type from void to bool. (class token_pair): New class. (struct matching_paren_traits): New struct. (matching_parens): New typedef. (struct matching_brace_traits): New struct. (matching_braces): New typedef. (get_matching_symbol): New function. (c_parser_require): Add param MATCHING_LOCATION, using it to highlight matching "opening" tokens for missing "closing" tokens. (c_parser_skip_until_found): Likewise. (c_parser_static_assert_declaration_no_semi): Convert explicit parsing of CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use of class matching_parens, so that the pertinent open parenthesis is highlighted when there are problems locating the close parenthesis. (c_parser_struct_or_union_specifier): Likewise. (c_parser_typeof_specifier): Likewise. (c_parser_alignas_specifier): Likewise. (c_parser_simple_asm_expr): Likewise. (c_parser_braced_init): Likewise, for matching_braces. (c_parser_paren_condition): Likewise, for matching_parens. (c_parser_switch_statement): Likewise. (c_parser_for_statement): Likewise. (c_parser_asm_statement): Likewise. (c_parser_asm_operands): Likewise. (c_parser_cast_expression): Likewise. (c_parser_sizeof_expression): Likewise. (c_parser_alignof_expression): Likewise. (c_parser_generic_selection): Likewise. (c_parser_postfix_expression): Likewise for cases RID_VA_ARG, RID_OFFSETOF, RID_TYPES_COMPATIBLE_P, RID_AT_SELECTOR, RID_AT_PROTOCOL, RID_AT_ENCODE, reindenting as necessary. In case CPP_OPEN_PAREN, pass loc_open_paren to the c_parser_skip_until_found call. (c_parser_objc_class_definition): Use class matching_parens as above. (c_parser_objc_method_decl): Likewise. (c_parser_objc_try_catch_finally_statement): Likewise. (c_parser_objc_synchronized_statement): Likewise. (c_parser_objc_at_property_declaration): Likewise. (c_parser_oacc_wait_list): Likewise. (c_parser_omp_var_list_parens): Likewise. (c_parser_omp_clause_collapse): Likewise. (c_parser_omp_clause_default): Likewise. (c_parser_omp_clause_if): Likewise. (c_parser_omp_clause_num_threads): Likewise. (c_parser_omp_clause_num_tasks): Likewise. (c_parser_omp_clause_grainsize): Likewise. (c_parser_omp_clause_priority): Likewise. (c_parser_omp_clause_hint): Likewise. (c_parser_omp_clause_defaultmap): Likewise. (c_parser_oacc_single_int_clause): Likewise. (c_parser_omp_clause_ordered): Likewise. (c_parser_omp_clause_reduction): Likewise. (c_parser_omp_clause_schedule): Likewise. (c_parser_omp_clause_num_teams): Likewise. (c_parser_omp_clause_thread_limit): Likewise. (c_parser_omp_clause_aligned): Likewise. (c_parser_omp_clause_linear): Likewise. (c_parser_omp_clause_safelen): Likewise. (c_parser_omp_clause_simdlen): Likewise. (c_parser_omp_clause_depend): Likewise. (c_parser_omp_clause_map): Likewise. (c_parser_omp_clause_device): Likewise. (c_parser_omp_clause_dist_schedule): Likewise. (c_parser_omp_clause_proc_bind): Likewise. (c_parser_omp_clause_uniform): Likewise. (c_parser_omp_for_loop): Likewise. (c_parser_cilk_clause_vectorlength): Likewise. (c_parser_cilk_clause_linear): Likewise. (c_parser_transaction_expression): Likewise. * c-parser.h (c_parser_require): Add param matching_location with default UNKNOWN_LOCATION. (c_parser_error): Convert return type from void to bool. (c_parser_skip_until_found): Add param matching_location with default UNKNOWN_LOCATION. gcc/c-family/ChangeLog: * c-common.c (c_parse_error): Add rich_location * param, using it rather implicitly using input_location. * c-common.h (c_parse_error): Add rich_location * param. gcc/cp/ChangeLog: * parser.c (cp_parser_error): Update for new param to c_parse_error. (class token_pair): New class. (struct matching_paren_traits): New struct. (matching_parens): New typedef. (struct matching_brace_traits): New struct. (matching_braces): New typedef. (cp_parser_statement_expr): Convert explicit parsing of CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use of class matching_parens, so that the pertinent open parenthesis is highlighted when there are problems locating the close parenthesis. (cp_parser_primary_expression): Likewise. (cp_parser_compound_literal_p): Remove consumption of opening paren. (cp_parser_postfix_expression): Convert explicit parsing of CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use matching parens, as above. Use it to consume the opening paren previously consumed by cp_parser_compound_literal_p. (cp_parser_parenthesized_expression_list): Likewise. (cp_parser_unary_expression): Likewise. (cp_parser_new_expression): Likewise. (cp_parser_cast_expression): Likewise. (cp_parser_builtin_offsetof): Likewise. (cp_parser_trait_expr): Likewise. (cp_parser_lambda_declarator_opt): Likewise. (cp_parser_lambda_body): Likewise, for matching_braces. (cp_parser_compound_statement): Likewise. (cp_parser_selection_statement): Likewise, for matching_parens. (cp_parser_iteration_statement): Likewise. (cp_parser_already_scoped_statement): Likewise, for matching_braces. (cp_parser_linkage_specification): Likewise. (cp_parser_static_assert): Likewise, for matching_parens. (cp_parser_decltype): Likewise. (cp_parser_operator): Likewise. (cp_parser_enum_specifier): Likewise. (cp_parser_namespace_definition): Likewise. (cp_parser_direct_declarator): Likewise. (cp_parser_braced_list): Likewise. (cp_parser_class_specifier_1): Likewise, for matching_braces. (cp_parser_constant_initializer): Likewise. (cp_parser_noexcept_specification_opt): Likewise, for matching_parens. (cp_parser_exception_specification_opt): Likewise. (cp_parser_handler): Likewise. (cp_parser_asm_specification_opt): Likewise. (cp_parser_asm_operand_list): Likewise. (cp_parser_gnu_attributes_opt): Likewise. (cp_parser_std_attribute_spec): Likewise. (cp_parser_requirement_parameter_list): Likewise. (cp_parser_requirement_body): Likewise, for matching_braces. (cp_parser_compound_requirement): Likewise. (cp_parser_template_introduction): Likewise. (cp_parser_sizeof_pack): Likewise, for matching_parens. (cp_parser_sizeof_operand): Likewise; use it to consume the opening paren previously consumed by cp_parser_compound_literal_p. (get_matching_symbol): New function. (cp_parser_required_error): Add param "matching_location". Remove calls to cp_parser_error, instead setting a non-NULL gmsgid, and handling it if set by calling c_parse_error, potentially with a secondary location if matching_location was set. (cp_parser_require): Add param "matching_location", with a default value of UNKNOWN_LOCATION. (cp_parser_require_keyword): Update for new param of cp_parser_required_error. (cp_parser_objc_encode_expression): Update to class matching_parens as above. (cp_parser_objc_defs_expression): Likewise. (cp_parser_objc_protocol_expression): Likewise. (cp_parser_objc_selector_expression): Likewise. (cp_parser_objc_typename): Likewise. (cp_parser_objc_superclass_or_category): Likewise. (cp_parser_objc_try_catch_finally_statement): Likewise. (cp_parser_objc_synchronized_statement): Likewise. (cp_parser_objc_at_property_declaration): Likewise. (cp_parser_oacc_single_int_clause): Likewise. (cp_parser_oacc_shape_clause): Likewise. (cp_parser_omp_clause_collapse): Likewise. (cp_parser_omp_clause_default): Likewise. (cp_parser_omp_clause_final): Likewise. (cp_parser_omp_clause_if): Likewise. (cp_parser_omp_clause_num_threads): Likewise. (cp_parser_omp_clause_num_tasks): Likewise. (cp_parser_omp_clause_grainsize): Likewise. (cp_parser_omp_clause_priority): Likewise. (cp_parser_omp_clause_hint): Likewise. (cp_parser_omp_clause_defaultmap): Likewise. (cp_parser_omp_clause_ordered): Likewise. (cp_parser_omp_clause_schedule): Likewise. (cp_parser_omp_clause_num_teams): Likewise. (cp_parser_omp_clause_thread_limit): Likewise. (cp_parser_omp_clause_aligned): Likewise. (cp_parser_omp_clause_linear): Likewise. (cp_parser_omp_clause_safelen): Likewise. (cp_parser_omp_clause_simdlen): Likewise. (cp_parser_omp_clause_depend): Likewise. (cp_parser_omp_clause_device): Likewise. (cp_parser_omp_clause_dist_schedule): Likewise. (cp_parser_oacc_clause_async): Likewise. (cp_parser_omp_critical): Likewise. (cp_parser_omp_for_loop): Likewise. (cp_parser_omp_sections_scope): Likewise. (cp_parser_omp_declare_reduction_exprs): Likewise. Update for new param to cp_parser_required_error. (cp_parser_oacc_routine): Likewise. (cp_parser_transaction_expression): Likewise. (cp_parser_cilk_simd_vectorlength): Likewise. gcc/testsuite/ChangeLog: * c-c++-common/missing-close-symbol.c: New test case. * c-c++-common/missing-symbol.c: New test case. * gcc.dg/unclosed-init.c: New test case. * g++.dg/diagnostic/unclosed-extern-c.C: New test case. * g++.dg/diagnostic/unclosed-function.C: New test case. * g++.dg/diagnostic/unclosed-namespace.C: New test case. * g++.dg/diagnostic/unclosed-struct.C: New test case. * g++.dg/parse/pragma2.C: Update to reflect movement of the "expected identifier" error. From-SVN: r251026
Diffstat (limited to 'gcc/c/ChangeLog')
-rw-r--r--gcc/c/ChangeLog84
1 files changed, 84 insertions, 0 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index a7cc746..6e29334 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,87 @@
+2017-08-10 David Malcolm <dmalcolm@redhat.com>
+
+ * c-parser.c (c_parser_error): Rename to...
+ (c_parser_error_richloc): ...this, making static, and adding
+ "richloc" parameter, passing it to the c_parse_error call,
+ rather than calling c_parser_set_source_position_from_token.
+ (c_parser_error): Reintroduce, reimplementing in terms of the
+ above, converting return type from void to bool.
+ (class token_pair): New class.
+ (struct matching_paren_traits): New struct.
+ (matching_parens): New typedef.
+ (struct matching_brace_traits): New struct.
+ (matching_braces): New typedef.
+ (get_matching_symbol): New function.
+ (c_parser_require): Add param MATCHING_LOCATION, using it to
+ highlight matching "opening" tokens for missing "closing" tokens.
+ (c_parser_skip_until_found): Likewise.
+ (c_parser_static_assert_declaration_no_semi): Convert explicit
+ parsing of CPP_OPEN_PAREN and CPP_CLOSE_PAREN to use of
+ class matching_parens, so that the pertinent open parenthesis is
+ highlighted when there are problems locating the close
+ parenthesis.
+ (c_parser_struct_or_union_specifier): Likewise.
+ (c_parser_typeof_specifier): Likewise.
+ (c_parser_alignas_specifier): Likewise.
+ (c_parser_simple_asm_expr): Likewise.
+ (c_parser_braced_init): Likewise, for matching_braces.
+ (c_parser_paren_condition): Likewise, for matching_parens.
+ (c_parser_switch_statement): Likewise.
+ (c_parser_for_statement): Likewise.
+ (c_parser_asm_statement): Likewise.
+ (c_parser_asm_operands): Likewise.
+ (c_parser_cast_expression): Likewise.
+ (c_parser_sizeof_expression): Likewise.
+ (c_parser_alignof_expression): Likewise.
+ (c_parser_generic_selection): Likewise.
+ (c_parser_postfix_expression): Likewise for cases RID_VA_ARG,
+ RID_OFFSETOF, RID_TYPES_COMPATIBLE_P, RID_AT_SELECTOR,
+ RID_AT_PROTOCOL, RID_AT_ENCODE, reindenting as necessary.
+ In case CPP_OPEN_PAREN, pass loc_open_paren to the
+ c_parser_skip_until_found call.
+ (c_parser_objc_class_definition): Use class matching_parens as
+ above.
+ (c_parser_objc_method_decl): Likewise.
+ (c_parser_objc_try_catch_finally_statement): Likewise.
+ (c_parser_objc_synchronized_statement): Likewise.
+ (c_parser_objc_at_property_declaration): Likewise.
+ (c_parser_oacc_wait_list): Likewise.
+ (c_parser_omp_var_list_parens): Likewise.
+ (c_parser_omp_clause_collapse): Likewise.
+ (c_parser_omp_clause_default): Likewise.
+ (c_parser_omp_clause_if): Likewise.
+ (c_parser_omp_clause_num_threads): Likewise.
+ (c_parser_omp_clause_num_tasks): Likewise.
+ (c_parser_omp_clause_grainsize): Likewise.
+ (c_parser_omp_clause_priority): Likewise.
+ (c_parser_omp_clause_hint): Likewise.
+ (c_parser_omp_clause_defaultmap): Likewise.
+ (c_parser_oacc_single_int_clause): Likewise.
+ (c_parser_omp_clause_ordered): Likewise.
+ (c_parser_omp_clause_reduction): Likewise.
+ (c_parser_omp_clause_schedule): Likewise.
+ (c_parser_omp_clause_num_teams): Likewise.
+ (c_parser_omp_clause_thread_limit): Likewise.
+ (c_parser_omp_clause_aligned): Likewise.
+ (c_parser_omp_clause_linear): Likewise.
+ (c_parser_omp_clause_safelen): Likewise.
+ (c_parser_omp_clause_simdlen): Likewise.
+ (c_parser_omp_clause_depend): Likewise.
+ (c_parser_omp_clause_map): Likewise.
+ (c_parser_omp_clause_device): Likewise.
+ (c_parser_omp_clause_dist_schedule): Likewise.
+ (c_parser_omp_clause_proc_bind): Likewise.
+ (c_parser_omp_clause_uniform): Likewise.
+ (c_parser_omp_for_loop): Likewise.
+ (c_parser_cilk_clause_vectorlength): Likewise.
+ (c_parser_cilk_clause_linear): Likewise.
+ (c_parser_transaction_expression): Likewise.
+ * c-parser.h (c_parser_require): Add param matching_location with
+ default UNKNOWN_LOCATION.
+ (c_parser_error): Convert return type from void to bool.
+ (c_parser_skip_until_found): Add param matching_location with
+ default UNKNOWN_LOCATION.
+
2017-08-09 Marek Polacek <polacek@redhat.com>
* c-decl.c (build_enumerator): Use true/false instead of 1/0.