On Tue, Jul 13, 2021 at 5:15 AM Alexandre Oliva <ol...@adacore.com> wrote: > > > Odd-numbered indices describing argument access sizes in the fnspec > string can only hold 't' or a digit, as tested in the beginning of the > case. When checking that the size-supplying argument does not have > additional information associated with it, the test that excludes the > 't' possibility looks for it at the even position in the fnspec > string. Oops. > > This might yield false positives and negatives if a function has a > fnspec in which an argument uses a 't' access-size, and ('t' - '1') > happens to be the index of an argument described in an fnspec string. > Assuming ASCII encoding, it would take a function with at least 68 > arguments described in fnspec. Still, probably worth fixing. > > Regstrapped on x86_64-linux-gnu. I'm checking this in as obvious unless > there are objections within some 48 hours.
oops - also worth backporting to affected branches. Richard. > > for gcc/ChangeLog > > * tree-ssa-alias.c (attr_fnspec::verify): Fix index in > non-'t'-sized arg check. > --- > gcc/tree-ssa-alias.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c > index 0421bfac99869..742a95a549e20 100644 > --- a/gcc/tree-ssa-alias.c > +++ b/gcc/tree-ssa-alias.c > @@ -3895,7 +3895,7 @@ attr_fnspec::verify () > && str[idx] != 'w' && str[idx] != 'W' > && str[idx] != 'o' && str[idx] != 'O') > err = true; > - if (str[idx] != 't' > + if (str[idx + 1] != 't' > /* Size specified is scalar, so it should be described > by ". " if specified at all. */ > && (arg_specified_p (str[idx + 1] - '1') > > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > Disinformation flourishes because many people care deeply about injustice > but very few check the facts. Ask me about <https://stallmansupport.org>