aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
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);
}