Patchwork Emit error for negative _Alignas alignment values

login
register
mail settings
Submitter Senthil Kumar Selvaraj
Date April 25, 2013, 6:40 a.m.
Message ID <20130425064003.GA773@atmel.com>
Download mbox | patch
Permalink /patch/239403/
State New
Headers show

Comments

Senthil Kumar Selvaraj - April 25, 2013, 6:40 a.m.
On Wed, Apr 24, 2013 at 03:18:51PM +0000, Joseph S. Myers wrote:
> On Wed, 3 Apr 2013, Senthil Kumar Selvaraj wrote:
> 
> > 2013-04-03	Senthil Kumar Selvaraj	<senthil_kumar.selvaraj@atmel.com>
> > 
> > 	* c-common.c (check_user_alignment): Emit error for negative values
> >     
> > 	* gcc.dg/c1x-align-3.c: Add test for negative power of 2
> 
> OK (but note there should be a "." at the end of each ChangeLog entry).
> 

Fixed now. I also moved the test case change into its own Changelog. Could
someone commit it for me please, as I don't have commit access?

Regards
Senthil

gcc/c-family/ChangeLog

2013-04-03  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>

	* c-common.c (check_user_alignment): Emit error for negative values.

gcc/testsuite/ChangeLog

2013-04-03  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>

	* gcc.dg/c1x-align-3.c: Add test for negative power of 2.
Senthil Kumar Selvaraj - April 29, 2013, 1:06 p.m.
Ping - could you commit it for me please, I don't have commit
access.

Regards
Senthil

On Thu, Apr 25, 2013 at 12:10:06PM +0530, Senthil Kumar Selvaraj wrote:
> On Wed, Apr 24, 2013 at 03:18:51PM +0000, Joseph S. Myers wrote:
> > On Wed, 3 Apr 2013, Senthil Kumar Selvaraj wrote:
> > 
> > > 2013-04-03	Senthil Kumar Selvaraj	<senthil_kumar.selvaraj@atmel.com>
> > > 
> > > 	* c-common.c (check_user_alignment): Emit error for negative values
> > >     
> > > 	* gcc.dg/c1x-align-3.c: Add test for negative power of 2
> > 
> > OK (but note there should be a "." at the end of each ChangeLog entry).
> > 
> 
> Fixed now. I also moved the test case change into its own Changelog. Could
> someone commit it for me please, as I don't have commit access?
> 
> Regards
> Senthil
> 
> gcc/c-family/ChangeLog
> 
> 2013-04-03  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
> 
> 	* c-common.c (check_user_alignment): Emit error for negative values.
> 
> gcc/testsuite/ChangeLog
> 
> 2013-04-03  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
> 
> 	* gcc.dg/c1x-align-3.c: Add test for negative power of 2.
> 
> 
> diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c
> index c7cdd0f..dfdfbb6 100644
> --- gcc/c-family/c-common.c
> +++ gcc/c-family/c-common.c
> @@ -7308,9 +7308,10 @@ check_user_alignment (const_tree align, bool allow_zero)
>      }
>    else if (allow_zero && integer_zerop (align))
>      return -1;
> -  else if ((i = tree_log2 (align)) == -1)
> +  else if (tree_int_cst_sgn (align) == -1
> +           || (i = tree_log2 (align)) == -1)
>      {
> -      error ("requested alignment is not a power of 2");
> +      error ("requested alignment is not a positive power of 2");
>        return -1;
>      }
>    else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
> diff --git gcc/testsuite/gcc.dg/c1x-align-3.c gcc/testsuite/gcc.dg/c1x-align-3.c
> index 0b2a77f..b97351c 100644
> --- gcc/testsuite/gcc.dg/c1x-align-3.c
> +++ gcc/testsuite/gcc.dg/c1x-align-3.c
> @@ -23,6 +23,7 @@ _Alignas (-(__LONG_LONG_MAX__-1)/4) char i3; /* { dg-error "too large|power of 2
>  _Alignas (-(__LONG_LONG_MAX__-1)/8) char i4; /* { dg-error "too large|power of 2" } */
>  _Alignas (-(__LONG_LONG_MAX__-1)/16) char i5; /* { dg-error "too large|power of 2" } */
>  _Alignas (-1) char j; /* { dg-error "power of 2" } */
> +_Alignas (-2) char j; /* { dg-error "positive power of 2" } */
>  _Alignas (3) char k; /* { dg-error "power of 2" } */
> 
>  _Alignas ((void *) 1) char k; /* { dg-error "integer constant" } */
Joseph S. Myers - April 29, 2013, 1:28 p.m.
On Thu, 25 Apr 2013, Senthil Kumar Selvaraj wrote:

> On Wed, Apr 24, 2013 at 03:18:51PM +0000, Joseph S. Myers wrote:
> > On Wed, 3 Apr 2013, Senthil Kumar Selvaraj wrote:
> > 
> > > 2013-04-03	Senthil Kumar Selvaraj	<senthil_kumar.selvaraj@atmel.com>
> > > 
> > > 	* c-common.c (check_user_alignment): Emit error for negative values
> > >     
> > > 	* gcc.dg/c1x-align-3.c: Add test for negative power of 2
> > 
> > OK (but note there should be a "." at the end of each ChangeLog entry).
> > 
> 
> Fixed now. I also moved the test case change into its own Changelog. Could
> someone commit it for me please, as I don't have commit access?

Thanks, committed.

Patch

diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c
index c7cdd0f..dfdfbb6 100644
--- gcc/c-family/c-common.c
+++ gcc/c-family/c-common.c
@@ -7308,9 +7308,10 @@  check_user_alignment (const_tree align, bool allow_zero)
     }
   else if (allow_zero && integer_zerop (align))
     return -1;
-  else if ((i = tree_log2 (align)) == -1)
+  else if (tree_int_cst_sgn (align) == -1
+           || (i = tree_log2 (align)) == -1)
     {
-      error ("requested alignment is not a power of 2");
+      error ("requested alignment is not a positive power of 2");
       return -1;
     }
   else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
diff --git gcc/testsuite/gcc.dg/c1x-align-3.c gcc/testsuite/gcc.dg/c1x-align-3.c
index 0b2a77f..b97351c 100644
--- gcc/testsuite/gcc.dg/c1x-align-3.c
+++ gcc/testsuite/gcc.dg/c1x-align-3.c
@@ -23,6 +23,7 @@  _Alignas (-(__LONG_LONG_MAX__-1)/4) char i3; /* { dg-error "too large|power of 2
 _Alignas (-(__LONG_LONG_MAX__-1)/8) char i4; /* { dg-error "too large|power of 2" } */
 _Alignas (-(__LONG_LONG_MAX__-1)/16) char i5; /* { dg-error "too large|power of 2" } */
 _Alignas (-1) char j; /* { dg-error "power of 2" } */
+_Alignas (-2) char j; /* { dg-error "positive power of 2" } */
 _Alignas (3) char k; /* { dg-error "power of 2" } */

 _Alignas ((void *) 1) char k; /* { dg-error "integer constant" } */