This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch] Emit error for negative _Alignas alignment values
- From: Senthil Kumar Selvaraj <senthil_kumar dot selvaraj at atmel dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: <gcc-patches at gcc dot gnu dot org>, <rth at redhat dot com>
- Date: Thu, 25 Apr 2013 12:10:06 +0530
- Subject: Re: [Patch] Emit error for negative _Alignas alignment values
- References: <20130403134820 dot GA796 at atmel dot com> <Pine dot LNX dot 4 dot 64 dot 1304241518050 dot 16169 at digraph dot polyomino dot org dot uk>
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" } */