x86: Reject target("no-general-regs-only")

Reject target("no-general-regs-only") pragma and attribute.

gcc/

	PR target/96802
	* config/i386/i386-options.c (ix86_valid_target_attribute_inner_p):
	Reject target("no-general-regs-only").

gcc/testsuite/

	PR target/96802
	* gcc.target/i386/pr96802-1.c: New test.
	* gcc.target/i386/pr96802-2.c: Likewise.
This commit is contained in:
H.J. Lu 2020-08-26 12:37:05 -07:00
parent 703e049aa7
commit 8f1ea8ddcc
3 changed files with 35 additions and 0 deletions

View file

@ -1189,6 +1189,13 @@ ix86_valid_target_attribute_inner_p (tree fndecl, tree args, char *p_strings[],
{
if (mask == OPTION_MASK_GENERAL_REGS_ONLY)
{
if (!opt_set_p)
{
error_at (loc, "pragma or attribute %<target(\"%s\")%> "
"does not allow a negated form", p);
return false;
}
if (type != ix86_opt_ix86_yes)
gcc_unreachable ();

View file

@ -0,0 +1,12 @@
/* { dg-do compile } */
/* Reject the negated form of non-negatable attributes. */
__attribute__ ((target ("no-general-regs-only")))
int
foo (int a)
{
return a + 1;
}
/* { dg-error "does not allow a negated form" "" { target *-*-* } 0 } */

View file

@ -0,0 +1,16 @@
/* { dg-do compile } */
/* Reject the negated form of non-negatable pragma target. */
#pragma GCC push_options
#pragma GCC target("no-general-regs-only")
int
foo (int a)
{
return a + 1;
}
#pragma GCC pop_options
/* { dg-error "does not allow a negated form" "" { target *-*-* } 0 } */