aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-03-17 16:36:44 +0100
committerMartin Liska <mliska@suse.cz>2021-05-10 09:33:29 +0200
commit6ba3079dce89d9b63bf5dbd5e320ea2bf96f196b (patch)
treefe403786765fe8f105492c94df12561b01c35cb8
parentfea26bad2e5b9078d6a6b16d5e48653e31794273 (diff)
downloadgcc-6ba3079dce89d9b63bf5dbd5e320ea2bf96f196b.zip
gcc-6ba3079dce89d9b63bf5dbd5e320ea2bf96f196b.tar.gz
gcc-6ba3079dce89d9b63bf5dbd5e320ea2bf96f196b.tar.bz2
Come up with startswith function.
gcc/ada/ChangeLog: * gcc-interface/utils.c (def_builtin_1): Use startswith function instead of strncmp. gcc/analyzer/ChangeLog: * sm-file.cc (is_file_using_fn_p): Use startswith function instead of strncmp. gcc/ChangeLog: * builtins.c (is_builtin_name): Use startswith function instead of strncmp. * collect2.c (main): Likewise. (has_lto_section): Likewise. (scan_libraries): Likewise. * coverage.c (coverage_checksum_string): Likewise. (coverage_init): Likewise. * dwarf2out.c (is_cxx): Likewise. (gen_compile_unit_die): Likewise. * gcc-ar.c (main): Likewise. * gcc.c (init_spec): Likewise. (read_specs): Likewise. (execute): Likewise. (check_live_switch): Likewise. * genattrtab.c (write_attr_case): Likewise. (IS_ATTR_GROUP): Likewise. * gencfn-macros.c (main): Likewise. * gengtype.c (type_for_name): Likewise. (gen_rtx_next): Likewise. (get_file_langdir): Likewise. (write_local): Likewise. * genmatch.c (get_operator): Likewise. (get_operand_type): Likewise. (expr::gen_transform): Likewise. * genoutput.c (validate_optab_operands): Likewise. * incpath.c (add_sysroot_to_chain): Likewise. * langhooks.c (lang_GNU_C): Likewise. (lang_GNU_CXX): Likewise. (lang_GNU_Fortran): Likewise. (lang_GNU_OBJC): Likewise. * lto-wrapper.c (run_gcc): Likewise. * omp-general.c (omp_max_simt_vf): Likewise. * omp-low.c (omp_runtime_api_call): Likewise. * opts-common.c (parse_options_from_collect_gcc_options): Likewise. * read-rtl-function.c (function_reader::read_rtx_operand_r): Likewise. * real.c (real_from_string): Likewise. * selftest.c (assert_str_startswith): Likewise. * timevar.c (timer::validate_phases): Likewise. * tree.c (get_file_function_name): Likewise. * ubsan.c (ubsan_use_new_style_p): Likewise. * varasm.c (default_function_rodata_section): Likewise. (incorporeal_function_p): Likewise. (default_section_type_flags): Likewise. * system.h (startswith): Define startswith. gcc/c-family/ChangeLog: * c-ada-spec.c (print_destructor): Use startswith function instead of strncmp. (dump_ada_declaration): Likewise. * c-common.c (disable_builtin_function): Likewise. (def_builtin_1): Likewise. * c-format.c (check_tokens): Likewise. (check_plain): Likewise. (convert_format_name_to_system_name): Likewise. gcc/c/ChangeLog: * c-aux-info.c (affix_data_type): Use startswith function instead of strncmp. * c-typeck.c (build_function_call_vec): Likewise. * gimple-parser.c (c_parser_gimple_parse_bb_spec): Likewise. gcc/cp/ChangeLog: * decl.c (duplicate_decls): Use startswith function instead of strncmp. (cxx_builtin_function): Likewise. (omp_declare_variant_finalize_one): Likewise. (grokfndecl): Likewise. * error.c (dump_decl_name): Likewise. * mangle.c (find_decomp_unqualified_name): Likewise. (write_guarded_var_name): Likewise. (decl_tls_wrapper_p): Likewise. * parser.c (cp_parser_simple_type_specifier): Likewise. (cp_parser_tx_qualifier_opt): Likewise. * pt.c (template_parm_object_p): Likewise. (dguide_name_p): Likewise. gcc/d/ChangeLog: * d-builtins.cc (do_build_builtin_fn): Use startswith function instead of strncmp. * dmd/dinterpret.c (evaluateIfBuiltin): Likewise. * dmd/dmangle.c: Likewise. * dmd/hdrgen.c: Likewise. * dmd/identifier.c (Identifier::toHChars2): Likewise. gcc/fortran/ChangeLog: * decl.c (variable_decl): Use startswith function instead of strncmp. (gfc_match_end): Likewise. * gfortran.h (gfc_str_startswith): Likewise. * module.c (load_omp_udrs): Likewise. (read_module): Likewise. * options.c (gfc_handle_runtime_check_option): Likewise. * primary.c (match_arg_list_function): Likewise. * trans-decl.c (gfc_get_symbol_decl): Likewise. * trans-expr.c (gfc_conv_procedure_call): Likewise. * trans-intrinsic.c (gfc_conv_ieee_arithmetic_function): Likewise. gcc/go/ChangeLog: * gofrontend/runtime.cc (Runtime::name_to_code): Use startswith function instead of strncmp. gcc/objc/ChangeLog: * objc-act.c (objc_string_ref_type_p): Use startswith function instead of strncmp. * objc-encoding.c (encode_type): Likewise. * objc-next-runtime-abi-02.c (has_load_impl): Likewise.
-rw-r--r--gcc/ada/gcc-interface/utils.c3
-rw-r--r--gcc/analyzer/sm-file.cc5
-rw-r--r--gcc/builtins.c10
-rw-r--r--gcc/c-family/c-ada-spec.c8
-rw-r--r--gcc/c-family/c-common.c5
-rw-r--r--gcc/c-family/c-format.c20
-rw-r--r--gcc/c/c-aux-info.c4
-rw-r--r--gcc/c/c-typeck.c4
-rw-r--r--gcc/c/gimple-parser.c2
-rw-r--r--gcc/collect2.c48
-rw-r--r--gcc/coverage.c7
-rw-r--r--gcc/cp/decl.c15
-rw-r--r--gcc/cp/error.c2
-rw-r--r--gcc/cp/mangle.c11
-rw-r--r--gcc/cp/parser.c7
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/d/d-builtins.cc3
-rw-r--r--gcc/d/dmd/dinterpret.c2
-rw-r--r--gcc/d/dmd/dmangle.c2
-rw-r--r--gcc/d/dmd/hdrgen.c2
-rw-r--r--gcc/d/dmd/identifier.c6
-rw-r--r--gcc/dwarf2out.c14
-rw-r--r--gcc/fortran/decl.c4
-rw-r--r--gcc/fortran/gfortran.h4
-rw-r--r--gcc/fortran/module.c10
-rw-r--r--gcc/fortran/options.c2
-rw-r--r--gcc/fortran/primary.c6
-rw-r--r--gcc/fortran/trans-decl.c2
-rw-r--r--gcc/fortran/trans-expr.c2
-rw-r--r--gcc/fortran/trans-intrinsic.c22
-rw-r--r--gcc/gcc-ar.c2
-rw-r--r--gcc/gcc.c14
-rw-r--r--gcc/genattrtab.c8
-rw-r--r--gcc/gencfn-macros.c2
-rw-r--r--gcc/gengtype.c8
-rw-r--r--gcc/genmatch.c8
-rw-r--r--gcc/genoutput.c2
-rw-r--r--gcc/go/gofrontend/runtime.cc2
-rw-r--r--gcc/incpath.c2
-rw-r--r--gcc/langhooks.c8
-rw-r--r--gcc/lto-wrapper.c3
-rw-r--r--gcc/objc/objc-act.c2
-rw-r--r--gcc/objc/objc-encoding.c2
-rw-r--r--gcc/objc/objc-next-runtime-abi-02.c2
-rw-r--r--gcc/omp-general.c2
-rw-r--r--gcc/omp-low.c2
-rw-r--r--gcc/opts-common.c2
-rw-r--r--gcc/read-rtl-function.c2
-rw-r--r--gcc/real.c6
-rw-r--r--gcc/selftest.c3
-rw-r--r--gcc/system.h8
-rw-r--r--gcc/timevar.c2
-rw-r--r--gcc/tree.c2
-rw-r--r--gcc/ubsan.c2
-rw-r--r--gcc/varasm.c22
55 files changed, 169 insertions, 186 deletions
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index 5211a36..80a4160 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -7016,8 +7016,7 @@ def_builtin_1 (enum built_in_function fncode,
return;
gcc_assert ((!both_p && !fallback_p)
- || !strncmp (name, "__builtin_",
- strlen ("__builtin_")));
+ || startswith (name, "__builtin_"));
libname = name + strlen ("__builtin_");
decl = add_builtin_function (name, fntype, fncode, fnclass,
diff --git a/gcc/analyzer/sm-file.cc b/gcc/analyzer/sm-file.cc
index d64c313..3a5f95d 100644
--- a/gcc/analyzer/sm-file.cc
+++ b/gcc/analyzer/sm-file.cc
@@ -312,9 +312,8 @@ is_file_using_fn_p (tree fndecl)
/* Also support variants of these names prefixed with "_IO_". */
const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
- if (strncmp (name, "_IO_", 4) == 0)
- if (fs.contains_name_p (name + 4))
- return true;
+ if (startswith (name, "_IO_") && fs.contains_name_p (name + 4))
+ return true;
return false;
}
diff --git a/gcc/builtins.c b/gcc/builtins.c
index bc40bad..2f0efae 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -738,13 +738,9 @@ pointer_query::flush_cache ()
static bool
is_builtin_name (const char *name)
{
- if (strncmp (name, "__builtin_", 10) == 0)
- return true;
- if (strncmp (name, "__sync_", 7) == 0)
- return true;
- if (strncmp (name, "__atomic_", 9) == 0)
- return true;
- return false;
+ return (startswith (name, "__builtin_")
+ || startswith (name, "__sync_")
+ || startswith (name, "__atomic_"));
}
/* Return true if NODE should be considered for inline expansion regardless
diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c
index 9fef5f0..29eb0b0 100644
--- a/gcc/c-family/c-ada-spec.c
+++ b/gcc/c-family/c-ada-spec.c
@@ -2696,7 +2696,7 @@ print_destructor (pretty_printer *buffer, tree t, tree type)
tree decl_name = DECL_NAME (TYPE_NAME (type));
pp_string (buffer, "Delete_");
- if (strncmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__dt_del", 8) == 0)
+ if (startswith (IDENTIFIER_POINTER (DECL_NAME (t)), "__dt_del"))
pp_string (buffer, "And_Free_");
pp_ada_tree_identifier (buffer, decl_name, t, false);
}
@@ -2980,9 +2980,9 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
return 0;
/* Only consider complete constructors and deleting destructors. */
- if (strncmp (IDENTIFIER_POINTER (decl_name), "__ct_comp", 9) != 0
- && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_comp", 9) != 0
- && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_del", 8) != 0)
+ if (!startswith (IDENTIFIER_POINTER (decl_name), "__ct_comp")
+ && !startswith (IDENTIFIER_POINTER (decl_name), "__dt_comp")
+ && !startswith (IDENTIFIER_POINTER (decl_name), "__dt_del"))
return 0;
}
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index d227686..7bd799d 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -4670,7 +4670,7 @@ static bool builtin_function_disabled_p (const char *);
void
disable_builtin_function (const char *name)
{
- if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
+ if (startswith (name, "__builtin_"))
error ("cannot disable built-in function %qs", name);
else
{
@@ -4718,8 +4718,7 @@ def_builtin_1 (enum built_in_function fncode,
return;
gcc_assert ((!both_p && !fallback_p)
- || !strncmp (name, "__builtin_",
- strlen ("__builtin_")));
+ || startswith (name, "__builtin_"));
libname = name + strlen ("__builtin_");
decl = add_builtin_function (name, fntype, fncode, fnclass,
diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c
index 0a63cac..bda3b18 100644
--- a/gcc/c-family/c-format.c
+++ b/gcc/c-family/c-format.c
@@ -3097,7 +3097,7 @@ check_tokens (const token_t *tokens, unsigned ntoks,
/* Allow this ugly warning for the time being. */
if (toklen == 2
&& format_chars - orig_format_chars > 6
- && !strncmp (format_chars - 7, " count >= width of ", 19))
+ && startswith (format_chars - 7, " count >= width of "))
return format_chars + 10;
/* The token is a type if it ends in an alphabetic character. */
@@ -3127,7 +3127,7 @@ check_tokens (const token_t *tokens, unsigned ntoks,
/* Diagnose unquoted __attribute__. Consider any parenthesized
argument to the attribute to avoid redundant warnings for
the double parentheses that might follow. */
- if (!strncmp (format_chars, "__attribute", sizeof "__attribute" - 1))
+ if (startswith (format_chars, "__attribute"))
{
unsigned nchars = sizeof "__attribute" - 1;
while ('_' == format_chars[nchars])
@@ -3178,9 +3178,9 @@ check_tokens (const token_t *tokens, unsigned ntoks,
/* Diagnose unquoted built-ins. */
if (format_chars[0] == '_'
&& format_chars[1] == '_'
- && (!strncmp (format_chars + 2, "atomic", sizeof "atomic" - 1)
- || !strncmp (format_chars + 2, "builtin", sizeof "builtin" - 1)
- || !strncmp (format_chars + 2, "sync", sizeof "sync" - 1)))
+ && (startswith (format_chars + 2, "atomic")
+ || startswith (format_chars + 2, "builtin")
+ || startswith (format_chars + 2, "sync")))
{
format_warning_substr (format_string_loc, format_string_cst,
fmtchrpos, fmtchrpos + wlen, opt,
@@ -3267,7 +3267,7 @@ check_plain (location_t format_string_loc, tree format_string_cst,
if (*format_chars == '%')
{
/* Diagnose %<%s%> and suggest using %qs instead. */
- if (!strncmp (format_chars, "%<%s%>", 6))
+ if (startswith (format_chars, "%<%s%>"))
format_warning_substr (format_string_loc, format_string_cst,
fmtchrpos, fmtchrpos + 6, opt,
"quoted %qs directive in format; "
@@ -3593,7 +3593,7 @@ check_plain (location_t format_string_loc, tree format_string_cst,
if (nchars == 1)
{
- if (!strncmp (format_chars, "\"%s\"", 4))
+ if (startswith (format_chars, "\"%s\""))
{
if (format_warning_substr (format_string_loc, format_string_cst,
fmtchrpos, fmtchrpos + 4, opt,
@@ -3621,7 +3621,7 @@ check_plain (location_t format_string_loc, tree format_string_cst,
&& format_chars[0] == '(')
; /* Text beginning in an open parenthesis. */
else if (nchars == 3
- && !strncmp (format_chars, "...", 3)
+ && startswith (format_chars, "...")
&& format_chars[3])
; /* Text beginning in an ellipsis. */
else
@@ -3663,7 +3663,7 @@ check_plain (location_t format_string_loc, tree format_string_cst,
a period at the end of a capitalized sentence. */
else if (nchars == 3
&& format_chars - orig_format_chars > 0
- && !strncmp (format_chars, "...", 3))
+ && startswith (format_chars, "..."))
; /* Text ending in the ellipsis. */
else
format_warning_substr (format_string_loc, format_string_cst,
@@ -5104,7 +5104,7 @@ convert_format_name_to_system_name (const char *attr_name)
int i;
if (attr_name == NULL || *attr_name == 0
- || strncmp (attr_name, "gcc_", 4) == 0)
+ || startswith (attr_name, "gcc_"))
return attr_name;
#ifdef TARGET_OVERRIDES_FORMAT_INIT
TARGET_OVERRIDES_FORMAT_INIT ();
diff --git a/gcc/c/c-aux-info.c b/gcc/c/c-aux-info.c
index bae5757..81860cb 100644
--- a/gcc/c/c-aux-info.c
+++ b/gcc/c/c-aux-info.c
@@ -67,12 +67,12 @@ affix_data_type (const char *param)
for (;;)
{
- if (!strncmp (p, "volatile ", 9))
+ if (startswith (p, "volatile "))
{
p += 9;
continue;
}
- if (!strncmp (p, "const ", 6))
+ if (startswith (p, "const "))
{
p += 6;
continue;
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 5bdc673..c3b85da 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -3113,7 +3113,7 @@ build_function_call_vec (location_t loc, vec<location_t> arg_loc,
orig_fundecl = fundecl;
/* Atomic functions have type checking/casting already done. They are
often rewritten and don't match the original parameter list. */
- if (name && !strncmp (IDENTIFIER_POINTER (name), "__atomic_", 9))
+ if (name && startswith (IDENTIFIER_POINTER (name), "__atomic_"))
origtypes = NULL;
}
if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
@@ -3199,7 +3199,7 @@ build_function_call_vec (location_t loc, vec<location_t> arg_loc,
nargs, argarray, &arg_loc);
if (name != NULL_TREE
- && !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10))
+ && startswith (IDENTIFIER_POINTER (name), "__builtin_"))
{
if (require_constant_value)
result
diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c
index 58b161b..3a6e72e 100644
--- a/gcc/c/gimple-parser.c
+++ b/gcc/c/gimple-parser.c
@@ -131,7 +131,7 @@ static void c_parser_gimple_expr_list (gimple_parser &, vec<tree> *);
static bool
c_parser_gimple_parse_bb_spec (tree val, int *index)
{
- if (strncmp (IDENTIFIER_POINTER (val), "__BB", 4) != 0)
+ if (!startswith (IDENTIFIER_POINTER (val), "__BB"))
return false;
for (const char *p = IDENTIFIER_POINTER (val) + 4; *p; ++p)
if (!ISDIGIT (*p))
diff --git a/gcc/collect2.c b/gcc/collect2.c
index bd37143..0ddb169 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -956,7 +956,7 @@ main (int argc, char **argv)
{
if (! strcmp (argv[i], "-debug"))
debug = true;
- else if (!strncmp (argv[i], "-fno-lto", 8))
+ else if (startswith (argv[i], "-fno-lto"))
lto_mode = LTO_MODE_NONE;
else if (! strcmp (argv[i], "-plugin"))
{
@@ -970,7 +970,7 @@ main (int argc, char **argv)
selected_linker = USE_GOLD_LD;
else if (strcmp (argv[i], "-fuse-ld=lld") == 0)
selected_linker = USE_LLD_LD;
- else if (strncmp (argv[i], "-o", 2) == 0)
+ else if (startswith (argv[i], "-o"))
{
/* Parse the output filename if it's given so that we can make
meaningful temp filenames. */
@@ -984,19 +984,19 @@ main (int argc, char **argv)
/* These flags are position independent, although their order
is important - subsequent flags override earlier ones. */
else if (strcmp (argv[i], "-b64") == 0)
- aix64_flag = 1;
+ aix64_flag = 1;
/* -bexport:filename always needs the :filename */
- else if (strncmp (argv[i], "-bE:", 4) == 0
- || strncmp (argv[i], "-bexport:", 9) == 0)
- export_flag = 1;
+ else if (startswith (argv[i], "-bE:")
+ || startswith (argv[i], "-bexport:"))
+ export_flag = 1;
else if (strcmp (argv[i], "-brtl") == 0
|| strcmp (argv[i], "-bsvr4") == 0
|| strcmp (argv[i], "-G") == 0)
- aixrtl_flag = 1;
+ aixrtl_flag = 1;
else if (strcmp (argv[i], "-bnortl") == 0)
- aixrtl_flag = 0;
+ aixrtl_flag = 0;
else if (strcmp (argv[i], "-blazy") == 0)
- aixlazy_flag = 1;
+ aixlazy_flag = 1;
#endif
}
@@ -1016,11 +1016,11 @@ main (int argc, char **argv)
const char *q = extract_string (&p);
if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
num_c_args++;
- if (strncmp (q, "-flto-partition=none", 20) == 0)
+ if (startswith (q, "-flto-partition=none"))
no_partition = true;
- else if (strncmp (q, "-fno-lto", 8) == 0)
+ else if (startswith (q, "-fno-lto"))
lto_mode = LTO_MODE_NONE;
- else if (strncmp (q, "-save-temps", 11) == 0)
+ else if (startswith (q, "-save-temps"))
/* FIXME: Honour =obj. */
save_temps = true;
else if (strcmp (q, "-dumpdir") == 0)
@@ -1254,7 +1254,7 @@ main (int argc, char **argv)
(void) extract_string (&p);
#ifdef COLLECT_EXPORT_LIST
/* Detect any invocation with -fvisibility. */
- if (strncmp (q, "-fvisibility", 12) == 0)
+ if (startswith (q, "-fvisibility"))
visibility_flag = 1;
#endif
}
@@ -1303,7 +1303,7 @@ main (int argc, char **argv)
break;
case 'f':
- if (strncmp (arg, "-flto", 5) == 0)
+ if (startswith (arg, "-flto"))
{
#ifdef ENABLE_LTO
/* Do not pass LTO flag to the linker. */
@@ -1315,13 +1315,13 @@ main (int argc, char **argv)
#endif
}
else if (!use_collect_ld
- && strncmp (arg, "-fuse-ld=", 9) == 0)
+ && startswith (arg, "-fuse-ld="))
{
/* Do not pass -fuse-ld={bfd|gold|lld} to the linker. */
ld1--;
ld2--;
}
- else if (strncmp (arg, "-fno-lto", 8) == 0)
+ else if (startswith (arg, "-fno-lto"))
{
/* Do not pass -fno-lto to the linker. */
ld1--;
@@ -1462,7 +1462,7 @@ main (int argc, char **argv)
ld2--;
#endif
}
- else if (strncmp (arg, "--demangle", 10) == 0)
+ else if (startswith (arg, "--demangle"))
{
#ifndef HAVE_LD_DEMANGLE
no_demangle = 0;
@@ -1479,7 +1479,7 @@ main (int argc, char **argv)
ld2--;
#endif
}
- else if (strncmp (arg, "--sysroot=", 10) == 0)
+ else if (startswith (arg, "--sysroot="))
target_system_root = arg + 10;
else if (strcmp (arg, "--version") == 0)
verbose = true;
@@ -2307,13 +2307,9 @@ has_lto_section (void *data, const char *name ATTRIBUTE_UNUSED,
{
int *found = (int *) data;
- if (strncmp (name, LTO_SECTION_NAME_PREFIX,
- sizeof (LTO_SECTION_NAME_PREFIX) - 1) != 0)
- {
- if (strncmp (name, OFFLOAD_SECTION_NAME_PREFIX,
- sizeof (OFFLOAD_SECTION_NAME_PREFIX) - 1) != 0)
- return 1;
- }
+ if (!startswith (name, LTO_SECTION_NAME_PREFIX)
+ && !startswith (name, OFFLOAD_SECTION_NAME_PREFIX))
+ return 1;
*found = 1;
@@ -2619,7 +2615,7 @@ scan_libraries (const char *prog_name)
continue;
name = p;
- if (strncmp (name, "not found", sizeof ("not found") - 1) == 0)
+ if (startswith (name, "not found"))
fatal_error (input_location, "dynamic dependency %s not found", buf);
/* Find the end of the symbol name. */
diff --git a/gcc/coverage.c b/gcc/coverage.c
index dc9ea6f..5a344cd 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -488,9 +488,9 @@ coverage_checksum_string (unsigned chksum, const char *string)
for (i = 0; string[i]; i++)
{
int offset = 0;
- if (!strncmp (string + i, "_GLOBAL__N_", 11))
+ if (startswith (string + i, "_GLOBAL__N_"))
offset = 11;
- if (!strncmp (string + i, "_GLOBAL__", 9))
+ if (startswith (string + i, "_GLOBAL__"))
offset = 9;
/* C++ namespaces do have scheme:
@@ -1256,8 +1256,7 @@ coverage_init (const char *filename)
filename = concat (getpwd (), separator, filename, NULL);
if (profile_prefix_path)
{
- if (!strncmp (filename, profile_prefix_path,
- strlen (profile_prefix_path)))
+ if (startswith (filename, profile_prefix_path))
{
filename += strlen (profile_prefix_path);
while (*filename == *separator)
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 8bf524b..bc3928d 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -1609,8 +1609,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
if (name[0] == '_'
&& name[1] == '_'
- && (strncmp (name + 2, "builtin_",
- strlen ("builtin_")) == 0
+ && (startswith (name + 2, "builtin_")
|| (len = strlen (name)) <= strlen ("___chk")
|| memcmp (name + len - strlen ("_chk"),
"_chk", strlen ("_chk") + 1) != 0))
@@ -4828,7 +4827,7 @@ cxx_builtin_function (tree decl)
/* In the user's namespace, it must be declared before use. */
hiding = true;
else if (IDENTIFIER_LENGTH (id) > strlen ("___chk")
- && 0 != strncmp (name + 2, "builtin_", strlen ("builtin_"))
+ && !startswith (name + 2, "builtin_")
&& 0 == memcmp (name + IDENTIFIER_LENGTH (id) - strlen ("_chk"),
"_chk", strlen ("_chk") + 1))
/* Treat __*_chk fortification functions as anticipated as well,
@@ -7606,9 +7605,9 @@ omp_declare_variant_finalize_one (tree decl, tree attr)
return true;
}
if (fndecl_built_in_p (variant)
- && (strncmp (varname, "__builtin_", strlen ("__builtin_")) == 0
- || strncmp (varname, "__sync_", strlen ("__sync_")) == 0
- || strncmp (varname, "__atomic_", strlen ("__atomic_")) == 0))
+ && (startswith (varname, "__builtin_")
+ || startswith (varname, "__sync_")
+ || startswith (varname, "__atomic_")))
{
error_at (varid_loc, "variant %qD is a built-in", variant);
return true;
@@ -9881,8 +9880,8 @@ grokfndecl (tree ctype,
|| (IDENTIFIER_LENGTH (declarator) > 10
&& IDENTIFIER_POINTER (declarator)[0] == '_'
&& IDENTIFIER_POINTER (declarator)[1] == '_'
- && strncmp (IDENTIFIER_POINTER (declarator)+2,
- "builtin_", 8) == 0)
+ && startswith (IDENTIFIER_POINTER (declarator) + 2,
+ "builtin_"))
|| (targetcm.cxx_implicit_extern_c
&& (targetcm.cxx_implicit_extern_c
(IDENTIFIER_POINTER (declarator))))))
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index c88d174..3c2276b 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -1138,7 +1138,7 @@ dump_decl_name (cxx_pretty_printer *pp, tree t, int flags)
}
const char *str = IDENTIFIER_POINTER (t);
- if (!strncmp (str, "_ZGR", 4))
+ if (startswith (str, "_ZGR"))
{
pp_cxx_ws_string (pp, "<temporary>");
return;
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 49f1266..f0e1f41 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -1308,10 +1308,10 @@ find_decomp_unqualified_name (tree decl, size_t *len)
const char *p = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
const char *end = p + IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (decl));
bool nested = false;
- if (strncmp (p, "_Z", 2))
+ if (!startswith (p, "_Z"))
return NULL;
p += 2;
- if (!strncmp (p, "St", 2))
+ if (startswith (p, "St"))
p += 2;
else if (*p == 'N')
{
@@ -1327,7 +1327,7 @@ find_decomp_unqualified_name (tree decl, size_t *len)
break;
}
}
- if (strncmp (p, "DC", 2))
+ if (!startswith (p, "DC"))
return NULL;
if (nested)
{
@@ -4430,7 +4430,7 @@ static void
write_guarded_var_name (const tree variable)
{
if (DECL_NAME (variable)
- && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
+ && startswith (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR"))
/* The name of a guard variable for a reference temporary should refer
to the reference, not the temporary. */
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
@@ -4488,8 +4488,7 @@ decl_tls_wrapper_p (const tree fn)
if (TREE_CODE (fn) != FUNCTION_DECL)
return false;
tree name = DECL_NAME (fn);
- return strncmp (IDENTIFIER_POINTER (name), TLS_WRAPPER_PREFIX,
- strlen (TLS_WRAPPER_PREFIX)) == 0;
+ return startswith (IDENTIFIER_POINTER (name), TLS_WRAPPER_PREFIX);
}
/* Return an identifier for the name of a temporary variable used to
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 58bd6d1..0fe29c6 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -18668,9 +18668,8 @@ cp_parser_simple_type_specifier (cp_parser* parser,
decl_specs->int_n_idx = idx;
/* Check if the alternate "__intN__" form has been used instead of
"__intN". */
- if (strncmp (IDENTIFIER_POINTER (token->u.value)
- + (IDENTIFIER_LENGTH (token->u.value) - 2),
- "__", 2) == 0)
+ if (startswith (IDENTIFIER_POINTER (token->u.value)
+ + (IDENTIFIER_LENGTH (token->u.value) - 2), "__"))
decl_specs->int_n_alt = true;
}
type = int_n_trees [idx].signed_type;
@@ -22961,7 +22960,7 @@ cp_parser_tx_qualifier_opt (cp_parser *parser)
tree name = token->u.value;
const char *p = IDENTIFIER_POINTER (name);
const int len = strlen ("transaction_safe");
- if (!strncmp (p, "transaction_safe", len))
+ if (startswith (p, "transaction_safe"))
{
p += len;
if (*p == '\0'
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 36a8cb5..bd99529 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6994,7 +6994,7 @@ bool
template_parm_object_p (const_tree t)
{
return (TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t) && DECL_NAME (t)
- && !strncmp (IDENTIFIER_POINTER (DECL_NAME (t)), "_ZTA", 4));
+ && startswith (IDENTIFIER_POINTER (DECL_NAME (t)), "_ZTA"));
}
/* Subroutine of convert_nontype_argument, to check whether EXPR, as an
@@ -28493,8 +28493,7 @@ dguide_name_p (tree name)
{
return (TREE_CODE (name) == IDENTIFIER_NODE
&& TREE_TYPE (name)
- && !strncmp (IDENTIFIER_POINTER (name), dguide_base,
- strlen (dguide_base)));
+ && startswith (IDENTIFIER_POINTER (name), dguide_base));
}
/* True if FN is a deduction guide. */
diff --git a/gcc/d/d-builtins.cc b/gcc/d/d-builtins.cc
index 400bce0..859a8ce 100644
--- a/gcc/d/d-builtins.cc
+++ b/gcc/d/d-builtins.cc
@@ -739,8 +739,7 @@ do_build_builtin_fn (built_in_function fncode,
return;
gcc_assert ((!both_p && !fallback_p)
- || !strncmp (name, "__builtin_",
- strlen ("__builtin_")));
+ || startswith (name, "__builtin_"));
libname = name + strlen ("__builtin_");
diff --git a/gcc/d/dmd/dinterpret.c b/gcc/d/dmd/dinterpret.c
index 5e71f3b..9e74a0d 100644
--- a/gcc/d/dmd/dinterpret.c
+++ b/gcc/d/dmd/dinterpret.c
@@ -6881,7 +6881,7 @@ Expression *evaluateIfBuiltin(UnionExp *pue, InterState *istate, Loc loc,
const char *id = fd->ident->toChars();
size_t idlen = strlen(id);
if (nargs == 2 && (idlen == 10 || idlen == 11) &&
- !strncmp(id, "_aApply", 7))
+ startswith (id, "_aApply"))
{
// Functions from aApply.d and aApplyR.d in the runtime
bool rvs = (idlen == 11); // true if foreach_reverse
diff --git a/gcc/d/dmd/dmangle.c b/gcc/d/dmd/dmangle.c
index 83f4c18..f112243 100644
--- a/gcc/d/dmd/dmangle.c
+++ b/gcc/d/dmd/dmangle.c
@@ -673,7 +673,7 @@ public:
cd == ClassDeclaration::object ||
cd == Type::typeinfoclass ||
cd == Module::moduleinfo ||
- strncmp(cd->ident->toChars(), "TypeInfo_", 9) == 0)
+ startswith (cd->ident->toChars(), "TypeInfo_"))
{
// Don't mangle parent
ad->parent = NULL;
diff --git a/gcc/d/dmd/hdrgen.c b/gcc/d/dmd/hdrgen.c
index 9397b1e..e72273b 100644
--- a/gcc/d/dmd/hdrgen.c
+++ b/gcc/d/dmd/hdrgen.c
@@ -3212,7 +3212,7 @@ public:
}
else if (p->type->ty == Tident &&
strlen(((TypeIdentifier *)p->type)->ident->toChars()) > 3 &&
- strncmp(((TypeIdentifier *)p->type)->ident->toChars(), "__T", 3) == 0)
+ startswith (((TypeIdentifier *)p->type)->ident->toChars(), "__T"))
{
// print parameter name, instead of undetermined type parameter
buf->writestring(p->ident->toChars());
diff --git a/gcc/d/dmd/identifier.c b/gcc/d/dmd/identifier.c
index 197d288..dd2c58f 100644
--- a/gcc/d/dmd/identifier.c
+++ b/gcc/d/dmd/identifier.c
@@ -73,11 +73,11 @@ const char *Identifier::toHChars2()
{ p = toChars();
if (*p == '_')
{
- if (strncmp(p, "_staticCtor", 11) == 0)
+ if (startswith(p, "_staticCtor"))
p = "static this";
- else if (strncmp(p, "_staticDtor", 11) == 0)
+ else if (startswith(p, "_staticDtor"))
p = "static ~this";
- else if (strncmp(p, "__invariant", 11) == 0)
+ else if (startswith(p, "__invariant"))
p = "invariant";
}
}
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index a5ec21a..8fc8298 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5532,7 +5532,7 @@ is_cxx (const_tree decl)
{
const_tree context = get_ultimate_context (decl);
if (context && TRANSLATION_UNIT_LANGUAGE (context))
- return strncmp (TRANSLATION_UNIT_LANGUAGE (context), "GNU C++", 7) == 0;
+ return startswith (TRANSLATION_UNIT_LANGUAGE (context), "GNU C++");
}
return is_cxx ();
}
@@ -24846,8 +24846,8 @@ gen_compile_unit_die (const char *filename)
common_lang = TRANSLATION_UNIT_LANGUAGE (t);
else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
;
- else if (strncmp (common_lang, "GNU C", 5) == 0
- && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
+ else if (startswith (common_lang, "GNU C")
+ && startswith (TRANSLATION_UNIT_LANGUAGE (t), "GNU C"))
/* Mixing C and C++ is ok, use C++ in that case. */
common_lang = highest_c_language (common_lang,
TRANSLATION_UNIT_LANGUAGE (t));
@@ -24864,7 +24864,7 @@ gen_compile_unit_die (const char *filename)
}
language = DW_LANG_C;
- if (strncmp (language_string, "GNU C", 5) == 0
+ if (startswith (language_string, "GNU C")
&& ISDIGIT (language_string[5]))
{
language = DW_LANG_C89;
@@ -24880,7 +24880,7 @@ gen_compile_unit_die (const char *filename)
language = DW_LANG_C11;
}
}
- else if (strncmp (language_string, "GNU C++", 7) == 0)
+ else if (startswith (language_string, "GNU C++"))
{
language = DW_LANG_C_plus_plus;
if (dwarf_version >= 5 /* || !dwarf_strict */)
@@ -24902,7 +24902,7 @@ gen_compile_unit_die (const char *filename)
{
if (strcmp (language_string, "GNU Ada") == 0)
language = DW_LANG_Ada95;
- else if (strncmp (language_string, "GNU Fortran", 11) == 0)
+ else if (startswith (language_string, "GNU Fortran"))
{
language = DW_LANG_Fortran95;
if (dwarf_version >= 5 /* || !dwarf_strict */)
@@ -24926,7 +24926,7 @@ gen_compile_unit_die (const char *filename)
}
}
/* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */
- else if (strncmp (language_string, "GNU Fortran", 11) == 0)
+ else if (startswith (language_string, "GNU Fortran"))
language = DW_LANG_Fortran90;
/* Likewise for Ada. */
else if (strcmp (language_string, "GNU Ada") == 0)
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 947e4f8..413c7a7 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -2721,7 +2721,7 @@ variable_decl (int elem)
}
/* %FILL components may not have initializers. */
- if (gfc_str_startswith (name, "%FILL") && gfc_match_eos () != MATCH_YES)
+ if (startswith (name, "%FILL") && gfc_match_eos () != MATCH_YES)
{
gfc_error ("%qs entity cannot have an initializer at %C", "%FILL");
m = MATCH_ERROR;
@@ -8221,7 +8221,7 @@ gfc_match_end (gfc_statement *st)
{
case COMP_ASSOCIATE:
case COMP_BLOCK:
- if (gfc_str_startswith (block_name, "block@"))
+ if (startswith (block_name, "block@"))
block_name = NULL;
break;
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index d12be0c..4f5d2f8 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -3518,10 +3518,6 @@ bool gfc_is_compile_time_shape (gfc_array_spec *);
bool gfc_ref_dimen_size (gfc_array_ref *, int dimen, mpz_t *, mpz_t *);
-
-#define gfc_str_startswith(str, pref) \
- (strncmp ((str), (pref), strlen (pref)) == 0)
-
/* interface.c -- FIXME: some of these should be in symbol.c */
void gfc_free_interface (gfc_interface *);
bool gfc_compare_derived_types (gfc_symbol *, gfc_symbol *);
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 089453c..321d3256 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -5029,7 +5029,7 @@ load_omp_udrs (void)
mio_pool_string (&name);
gfc_clear_ts (&ts);
mio_typespec (&ts);
- if (gfc_str_startswith (name, "operator "))
+ if (startswith (name, "operator "))
{
const char *p = name + sizeof ("operator ") - 1;
if (strcmp (p, "+") == 0)
@@ -5477,8 +5477,8 @@ read_module (void)
/* Exception: Always import vtabs & vtypes. */
if (p == NULL && name[0] == '_'
- && (gfc_str_startswith (name, "__vtab_")
- || gfc_str_startswith (name, "__vtype_")))
+ && (startswith (name, "__vtab_")
+ || startswith (name, "__vtype_")))
p = name;
/* Skip symtree nodes not in an ONLY clause, unless there
@@ -5563,8 +5563,8 @@ read_module (void)
sym->attr.use_rename = 1;
if (name[0] != '_'
- || (!gfc_str_startswith (name, "__vtab_")
- && !gfc_str_startswith (name, "__vtype_")))
+ || (!startswith (name, "__vtab_")
+ && !startswith (name, "__vtype_")))
sym->attr.use_only = only_flag;
/* Store the symtree pointing to this symbol. */
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 3a0b98b..1723f68 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -615,7 +615,7 @@ gfc_handle_runtime_check_option (const char *arg)
result = 1;
break;
}
- else if (optname[n] && pos > 3 && gfc_str_startswith (arg, "no-")
+ else if (optname[n] && pos > 3 && startswith (arg, "no-")
&& strncmp (optname[n], arg+3, pos-3) == 0)
{
gfc_option.rtcheck &= ~optmask[n];
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index a6df885..9fe8d1e 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1786,21 +1786,21 @@ match_arg_list_function (gfc_actual_arglist *result)
switch (name[0])
{
case 'l':
- if (gfc_str_startswith (name, "loc"))
+ if (startswith (name, "loc"))
{
result->name = "%LOC";
break;
}
/* FALLTHRU */
case 'r':
- if (gfc_str_startswith (name, "ref"))
+ if (startswith (name, "ref"))
{
result->name = "%REF";
break;
}
/* FALLTHRU */
case 'v':
- if (gfc_str_startswith (name, "val"))
+ if (startswith (name, "val"))
{
result->name = "%VAL";
break;
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index cc9d855..a170188 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1941,7 +1941,7 @@ gfc_get_symbol_decl (gfc_symbol * sym)
Marking this as artificial means that OpenMP will treat this as
predetermined shared. */
- bool def_init = gfc_str_startswith (sym->name, "__def_init");
+ bool def_init = startswith (sym->name, "__def_init");
if (sym->attr.vtab || def_init)
{
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 7e3de41..cce18d0 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -6847,7 +6847,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
/* When calling __copy for character expressions to unlimited
polymorphic entities, the dst argument needs a string length. */
if (sym->name[0] == '_' && e && e->ts.type == BT_CHARACTER
- && gfc_str_startswith (sym->name, "__vtab_CHARACTER")
+ && startswith (sym->name, "__vtab_CHARACTER")
&& arg->next && arg->next->expr
&& (arg->next->expr->ts.type == BT_DERIVED
|| arg->next->expr->ts.type == BT_CLASS)
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index cceef8f..4d74514 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -10062,27 +10062,27 @@ gfc_conv_ieee_arithmetic_function (gfc_se * se, gfc_expr * expr)
{
const char *name = expr->value.function.name;
- if (gfc_str_startswith (name, "_gfortran_ieee_is_nan"))
+ if (startswith (name, "_gfortran_ieee_is_nan"))
conv_intrinsic_ieee_builtin (se, expr, BUILT_IN_ISNAN, 1);
- else if (gfc_str_startswith (name, "_gfortran_ieee_is_finite"))
+ else if (startswith (name, "_gfortran_ieee_is_finite"))
conv_intrinsic_ieee_builtin (se, expr, BUILT_IN_ISFINITE, 1);
- else if (gfc_str_startswith (name, "_gfortran_ieee_unordered"))
+ else if (startswith (name, "_gfortran_ieee_unordered"))
conv_intrinsic_ieee_builtin (se, expr, BUILT_IN_ISUNORDERED, 2);
- else if (gfc_str_startswith (name, "_gfortran_ieee_is_normal"))
+ else if (startswith (name, "_gfortran_ieee_is_normal"))
conv_intrinsic_ieee_is_normal (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_is_negative"))
+ else if (startswith (name, "_gfortran_ieee_is_negative"))
conv_intrinsic_ieee_is_negative (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_copy_sign"))
+ else if (startswith (name, "_gfortran_ieee_copy_sign"))
conv_intrinsic_ieee_copy_sign (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_scalb"))
+ else if (startswith (name, "_gfortran_ieee_scalb"))
conv_intrinsic_ieee_scalb (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_next_after"))
+ else if (startswith (name, "_gfortran_ieee_next_after"))
conv_intrinsic_ieee_next_after (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_rem"))
+ else if (startswith (name, "_gfortran_ieee_rem"))
conv_intrinsic_ieee_rem (se, expr);
- else if (gfc_str_startswith (name, "_gfortran_ieee_logb"))
+ else if (startswith (name, "_gfortran_ieee_logb"))
conv_intrinsic_ieee_logb_rint (se, expr, BUILT_IN_LOGB);
- else if (gfc_str_startswith (name, "_gfortran_ieee_rint"))
+ else if (startswith (name, "_gfortran_ieee_rint"))
conv_intrinsic_ieee_logb_rint (se, expr, BUILT_IN_RINT);
else
/* It is not among the functions we translate directly. We return
diff --git a/gcc/gcc-ar.c b/gcc/gcc-ar.c
index e76d452..cbc7662 100644
--- a/gcc/gcc-ar.c
+++ b/gcc/gcc-ar.c
@@ -140,7 +140,7 @@ main (int ac, char **av)
/* Not using getopt for now. */
for (i = 0; i < ac; i++)
- if (!strncmp (av[i], "-B", 2))
+ if (startswith (av[i], "-B"))
{
const char *arg = av[i] + 2;
const char *end;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index bd561ac..4c1a659 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1906,7 +1906,7 @@ init_spec (void)
when given the proper command line arguments. */
while (*p)
{
- if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
+ if (in_sep && *p == '-' && startswith (p, "-lgcc"))
{
init_gcc_specs (&obstack,
"-lgcc_s"
@@ -1929,7 +1929,7 @@ init_spec (void)
p += 5;
in_sep = 0;
}
- else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
+ else if (in_sep && *p == 'l' && startswith (p, "libgcc.a%s"))
{
/* Ug. We don't know shared library extensions. Hope that
systems that use this form don't do shared libraries. */
@@ -2384,7 +2384,7 @@ read_specs (const char *filename, bool main_p, bool user_p)
/* Skip '\n'. */
p++;
- if (!strncmp (p1, "%include", sizeof ("%include") - 1)
+ if (startswith (p1, "%include")
&& (p1[sizeof "%include" - 1] == ' '
|| p1[sizeof "%include" - 1] == '\t'))
{
@@ -2405,7 +2405,7 @@ read_specs (const char *filename, bool main_p, bool user_p)
read_specs (new_filename ? new_filename : p1, false, user_p);
continue;
}
- else if (!strncmp (p1, "%include_noerr", sizeof "%include_noerr" - 1)
+ else if (startswith (p1, "%include_noerr")
&& (p1[sizeof "%include_noerr" - 1] == ' '
|| p1[sizeof "%include_noerr" - 1] == '\t'))
{
@@ -2429,7 +2429,7 @@ read_specs (const char *filename, bool main_p, bool user_p)
fnotice (stderr, "could not find specs file %s\n", p1);
continue;
}
- else if (!strncmp (p1, "%rename", sizeof "%rename" - 1)
+ else if (startswith (p1, "%rename")
&& (p1[sizeof "%rename" - 1] == ' '
|| p1[sizeof "%rename" - 1] == '\t'))
{
@@ -3502,7 +3502,7 @@ execute (void)
&& WEXITSTATUS (status) == ICE_EXIT_CODE
&& i == 0
&& (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
- && ! strncmp (p + 1, "cc1", 3))
+ && startswith (p + 1, "cc1"))
try_generate_repro (commands[0].argv);
if (WEXITSTATUS (status) > greatest_status)
greatest_status = WEXITSTATUS (status);
@@ -7335,7 +7335,7 @@ check_live_switch (int switchnum, int prefix_length)
break;
case 'W': case 'f': case 'm': case 'g':
- if (! strncmp (name + 1, "no-", 3))
+ if (startswith (name + 1, "no-"))
{
/* We have Xno-YYY, search for XYYY. */
for (i = switchnum + 1; i < n_switches; i++)
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 1e035dd..b8a26ec 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -4343,7 +4343,7 @@ write_attr_case (FILE *outf, class attr_desc *attr, struct attr_value *av,
write_attr_set (outf, attr, indent + 2, av->value, prefix, suffix,
known_true, -2, 0, 0);
- if (strncmp (prefix, "return", 6))
+ if (!startswith (prefix, "return"))
{
write_indent (outf, indent + 2);
fprintf (outf, "break;\n");
@@ -5376,14 +5376,12 @@ main (int argc, const char **argv)
{
FILE *outf;
-#define IS_ATTR_GROUP(X) (!strncmp (attr->name, X, strlen (X)))
- if (IS_ATTR_GROUP ("*internal_dfa_insn_code"))
+ if (startswith(attr->name, "*internal_dfa_insn_code"))
outf = dfa_file;
- else if (IS_ATTR_GROUP ("*insn_default_latency"))
+ else if (startswith (attr->name, "*insn_default_latency"))
outf = latency_file;
else
outf = attr_file;
-#undef IS_ATTR_GROUP
if (! attr->is_special && ! attr->is_const)
write_attr_get (outf, attr);
diff --git a/gcc/gencfn-macros.c b/gcc/gencfn-macros.c
index b620fe6..fd9ae14 100644
--- a/gcc/gencfn-macros.c
+++ b/gcc/gencfn-macros.c
@@ -208,7 +208,7 @@ main (int argc, char **argv)
for (unsigned int i = 0; builtin_names[i]; ++i)
{
const char *name = builtin_names[i];
- if (strncmp (name, "BUILT_IN_", 9) == 0)
+ if (startswith (name, "BUILT_IN_"))
{
const char *root = name + 9;
for (unsigned int j = 0; suffix_lists[j]; ++j)
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 98d4626..b94e2f1 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -671,7 +671,7 @@ type_for_name (const char *s)
extern GTY(()) gcc::some_type *some_ptr;
where the autogenerated functions will refer to simply "some_type",
where they can be resolved into their namespace. */
- if (strncmp (s, "gcc::", 5) == 0)
+ if (startswith (s, "gcc::"))
s += 5;
for (p = typedefs; p != NULL; p = p->next)
@@ -1102,7 +1102,7 @@ gen_rtx_next (void)
int k;
rtx_next_new[i] = -1;
- if (strncmp (rtx_format[i], "uu", 2) == 0)
+ if (startswith (rtx_format[i], "uu"))
rtx_next_new[i] = 1;
else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST)
rtx_next_new[i] = 1;
@@ -1828,7 +1828,7 @@ get_file_langdir (const input_file *inpf)
return NULL;
lang_index = get_prefix_langdir_index (srcdir_relative_path);
- if (lang_index < 0 && strncmp (srcdir_relative_path, "c-family", 8) == 0)
+ if (lang_index < 0 && startswith (srcdir_relative_path, "c-family"))
r = "c-family";
else if (lang_index >= 0)
r = lang_dir_names[lang_index];
@@ -4044,7 +4044,7 @@ write_local (outf_p output_header, type_p structures)
|| ((s)->gc_used == GC_MAYBE_POINTED_TO \
&& s->u.s.line.file != NULL) \
|| ((s)->gc_used == GC_USED \
- && strncmp (s->u.s.tag, "anonymous", strlen ("anonymous"))) \
+ && !startswith (s->u.s.tag, "anonymous")) \
|| (s->u.s.base_class && opts_have (s->u.s.opt, "tag")))))
diff --git a/gcc/genmatch.c b/gcc/genmatch.c
index 5db1d96..4d47672 100644
--- a/gcc/genmatch.c
+++ b/gcc/genmatch.c
@@ -605,10 +605,10 @@ get_operator (const char *id, bool allow_null = false)
for (unsigned int i = 0; id2[i]; ++i)
id2[i] = TOUPPER (id2[i]);
}
- else if (all_upper && strncmp (id, "IFN_", 4) == 0)
+ else if (all_upper && startswith (id, "IFN_"))
/* Try CFN_ instead of IFN_. */
id2 = ACONCAT (("CFN_", id + 4, NULL));
- else if (all_upper && strncmp (id, "BUILT_IN_", 9) == 0)
+ else if (all_upper && startswith (id, "BUILT_IN_"))
/* Try prepending CFN_. */
id2 = ACONCAT (("CFN_", id, NULL));
else
@@ -2387,7 +2387,7 @@ get_operand_type (id_base *op, unsigned pos,
else if (*op == COND_EXPR
&& pos == 0)
return "boolean_type_node";
- else if (strncmp (op->id, "CFN_COND_", 9) == 0)
+ else if (startswith (op->id, "CFN_COND_"))
{
/* IFN_COND_* operands 1 and later by default have the same type
as the result. The type of operand 0 needs to be specified
@@ -2460,7 +2460,7 @@ expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
}
else if (*opr == COND_EXPR
|| *opr == VEC_COND_EXPR
- || strncmp (opr->id, "CFN_COND_", 9) == 0)
+ || startswith (opr->id, "CFN_COND_"))
{
/* Conditions are of the same type as their first alternative. */
snprintf (optype, sizeof (optype), "TREE_TYPE (_o%d[1])", depth);
diff --git a/gcc/genoutput.c b/gcc/genoutput.c
index 25af437..8e911cc 100644
--- a/gcc/genoutput.c
+++ b/gcc/genoutput.c
@@ -841,7 +841,7 @@ validate_optab_operands (class data *d)
return;
/* Miscellaneous tests. */
- if (strncmp (d->name, "cstore", 6) == 0
+ if (startswith (d->name, "cstore")
&& d->name[strlen (d->name) - 1] == '4'
&& d->operand[0].mode == VOIDmode)
{
diff --git a/gcc/go/gofrontend/runtime.cc b/gcc/go/gofrontend/runtime.cc
index 3cc5ded..514c045 100644
--- a/gcc/go/gofrontend/runtime.cc
+++ b/gcc/go/gofrontend/runtime.cc
@@ -463,7 +463,7 @@ Runtime::name_to_code(const std::string& name)
// The names in the table have "runtime." prefix. We may be
// called with a name without the prefix. Try matching
// without the prefix as well.
- if (strncmp(runtime_function_name, "runtime.", 8) == 0
+ if (startswith(runtime_function_name, "runtime.")
&& strcmp(runtime_function_name + 8, name.c_str()) == 0)
code = static_cast<Runtime::Function>(i);
}
diff --git a/gcc/incpath.c b/gcc/incpath.c
index 446d280..52dbb80 100644
--- a/gcc/incpath.c
+++ b/gcc/incpath.c
@@ -330,7 +330,7 @@ add_sysroot_to_chain (const char *sysroot, int chain)
{
if (p->name[0] == '=')
p->name = concat (sysroot, p->name + 1, NULL);
- if (strncmp (p->name, "$SYSROOT", strlen ("$SYSROOT")) == 0)
+ if (startswith (p->name, "$SYSROOT"))
p->name = concat (sysroot, p->name + strlen ("$SYSROOT"), NULL);
}
}
diff --git a/gcc/langhooks.c b/gcc/langhooks.c
index 2354386..12c9988 100644
--- a/gcc/langhooks.c
+++ b/gcc/langhooks.c
@@ -901,7 +901,7 @@ lhd_finalize_early_debug (void)
bool
lang_GNU_C (void)
{
- return (strncmp (lang_hooks.name, "GNU C", 5) == 0
+ return (startswith (lang_hooks.name, "GNU C")
&& (lang_hooks.name[5] == '\0' || ISDIGIT (lang_hooks.name[5])));
}
@@ -910,7 +910,7 @@ lang_GNU_C (void)
bool
lang_GNU_CXX (void)
{
- return strncmp (lang_hooks.name, "GNU C++", 7) == 0;
+ return startswith (lang_hooks.name, "GNU C++");
}
/* Returns true if the current lang_hooks represents the GNU Fortran frontend. */
@@ -918,7 +918,7 @@ lang_GNU_CXX (void)
bool
lang_GNU_Fortran (void)
{
- return strncmp (lang_hooks.name, "GNU Fortran", 11) == 0;
+ return startswith (lang_hooks.name, "GNU Fortran");
}
/* Returns true if the current lang_hooks represents the GNU Objective-C
@@ -927,5 +927,5 @@ lang_GNU_Fortran (void)
bool
lang_GNU_OBJC (void)
{
- return strncmp (lang_hooks.name, "GNU Objective-C", 15) == 0;
+ return startswith (lang_hooks.name, "GNU Objective-C");
}
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index e95b0d8..d6be7f0 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -1457,8 +1457,7 @@ run_gcc (unsigned argc, char *argv[])
int consumed;
char *filename = argv[i];
- if (strncmp (argv[i], "-foffload-objects=",
- sizeof ("-foffload-objects=") - 1) == 0)
+ if (startswith (argv[i], "-foffload-objects="))
{
have_offload = true;
offload_objects_file_name
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 1cbd586..796256d 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -10275,7 +10275,7 @@ objc_string_ref_type_p (tree strp)
return (tmv
&& TREE_CODE (tmv) == IDENTIFIER_NODE
&& IDENTIFIER_POINTER (tmv)
- && !strncmp (IDENTIFIER_POINTER (tmv), "NSString", 8));
+ && startswith (IDENTIFIER_POINTER (tmv), "NSString"));
}
/* At present the behavior of this is undefined and it does nothing. */
diff --git a/gcc/objc/objc-encoding.c b/gcc/objc/objc-encoding.c
index c4067b1..7ad920a 100644
--- a/gcc/objc/objc-encoding.c
+++ b/gcc/objc/objc-encoding.c
@@ -733,7 +733,7 @@ encode_type (tree type, int curtype, int format)
char *enc = (char *) obstack_base (&util_obstack) + curtype;
/* Rewrite "in const" from "nr" to "rn". */
- if (curtype >= 1 && !strncmp (enc - 1, "nr", 2))
+ if (curtype >= 1 && startswith (enc - 1, "nr"))
memcpy (enc - 1, "rn", 2);
}
}
diff --git a/gcc/objc/objc-next-runtime-abi-02.c b/gcc/objc/objc-next-runtime-abi-02.c
index af68c1c..3cfcd0b 100644
--- a/gcc/objc/objc-next-runtime-abi-02.c
+++ b/gcc/objc/objc-next-runtime-abi-02.c
@@ -2209,7 +2209,7 @@ has_load_impl (tree clsmeth)
{
tree id = METHOD_SEL_NAME (clsmeth);
if (IDENTIFIER_LENGTH (id) == 4
- && strncmp (IDENTIFIER_POINTER (id), "load", 4) == 0)
+ && startswith (IDENTIFIER_POINTER (id), "load"))
return true;
clsmeth = DECL_CHAIN (clsmeth);
}
diff --git a/gcc/omp-general.c b/gcc/omp-general.c
index fa6de01..a1bb9d8 100644
--- a/gcc/omp-general.c
+++ b/gcc/omp-general.c
@@ -968,7 +968,7 @@ omp_max_simt_vf (void)
if (ENABLE_OFFLOADING)
for (const char *c = getenv ("OFFLOAD_TARGET_NAMES"); c;)
{
- if (!strncmp (c, "nvptx", strlen ("nvptx")))
+ if (startswith (c, "nvptx"))
return 32;
else if ((c = strchr (c, ':')))
c++;
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 2325cfc..8b31362 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -3786,7 +3786,7 @@ omp_runtime_api_call (const_tree fndecl)
return false;
const char *name = IDENTIFIER_POINTER (declname);
- if (strncmp (name, "omp_", 4) != 0)
+ if (!startswith (name, "omp_"))
return false;
static const char *omp_runtime_apis[] =
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index 5e10ede..9d1914f 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -1805,7 +1805,7 @@ parse_options_from_collect_gcc_options (const char *collect_gcc_options,
if (argv_storage[j] == '\0')
fatal_error (input_location,
"malformed %<COLLECT_GCC_OPTIONS%>");
- else if (strncmp (&argv_storage[j], "'\\''", 4) == 0)
+ else if (startswith (&argv_storage[j], "'\\''"))
{
argv_storage[k++] = '\'';
j += 4;
diff --git a/gcc/read-rtl-function.c b/gcc/read-rtl-function.c
index a10d57f..ca580d3 100644
--- a/gcc/read-rtl-function.c
+++ b/gcc/read-rtl-function.c
@@ -1082,7 +1082,7 @@ function_reader::read_rtx_operand_r (rtx x)
"orig:%i", ORIGINAL_REGNO (rtx).
Consume it, we don't set ORIGINAL_REGNO, since we can
get that from the 2nd copy later. */
- if (strncmp (desc, "orig:", 5) == 0)
+ if (startswith (desc, "orig:"))
{
expect_original_regno = true;
desc_start += 5;
diff --git a/gcc/real.c b/gcc/real.c
index 09957a9..555cf44 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -1972,17 +1972,17 @@ real_from_string (REAL_VALUE_TYPE *r, const char *str)
else if (*str == '+')
str++;
- if (!strncmp (str, "QNaN", 4))
+ if (startswith (str, "QNaN"))
{
get_canonical_qnan (r, sign);
return 0;
}
- else if (!strncmp (str, "SNaN", 4))
+ else if (startswith (str, "SNaN"))
{
get_canonical_snan (r, sign);
return 0;
}
- else if (!strncmp (str, "Inf", 3))
+ else if (startswith (str, "Inf"))
{
get_inf (r, sign);
return 0;
diff --git a/gcc/selftest.c b/gcc/selftest.c
index 6e26ea5..8f1cde0 100644
--- a/gcc/selftest.c
+++ b/gcc/selftest.c
@@ -150,8 +150,7 @@ assert_str_startswith (const location &loc,
"ASSERT_STR_STARTSWITH (%s, %s) str=\"%s\" prefix=NULL",
desc_str, desc_prefix, val_str);
- const char *test = strstr (val_str, val_prefix);
- if (test == val_str)
+ if (startswith (val_str, val_prefix))
pass (loc, "ASSERT_STR_STARTSWITH");
else
fail_formatted
diff --git a/gcc/system.h b/gcc/system.h
index 95e5430..3c85626 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -1296,4 +1296,12 @@ void gcc_stablesort (void *, size_t, size_t,
#define NULL nullptr
#endif
+/* Return true if STR string starts with PREFIX. */
+
+static inline bool
+startswith (const char *str, const char *prefix)
+{
+ return strncmp (str, prefix, strlen (prefix)) == 0;
+}
+
#endif /* ! GCC_SYSTEM_H */
diff --git a/gcc/timevar.c b/gcc/timevar.c
index 5d4e159..8fc122b 100644
--- a/gcc/timevar.c
+++ b/gcc/timevar.c
@@ -600,7 +600,7 @@ timer::validate_phases (FILE *fp) const
if (!tv->used)
continue;
- if (strncmp (tv->name, phase_prefix, sizeof phase_prefix - 1) == 0)
+ if (startswith (tv->name, phase_prefix))
{
phase_user += tv->elapsed.user;
phase_sys += tv->elapsed.sys;
diff --git a/gcc/tree.c b/gcc/tree.c
index c5506a0..01eda55 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -8583,7 +8583,7 @@ get_file_function_name (const char *type)
We also assign sub_I and sub_D sufixes to constructors called from
the global static constructors. These are always local. */
else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
- || (strncmp (type, "sub_", 4) == 0
+ || (startswith (type, "sub_")
&& (type[4] == 'I' || type[4] == 'D')))
{
const char *file = main_input_filename;
diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index 1089aef..7ee9343 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -1783,7 +1783,7 @@ ubsan_use_new_style_p (location_t loc)
return false;
expanded_location xloc = expand_location (loc);
- if (xloc.file == NULL || strncmp (xloc.file, "\1", 2) == 0
+ if (xloc.file == NULL || startswith (xloc.file, "\1")
|| xloc.file[0] == '\0' || xloc.file[0] == '\xff'
|| xloc.file[1] == '\xff')
return false;
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 97c1e6f..53cf6de 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -792,7 +792,7 @@ default_function_rodata_section (tree decl, bool relocatable)
/* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo or
.gnu.linkonce.d.rel.ro.local.foo if the jump table is relocatable. */
else if (DECL_COMDAT_GROUP (decl)
- && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
+ && startswith (name, ".gnu.linkonce.t."))
{
size_t len;
char *rname;
@@ -817,7 +817,7 @@ default_function_rodata_section (tree decl, bool relocatable)
}
/* For .text.foo we want to use .rodata.foo. */
else if (flag_function_sections && flag_data_sections
- && strncmp (name, ".text.", 6) == 0)
+ && startswith (name, ".text."))
{
size_t len = strlen (name) + 1;
char *rname = (char *) alloca (len + strlen (sname) - 5);
@@ -2509,7 +2509,7 @@ incorporeal_function_p (tree decl)
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
/* Atomic or sync builtins which have survived this far will be
resolved externally and therefore are not incorporeal. */
- if (strncmp (name, "__builtin_", 10) == 0)
+ if (startswith (name, "__builtin_"))
return true;
}
return false;
@@ -6737,22 +6737,22 @@ default_section_type_flags (tree decl, const char *name, int reloc)
flags |= SECTION_TLS | SECTION_WRITE;
if (strcmp (name, ".bss") == 0
- || strncmp (name, ".bss.", 5) == 0
- || strncmp (name, ".gnu.linkonce.b.", 16) == 0
+ || startswith (name, ".bss.")
+ || startswith (name, ".gnu.linkonce.b.")
|| strcmp (name, ".persistent.bss") == 0
|| strcmp (name, ".sbss") == 0
- || strncmp (name, ".sbss.", 6) == 0
- || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
+ || startswith (name, ".sbss.")
+ || startswith (name, ".gnu.linkonce.sb."))
flags |= SECTION_BSS;
if (strcmp (name, ".tdata") == 0
- || strncmp (name, ".tdata.", 7) == 0
- || strncmp (name, ".gnu.linkonce.td.", 17) == 0)
+ || startswith (name, ".tdata.")
+ || startswith (name, ".gnu.linkonce.td."))
flags |= SECTION_TLS;
if (strcmp (name, ".tbss") == 0
- || strncmp (name, ".tbss.", 6) == 0
- || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
+ || startswith (name, ".tbss.")
+ || startswith (name, ".gnu.linkonce.tb."))
flags |= SECTION_TLS | SECTION_BSS;
if (strcmp (name, ".noinit") == 0)