Alfie Richards <alfie.richa...@arm.com> writes:
> On 18/02/2025 15:32, Richard Sandiford wrote:
>  > Alfie Richards <alfie.richa...@arm.com> writes:
>  >> This changes the ambiguation error for C++ to cover cases of differently
>  >> annotated FMV function sets whose signatures only differ by their return
>  >> type.
>  >>
>  >> It also adds tests covering many FMV errors for Aarch64, including
>  >> redeclaration, and mixing target_clones and target_versions.
>  >
>  > The tests look good.  Sorry for not applying the series to find out
>  > for myself, but what's the full message for:
>  >> diff --git a/gcc/testsuite/g++.target/aarch64/mvc-error2.C 
> b/gcc/testsuite/g++.target/aarch64/mvc-error2.C
>  >> new file mode 100644
>  >> index 00000000000..0e956e402d8
>  >> --- /dev/null
>  >> +++ b/gcc/testsuite/g++.target/aarch64/mvc-error2.C
>  >> @@ -0,0 +1,10 @@
>  >> +/* { dg-do compile } */
>  >> +/* { dg-require-ifunc "" } */
>  >> +/* { dg-options "-O0" } */
>  >> +/* { dg-additional-options "-Wno-experimental-fmv-target" } */
>  >> +
>  >> +__attribute__ ((target_clones ("default, dotprod"))) float
>  >> +foo () { return 3; } /* { dg-message "previously defined here" } */
>  >> +
>  >> +__attribute__ ((target_clones ("dotprod", "mve"))) float
>  >> +foo () { return 3; } /* { dg-error "redefinition of" } */
>  >
>  > ...the redefinition error here?  Does it mention dotprod specifically?
>  > If so, it might be worth capturing that in the test, so that we don't
>  > regress later.
> No unfortunately the error is just:
>
> ../FMV_REWRITE/gcc/testsuite/g++.target/aarch64/mvc-error2.C:9:1: error: 
> redefinition of ‘float foo()’
>      9 | foo () { return 3; }
>        | ^~~
> ../FMV_REWRITE/gcc/testsuite/g++.target/aarch64/mvc-error2.C:6:1: note: 
> ‘float foo()’ previously defined here
>      6 | foo () { return 3; }
>        | ^~~
>
> This is obviously not great.
>
> I didn't do anything about this as all the ways I could think of to 
> improve this are quite involved.
>
> Currently this is handled by the common_function_version hook which only
> indicates if the decl's are part of the same function version set or 
> not. Then in this case where they're not distinct versions it tries to 
> combine them (which fails) and then diagnoses the conflict as usual.
>
> I think I've got a way to make this slightly better, which I will try.

Sounds good!  I don't think this is a blocker, so no worries if it
turns out to be too awkward.  I was just curious.

Thanks,
Richard

Reply via email to