public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: PR middle-end/18160
       [not found]             ` <jehdohgh9z.fsf@sykes.suse.de>
@ 2004-10-27  8:26               ` Adam Nemet
  2004-10-27  9:52                 ` Joseph S. Myers
                                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Adam Nemet @ 2004-10-27  8:26 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Richard Henderson, gcc, gcc-patches

Andreas Schwab writes:
> Adam Nemet <anemet@lnxw.com> writes:
>> Should this be turned into an error too?
> It violates a constraint in the standard.

Thanks for all the comments.  Here is the patch to turn the testcase
into an error.  It was regression tested on i686-pc-linux-gnu.

Is it OK to apply?

Adam

2004-10-26  Adam Nemet  <anemet@lnxw.com> 
 
        PR middle-end/18160   
        * c-typeck.c (c_mark_addressable): Issue error if address of a 
        register variable is taken. 

2004-10-26  Adam Nemet  <anemet@lnxw.com> 
 
        PR middle-end/18160   
        * gcc.dg/pr18160.c: New test. 
        * gcc.dg/pr18160-1.c: New test. 
        * gcc.dg/asm-7.c: Taking the address of a register variable is an 
        error now. 

Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.392
diff -c -p -r1.392 c-typeck.c
*** c-typeck.c	17 Oct 2004 22:01:19 -0000	1.392
--- c-typeck.c	27 Oct 2004 06:23:14 -0000
*************** c_mark_addressable (tree exp)
*** 2856,2869 ****
  	else if (C_DECL_REGISTER (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      {
! 		error ("address of global register variable %qs requested",
! 		       IDENTIFIER_POINTER (DECL_NAME (x)));
! 		return false;
! 	      }
! 
! 	    pedwarn ("address of register variable %qs requested",
  		     IDENTIFIER_POINTER (DECL_NAME (x)));
  	  }
  
  	/* drops in */
--- 2856,2867 ----
  	else if (C_DECL_REGISTER (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      error ("address of global register variable %qs requested",
! 		     IDENTIFIER_POINTER (DECL_NAME (x)));
! 	    else
! 	      error ("address of register variable %qs requested",
  		     IDENTIFIER_POINTER (DECL_NAME (x)));
+ 	    return false;
  	  }
  
  	/* drops in */
Index: testsuite/gcc.dg/pr18160-1.c
===================================================================
RCS file: testsuite/gcc.dg/pr18160-1.c
diff -N testsuite/gcc.dg/pr18160-1.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.dg/pr18160-1.c	27 Oct 2004 06:23:14 -0000
***************
*** 0 ****
--- 1,14 ----
+ /* PR/18160 */
+ 
+ /* { dg-do compile } */
+ 
+ /* This should yield an error even without -pedantic.  */
+ /* { dg-options "-ansi" } */
+ 
+ void g(int *);
+ 
+ void f(void) 
+ { 
+   register int x;
+   g(&x);	/* { dg-error "address of register variable" } */
+ } 
Index: testsuite/gcc.dg/pr18160.c
===================================================================
RCS file: testsuite/gcc.dg/pr18160.c
diff -N testsuite/gcc.dg/pr18160.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.dg/pr18160.c	27 Oct 2004 06:23:14 -0000
***************
*** 0 ****
--- 1,14 ----
+ /* PR/18160 */
+ 
+ /* { dg-do compile { target i?86-*-* } } */
+ 
+ /* This should yield an error even without -pedantic.  */
+ /* { dg-options "-ansi" } */
+ 
+ void g(int *);
+ 
+ void f(void) 
+ { 
+   register int x __asm ("eax");
+   g(&x);	/* { dg-error "address of register variable" } */
+ } 
Index: testsuite/gcc.dg/asm-7.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/asm-7.c,v
retrieving revision 1.4
diff -c -p -r1.4 asm-7.c
*** testsuite/gcc.dg/asm-7.c	13 May 2004 06:40:49 -0000	1.4
--- testsuite/gcc.dg/asm-7.c	27 Oct 2004 06:23:14 -0000
*************** void test(void)
*** 9,15 ****
    static int m;
    int *p;
  
!   __asm__ ("" : : "m"(r));	/* { dg-warning "address of register" } */
    __asm__ ("" : : "m"(i));
    __asm__ ("" : : "m"(m));
    __asm__ ("" : : "m"(0));	/* { dg-error "" } */
--- 9,15 ----
    static int m;
    int *p;
  
!   __asm__ ("" : : "m"(r));	/* { dg-error "" } */
    __asm__ ("" : : "m"(i));
    __asm__ ("" : : "m"(m));
    __asm__ ("" : : "m"(0));	/* { dg-error "" } */
*************** void test(void)
*** 22,28 ****
    __asm__ ("" : : "g"(0));
    __asm__ ("" : : "g"(i+1));
  
!   __asm__ ("" : "=m"(r2));	/* { dg-warning "address of register" } */
    __asm__ ("" : "=m"(i));
    __asm__ ("" : "=m"(m));
  }
--- 22,28 ----
    __asm__ ("" : : "g"(0));
    __asm__ ("" : : "g"(i+1));
  
!   __asm__ ("" : "=m"(r2));	/* { dg-error "" } */
    __asm__ ("" : "=m"(i));
    __asm__ ("" : "=m"(m));
  }

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27  8:26               ` PR middle-end/18160 Adam Nemet
@ 2004-10-27  9:52                 ` Joseph S. Myers
  2004-10-27  9:57                   ` Eric Botcazou
  2004-10-27 16:53                 ` Richard Henderson
  2004-10-27 17:35                 ` Giovanni Bajo
  2 siblings, 1 reply; 7+ messages in thread
From: Joseph S. Myers @ 2004-10-27  9:52 UTC (permalink / raw)
  To: Adam Nemet; +Cc: Andreas Schwab, Richard Henderson, gcc, gcc-patches

On Tue, 26 Oct 2004, Adam Nemet wrote:

>         * gcc.dg/pr18160.c: New test. 
>         * gcc.dg/pr18160-1.c: New test. 

You should use pr18160-1.c, pr18160-2.c unless there's some specific 
reason not to do so.  When adding just a single testcase for a problem, it 
should normally include the -1 suffix - in case future related tests 
arise.

> +   g(&x);	/* { dg-error "address of register variable" } */

dg-error does not test that something is a hard error, for now you need to 
include the "error: " prefix in the tested message explicitly.

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
    jsm@polyomino.org.uk (personal mail)
    joseph@codesourcery.com (CodeSourcery mail)
    jsm28@gcc.gnu.org (Bugzilla assignments and CCs)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27  9:52                 ` Joseph S. Myers
@ 2004-10-27  9:57                   ` Eric Botcazou
  2004-10-27 22:57                     ` Adam Nemet
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Botcazou @ 2004-10-27  9:57 UTC (permalink / raw)
  To: gcc
  Cc: Joseph S. Myers, Adam Nemet, Andreas Schwab, Richard Henderson,
	gcc-patches

> You should use pr18160-1.c, pr18160-2.c unless there's some specific
> reason not to do so.  When adding just a single testcase for a problem, it
> should normally include the -1 suffix - in case future related tests
> arise.

IMHO register-var-1.c, register-var-2.c would be even better.

-- 
Eric Botcazou

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27  8:26               ` PR middle-end/18160 Adam Nemet
  2004-10-27  9:52                 ` Joseph S. Myers
@ 2004-10-27 16:53                 ` Richard Henderson
  2004-10-27 17:35                 ` Giovanni Bajo
  2 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2004-10-27 16:53 UTC (permalink / raw)
  To: Adam Nemet; +Cc: Andreas Schwab, gcc, gcc-patches

On Tue, Oct 26, 2004 at 11:49:41PM -0700, Adam Nemet wrote:
> ! 	      error ("address of global register variable %qs requested",
> ! 		     IDENTIFIER_POINTER (DECL_NAME (x)));

Should use "%qD" and "x" instead of pulling out IDENTIFIER_POINTER.

Otherwise ok.


r~

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27  8:26               ` PR middle-end/18160 Adam Nemet
  2004-10-27  9:52                 ` Joseph S. Myers
  2004-10-27 16:53                 ` Richard Henderson
@ 2004-10-27 17:35                 ` Giovanni Bajo
  2 siblings, 0 replies; 7+ messages in thread
From: Giovanni Bajo @ 2004-10-27 17:35 UTC (permalink / raw)
  To: Adam Nemet; +Cc: gcc-patches

Adam Nemet wrote:

> Andreas Schwab writes:
>> Adam Nemet <anemet@lnxw.com> writes:
>>> Should this be turned into an error too?
>> It violates a constraint in the standard.
>
> Thanks for all the comments.  Here is the patch to turn the testcase
> into an error.  It was regression tested on i686-pc-linux-gnu.

Would you please document this in http://gcc.gnu.org/gcc-4.0/changes.html? I
can see us getting bogus bug reports about this if we do not.

Giovanni Bajo


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27  9:57                   ` Eric Botcazou
@ 2004-10-27 22:57                     ` Adam Nemet
  2004-10-27 23:00                       ` Richard Henderson
  0 siblings, 1 reply; 7+ messages in thread
From: Adam Nemet @ 2004-10-27 22:57 UTC (permalink / raw)
  To: Eric Botcazou
  Cc: gcc, Joseph S. Myers, Andreas Schwab, Richard Henderson,
	gcc-patches, giovannibajo

The updated patch addresses the comments I received.

Let me know if it is still OK to commit.  I retested the patch.  I
will update changes.html in a separate patch.

Adam

2004-10-27  Adam Nemet  <anemet@lnxw.com> 
 
        PR middle-end/18160   
        * c-typeck.c (c_mark_addressable): Issue error if address of a
	register variable is taken.  Use "%qD" to print DECL_NAME. 

2004-10-27  Adam Nemet  <anemet@lnxw.com> 
 
        PR middle-end/18160   
        * gcc.dg/register-var-1.c: New test. 
        * gcc.dg/register-var-2.c: New test. 
        * gcc.dg/asm-7.c: Taking the address of a register variable is an 
        error now. 

Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.392
diff -c -p -r1.392 c-typeck.c
*** c-typeck.c	17 Oct 2004 22:01:19 -0000	1.392
--- c-typeck.c	27 Oct 2004 19:23:16 -0000
*************** c_mark_addressable (tree exp)
*** 2818,2825 ****
        case COMPONENT_REF:
  	if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
  	  {
! 	    error ("cannot take address of bit-field %qs",
! 		   IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
  	    return false;
  	  }
  
--- 2818,2825 ----
        case COMPONENT_REF:
  	if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
  	  {
! 	    error
! 	      ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
  	    return false;
  	  }
  
*************** c_mark_addressable (tree exp)
*** 2846,2869 ****
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
  	      {
! 		error ("global register variable %qs used in nested function",
! 		       IDENTIFIER_POINTER (DECL_NAME (x)));
  		return false;
  	      }
! 	    pedwarn ("register variable %qs used in nested function",
! 		     IDENTIFIER_POINTER (DECL_NAME (x)));
  	  }
  	else if (C_DECL_REGISTER (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      {
! 		error ("address of global register variable %qs requested",
! 		       IDENTIFIER_POINTER (DECL_NAME (x)));
! 		return false;
! 	      }
! 
! 	    pedwarn ("address of register variable %qs requested",
! 		     IDENTIFIER_POINTER (DECL_NAME (x)));
  	  }
  
  	/* drops in */
--- 2846,2864 ----
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
  	      {
! 		error
! 		  ("global register variable %qD used in nested function", x);
  		return false;
  	      }
! 	    pedwarn ("register variable %qD used in nested function", x);
  	  }
  	else if (C_DECL_REGISTER (x))
  	  {
  	    if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
! 	      error ("address of global register variable %qD requested", x);
! 	    else
! 	      error ("address of register variable %qD requested", x);
! 	    return false;
  	  }
  
  	/* drops in */
Index: testsuite/gcc.dg/register-var-1.c
===================================================================
RCS file: testsuite/gcc.dg/register-var-1.c
diff -N testsuite/gcc.dg/register-var-1.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.dg/register-var-1.c	27 Oct 2004 19:23:16 -0000
***************
*** 0 ****
--- 1,14 ----
+ /* PR/18160 */
+ 
+ /* { dg-do compile { target i?86-*-* } } */
+ 
+ /* This should yield an error even without -pedantic.  */
+ /* { dg-options "-ansi" } */
+ 
+ void g(int *);
+ 
+ void f(void) 
+ { 
+   register int x __asm ("eax");
+   g(&x);	/* { dg-error "error: address of register variable" } */
+ } 
Index: testsuite/gcc.dg/register-var-2.c
===================================================================
RCS file: testsuite/gcc.dg/register-var-2.c
diff -N testsuite/gcc.dg/register-var-2.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.dg/register-var-2.c	27 Oct 2004 19:23:16 -0000
***************
*** 0 ****
--- 1,14 ----
+ /* PR/18160 */
+ 
+ /* { dg-do compile } */
+ 
+ /* This should yield an error even without -pedantic.  */
+ /* { dg-options "-ansi" } */
+ 
+ void g(int *);
+ 
+ void f(void) 
+ { 
+   register int x;
+   g(&x);	/* { dg-error "error: address of register variable" } */
+ } 
Index: testsuite/gcc.dg/asm-7.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/asm-7.c,v
retrieving revision 1.4
diff -c -p -r1.4 asm-7.c
*** testsuite/gcc.dg/asm-7.c	13 May 2004 06:40:49 -0000	1.4
--- testsuite/gcc.dg/asm-7.c	27 Oct 2004 19:23:16 -0000
*************** void test(void)
*** 9,15 ****
    static int m;
    int *p;
  
!   __asm__ ("" : : "m"(r));	/* { dg-warning "address of register" } */
    __asm__ ("" : : "m"(i));
    __asm__ ("" : : "m"(m));
    __asm__ ("" : : "m"(0));	/* { dg-error "" } */
--- 9,15 ----
    static int m;
    int *p;
  
!   __asm__ ("" : : "m"(r));	/* { dg-error "" } */
    __asm__ ("" : : "m"(i));
    __asm__ ("" : : "m"(m));
    __asm__ ("" : : "m"(0));	/* { dg-error "" } */
*************** void test(void)
*** 22,28 ****
    __asm__ ("" : : "g"(0));
    __asm__ ("" : : "g"(i+1));
  
!   __asm__ ("" : "=m"(r2));	/* { dg-warning "address of register" } */
    __asm__ ("" : "=m"(i));
    __asm__ ("" : "=m"(m));
  }
--- 22,28 ----
    __asm__ ("" : : "g"(0));
    __asm__ ("" : : "g"(i+1));
  
!   __asm__ ("" : "=m"(r2));	/* { dg-error "" } */
    __asm__ ("" : "=m"(i));
    __asm__ ("" : "=m"(m));
  }

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: PR middle-end/18160
  2004-10-27 22:57                     ` Adam Nemet
@ 2004-10-27 23:00                       ` Richard Henderson
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2004-10-27 23:00 UTC (permalink / raw)
  To: Adam Nemet
  Cc: Eric Botcazou, gcc, Joseph S. Myers, Andreas Schwab, gcc-patches,
	giovannibajo

On Wed, Oct 27, 2004 at 03:54:44PM -0700, Adam Nemet wrote:
>         PR middle-end/18160   
>         * c-typeck.c (c_mark_addressable): Issue error if address of a
> 	register variable is taken.  Use "%qD" to print DECL_NAME. 

Ok.


r~

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-10-27 22:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <16766.43717.959860.195034@anemet1.lynx.com>
     [not found] ` <20041026195203.GA15086@redhat.com>
     [not found]   ` <16766.46685.198957.191723@anemet1.lynx.com>
     [not found]     ` <20041026202657.GA15269@redhat.com>
     [not found]       ` <16766.54682.82730.11990@anemet1.lynx.com>
     [not found]         ` <20041026224419.GA15592@redhat.com>
     [not found]           ` <16766.57917.483995.480374@anemet1.lynx.com>
     [not found]             ` <jehdohgh9z.fsf@sykes.suse.de>
2004-10-27  8:26               ` PR middle-end/18160 Adam Nemet
2004-10-27  9:52                 ` Joseph S. Myers
2004-10-27  9:57                   ` Eric Botcazou
2004-10-27 22:57                     ` Adam Nemet
2004-10-27 23:00                       ` Richard Henderson
2004-10-27 16:53                 ` Richard Henderson
2004-10-27 17:35                 ` Giovanni Bajo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).