From ac4c7868f1032bb9184cd9a59ee17845f6f456c6 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 17 Oct 2019 20:00:38 +0000 Subject: [PATCH] decl.c (grokfndecl): Remove redundant use of in_system_header_at. /cp 2019-10-17 Paolo Carlini * decl.c (grokfndecl): Remove redundant use of in_system_header_at. (compute_array_index_type_loc): Likewise. (grokdeclarator): Likewise. * error.c (cp_printer): Likewise. * lambda.c (add_default_capture): Likewise. * parser.c (cp_parser_primary_expression): Likewise. (cp_parser_selection_statement): Likewise. (cp_parser_toplevel_declaration): Likewise. (cp_parser_enumerator_list): Likewise. (cp_parser_using_declaration): Likewise. (cp_parser_member_declaration): Likewise. (cp_parser_exception_specification_opt): Likewise. (cp_parser_std_attribute_spec): Likewise. * pt.c (do_decl_instantiation): Likewise. (do_type_instantiation): Likewise. * typeck.c (cp_build_unary_op): Likewise. * decl.c (check_tag_decl): Pass to in_system_header_at the same location used for the permerror. (grokdeclarator): Likewise. * decl.c (check_tag_decl): Use locations[ds_typedef] in error_at. /testsuite 2019-10-17 Paolo Carlini * g++.old-deja/g++.other/decl9.C: Check locations too. From-SVN: r277133 --- gcc/cp/ChangeLog | 25 ++++++++++++++++++++ gcc/cp/decl.c | 21 +++++++--------- gcc/cp/error.c | 5 +--- gcc/cp/lambda.c | 3 +-- gcc/cp/parser.c | 19 ++++++--------- gcc/cp/pt.c | 21 +++++++--------- gcc/cp/typeck.c | 2 +- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.old-deja/g++.other/decl9.C | 4 ++-- 9 files changed, 58 insertions(+), 46 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d5c7e13f64d..d07a5e59eb8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,28 @@ +2019-10-17 Paolo Carlini + + * decl.c (grokfndecl): Remove redundant use of in_system_header_at. + (compute_array_index_type_loc): Likewise. + (grokdeclarator): Likewise. + * error.c (cp_printer): Likewise. + * lambda.c (add_default_capture): Likewise. + * parser.c (cp_parser_primary_expression): Likewise. + (cp_parser_selection_statement): Likewise. + (cp_parser_toplevel_declaration): Likewise. + (cp_parser_enumerator_list): Likewise. + (cp_parser_using_declaration): Likewise. + (cp_parser_member_declaration): Likewise. + (cp_parser_exception_specification_opt): Likewise. + (cp_parser_std_attribute_spec): Likewise. + * pt.c (do_decl_instantiation): Likewise. + (do_type_instantiation): Likewise. + * typeck.c (cp_build_unary_op): Likewise. + + * decl.c (check_tag_decl): Pass to in_system_header_at the same + location used for the permerror. + (grokdeclarator): Likewise. + + * decl.c (check_tag_decl): Use locations[ds_typedef] in error_at. + 2019-10-17 Jason Merrill * cp-gimplify.c (cp_gimplify_expr): Use get_initialized_tmp_var. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 23e04e57e69..35fa9e92aa5 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4912,9 +4912,9 @@ check_tag_decl (cp_decl_specifier_seq *declspecs, "multiple types in one declaration"); else if (declspecs->redefined_builtin_type) { - if (!in_system_header_at (input_location)) - permerror (declspecs->locations[ds_redefined_builtin_type_spec], - "redeclaration of C++ built-in type %qT", + location_t loc = declspecs->locations[ds_redefined_builtin_type_spec]; + if (!in_system_header_at (loc)) + permerror (loc, "redeclaration of C++ built-in type %qT", declspecs->redefined_builtin_type); return NULL_TREE; } @@ -4963,7 +4963,8 @@ check_tag_decl (cp_decl_specifier_seq *declspecs, --end example] */ if (saw_typedef) { - error ("missing type-name in typedef-declaration"); + error_at (declspecs->locations[ds_typedef], + "missing type-name in typedef-declaration"); return NULL_TREE; } /* Anonymous unions are objects, so they can have specifiers. */; @@ -9307,7 +9308,6 @@ grokfndecl (tree ctype, } /* 17.6.3.3.5 */ if (suffix[0] != '_' - && !in_system_header_at (location) && !current_function_decl && !(friendp && !funcdef_flag)) warning_at (location, OPT_Wliteral_suffix, "literal operator suffixes not preceded by %<_%>" @@ -10015,8 +10015,6 @@ compute_array_index_type_loc (location_t name_loc, tree name, tree size, indicated by the state of complain), so that another substitution can be found. */ return error_mark_node; - else if (in_system_header_at (input_location)) - /* Allow them in system headers because glibc uses them. */; else if (name) pedwarn (loc, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name); @@ -10983,7 +10981,7 @@ grokdeclarator (const cp_declarator *declarator, if (type_was_error_mark_node) /* We've already issued an error, don't complain more. */; - else if (in_system_header_at (input_location) || flag_ms_extensions) + else if (in_system_header_at (id_loc) || flag_ms_extensions) /* Allow it, sigh. */; else if (! is_main) permerror (id_loc, "ISO C++ forbids declaration of %qs with no type", @@ -11016,7 +11014,7 @@ grokdeclarator (const cp_declarator *declarator, } /* Don't pedwarn if the alternate "__intN__" form has been used instead of "__intN". */ - else if (!int_n_alt && pedantic && ! in_system_header_at (input_location)) + else if (!int_n_alt && pedantic) pedwarn (declspecs->locations[ds_type_spec], OPT_Wpedantic, "ISO C++ does not support %<__int%d%> for %qs", int_n_data[declspecs->int_n_idx].bitsize, name); @@ -12674,10 +12672,7 @@ grokdeclarator (const cp_declarator *declarator, else { /* Array is a flexible member. */ - if (in_system_header_at (input_location)) - /* Do not warn on flexible array members in system - headers because glibc uses them. */; - else if (name) + if (name) pedwarn (id_loc, OPT_Wpedantic, "ISO C++ forbids flexible array member %qs", name); else diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 1fd87d2abea..30166f9c4ec 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -4317,10 +4317,7 @@ cp_printer (pretty_printer *pp, text_info *text, const char *spec, void maybe_warn_cpp0x (cpp0x_warn_str str) { - if ((cxx_dialect == cxx98) && !in_system_header_at (input_location)) - /* We really want to suppress this warning in system headers, - because libstdc++ uses variadic templates even when we aren't - in C++0x mode. */ + if (cxx_dialect == cxx98) switch (str) { case CPP0X_INITIALIZER_LISTS: diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index b503e9743cf..f128ed800f6 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -697,8 +697,7 @@ add_default_capture (tree lambda_stack, tree id, tree initializer) /* Warn about deprecated implicit capture of this via [=]. */ if (cxx_dialect >= cxx2a && this_capture_p - && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_COPY - && !in_system_header_at (LAMBDA_EXPR_LOCATION (lambda))) + && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_COPY) { if (warning_at (LAMBDA_EXPR_LOCATION (lambda), OPT_Wdeprecated, "implicit capture of %qE via %<[=]%> is deprecated " diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 53db8afc9f6..b29ed0c982d 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5364,8 +5364,7 @@ cp_parser_primary_expression (cp_parser *parser, { expr = cp_parser_fold_expression (parser, expr); if (expr != error_mark_node - && cxx_dialect < cxx17 - && !in_system_header_at (input_location)) + && cxx_dialect < cxx17) pedwarn (input_location, 0, "fold-expressions only available " "with %<-std=c++17%> or %<-std=gnu++17%>"); } @@ -11817,7 +11816,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p, { cx = true; cp_token *tok = cp_lexer_consume_token (parser->lexer); - if (cxx_dialect < cxx17 && !in_system_header_at (tok->location)) + if (cxx_dialect < cxx17) pedwarn (tok->location, 0, "% only available " "with %<-std=c++17%> or %<-std=gnu++17%>"); } @@ -13314,8 +13313,7 @@ cp_parser_toplevel_declaration (cp_parser* parser) /* A declaration consisting of a single semicolon is invalid. Allow it unless we're being pedantic. */ cp_lexer_consume_token (parser->lexer); - if (!in_system_header_at (input_location)) - pedwarn (input_location, OPT_Wpedantic, "extra %<;%>"); + pedwarn (input_location, OPT_Wpedantic, "extra %<;%>"); } else /* Parse the declaration itself. */ @@ -19193,7 +19191,7 @@ cp_parser_enumerator_list (cp_parser* parser, tree type) /* If the next token is a `}', there is a trailing comma. */ if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)) { - if (cxx_dialect < cxx11 && !in_system_header_at (input_location)) + if (cxx_dialect < cxx11) pedwarn (input_location, OPT_Wpedantic, "comma at end of enumerator list"); break; @@ -19655,8 +19653,7 @@ cp_parser_using_declaration (cp_parser* parser, else if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)) { cp_token *ell = cp_lexer_consume_token (parser->lexer); - if (cxx_dialect < cxx17 - && !in_system_header_at (ell->location)) + if (cxx_dialect < cxx17) pedwarn (ell->location, 0, "pack expansion in using-declaration only available " "with %<-std=c++17%> or %<-std=gnu++17%>"); @@ -24835,7 +24832,6 @@ cp_parser_member_declaration (cp_parser* parser) location_t loc = cp_lexer_peek_token (parser->lexer)->location; if (cxx_dialect < cxx2a - && !in_system_header_at (loc) && identifier != NULL_TREE) pedwarn (loc, 0, "default member initializers for bit-fields " @@ -25692,7 +25688,7 @@ cp_parser_exception_specification_opt (cp_parser* parser, cp_parser_flags flags) "specifications"); type_id_list = NULL_TREE; } - else if (cxx_dialect >= cxx11 && !in_system_header_at (loc)) + else if (cxx_dialect >= cxx11) warning_at (loc, OPT_Wdeprecated, "dynamic exception specifications are deprecated in " "C++11"); @@ -26680,8 +26676,7 @@ cp_parser_std_attribute_spec (cp_parser *parser) if (attr_ns && cp_lexer_nth_token_is (parser->lexer, 3, CPP_COLON)) { - if (cxx_dialect < cxx17 - && !in_system_header_at (input_location)) + if (cxx_dialect < cxx17) pedwarn (input_location, 0, "attribute using prefix only available " "with %<-std=c++17%> or %<-std=gnu++17%>"); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 773eb43d934..7f7f99297c0 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -24257,7 +24257,7 @@ do_decl_instantiation (tree decl, tree storage) ; else if (storage == ridpointers[(int) RID_EXTERN]) { - if (!in_system_header_at (input_location) && (cxx_dialect == cxx98)) + if (cxx_dialect == cxx98) pedwarn (input_location, OPT_Wpedantic, "ISO C++ 1998 forbids the use of % on explicit " "instantiations"); @@ -24339,20 +24339,17 @@ do_type_instantiation (tree t, tree storage, tsubst_flags_t complain) if (storage != NULL_TREE) { - if (!in_system_header_at (input_location)) + if (storage == ridpointers[(int) RID_EXTERN]) { - if (storage == ridpointers[(int) RID_EXTERN]) - { - if (cxx_dialect == cxx98) - pedwarn (input_location, OPT_Wpedantic, - "ISO C++ 1998 forbids the use of % on " - "explicit instantiations"); - } - else + if (cxx_dialect == cxx98) pedwarn (input_location, OPT_Wpedantic, - "ISO C++ forbids the use of %qE" - " on explicit instantiations", storage); + "ISO C++ 1998 forbids the use of % on " + "explicit instantiations"); } + else + pedwarn (input_location, OPT_Wpedantic, + "ISO C++ forbids the use of %qE" + " on explicit instantiations", storage); if (storage == ridpointers[(int) RID_INLINE]) nomem_p = 1; diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 141d86f50c9..83604f546fc 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -6533,7 +6533,7 @@ cp_build_unary_op (enum tree_code code, tree xarg, bool noconvert, return error_mark_node; } /* Otherwise, [depr.incr.bool] says this is deprecated. */ - else if (!in_system_header_at (input_location)) + else warning (OPT_Wdeprecated, "use of an operand of type %qT " "in % is deprecated", boolean_type_node); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ea4a731243..93f15a54705 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-10-17 Paolo Carlini + + * g++.old-deja/g++.other/decl9.C: Check locations too. + 2019-10-17 Yuliang Wang * gcc.target/aarch64/sve2/eor3_1.c: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.other/decl9.C b/gcc/testsuite/g++.old-deja/g++.other/decl9.C index 9be187add86..a8d944c589d 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/decl9.C +++ b/gcc/testsuite/g++.old-deja/g++.other/decl9.C @@ -4,7 +4,7 @@ // Contributed by Gabriel Dos Reis typedef struct { } S; // OK -typedef struct { }; // { dg-error "" } Missing type-name +typedef struct { }; // { dg-error "1:missing type-name" } Missing type-name typedef union { } U; // OK -typedef union { }; // { dg-error "" } Missing type-name +typedef union { }; // { dg-error "1:missing type-name" } Missing type-name -- 2.30.2