https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115713
--- Comment #3 from Kewen Lin <linkw at gcc dot gnu.org> --- (In reply to Peter Bergner from comment #2) > (In reply to Kewen Lin from comment #0) > > As Peter found in the PR115688, there isn't a warning for: > > > > long __attribute__ ((target ("no-altivec,vsx"))) > > foo (void) > > { > > return 0; > > } > > > > It's expected to see warning like: > > > > warning: ‘-mvsx’ and ‘-mno-altivec’ are incompatible > > I think Segher and I mentioned in the other bug, that conflicting options > like this should be an error, rather than a warning. ah, thanks for noting this, sorry that I missed that part. I agree that error sounds better as both are explicitly specified. I thought the reason why it's a warning is that the whole processing hunk is for warning: /* Add some warnings for VSX. */ if (TARGET_VSX) { const char *msg = NULL; if (!TARGET_HARD_FLOAT) { if (rs6000_isa_flags_explicit & OPTION_MASK_VSX) msg = N_("%<-mvsx%> requires hardware floating point"); else { rs6000_isa_flags &= ~ OPTION_MASK_VSX; rs6000_isa_flags_explicit |= OPTION_MASK_VSX; } } else if (TARGET_AVOID_XFORM > 0) msg = N_("%<-mvsx%> needs indexed addressing"); else if (!TARGET_ALTIVEC && (rs6000_isa_flags_explicit & OPTION_MASK_ALTIVEC)) { if (rs6000_isa_flags_explicit & OPTION_MASK_VSX) msg = N_("%<-mvsx%> and %<-mno-altivec%> are incompatible"); else msg = N_("%<-mno-altivec%> disables vsx"); } if (msg) { warning (0, msg); rs6000_isa_flags &= ~ OPTION_MASK_VSX; rs6000_isa_flags_explicit |= OPTION_MASK_VSX; } } I think we still would like to leave the others as warning, then I'll add one flag specific in explicit vsx and altivec arm for error.