aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-10-02 15:56:12 +0200
committerJan Hubicka <jh@suse.cz>2020-10-02 15:56:12 +0200
commit762cca0023c9bdbd762c44f33a954845bbccd568 (patch)
tree3850ad6516b7ef5ae3d17d8c5116904c73a9a629 /gcc/tree-ssa-alias.c
parent1d3e12c469e5f5627c2e271232e1a3d8a88783be (diff)
downloadgcc-762cca0023c9bdbd762c44f33a954845bbccd568.zip
gcc-762cca0023c9bdbd762c44f33a954845bbccd568.tar.gz
gcc-762cca0023c9bdbd762c44f33a954845bbccd568.tar.bz2
Perforate fnspec strings
gcc/ChangeLog: 2020-10-02 Jan Hubicka <hubicka@ucw.cz> * attr-fnspec.h: Update documentation. (attr_fnsec::return_desc_size): Set to 2 (attr_fnsec::arg_desc_size): Set to 2 * builtin-attrs.def (STR1): Update fnspec. * internal-fn.def (UBSAN_NULL): Update fnspec. (UBSAN_VPTR): Update fnspec. (UBSAN_PTR): Update fnspec. (ASAN_CHECK): Update fnspec. (GOACC_DIM_SIZE): Remove fnspec. (GOACC_DIM_POS): Remove fnspec. * tree-ssa-alias.c (attr_fnspec::verify): Update verification. gcc/fortran/ChangeLog: 2020-10-02 Jan Hubicka <hubicka@ucw.cz> * trans-decl.c (gfc_build_library_function_decl_with_spec): Verify fnspec. (gfc_build_intrinsic_function_decls): Update fnspecs. (gfc_build_builtin_function_decls): Update fnspecs. * trans-io.c (gfc_build_io_library_fndecls): Update fnspecs. * trans-types.c (create_fn_spec): Update fnspecs.
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 52aeaeb..3d3a91c 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -4020,16 +4020,21 @@ walk_aliased_vdefs (ao_ref *ref, tree vdef,
void
attr_fnspec::verify ()
{
- /* FIXME: Fortran trans-decl.c contains multiple wrong fnspec strings.
- re-enable verification after these are fixed. */
- return;
bool err = false;
/* Check return value specifier. */
if (len < return_desc_size)
err = true;
+ else if ((len - return_desc_size) % arg_desc_size)
+ err = true;
else if ((str[0] < '1' || str[0] > '4')
- && str[0] != '.' && str[0] != 'm')
+ && str[0] != '.' && str[0] != 'm'
+ /* FIXME: Fortran trans-decl.c contains multiple wrong fnspec
+ strings. The following characters have no meaning. */
+ && str[0] != 'R' && str[0] != 'W')
+ err = true;
+
+ if (str[1] != ' ')
err = true;
/* Now check all parameters. */
@@ -4049,7 +4054,9 @@ attr_fnspec::verify ()
default:
err = true;
}
+ if (str[idx + 1] != ' ')
+ err = true;
}
if (err)
- internal_error ("invalid fn spec attribute %s", str);
+ internal_error ("invalid fn spec attribute \"%s\"", str);
}