linux-alpha.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
       [not found]                 ` <CA+8MBbJkGN+zGBdD5Hg26wW_6E9L_ufoutn7wj+Y+nhtW7WKWg@mail.gmail.com>
@ 2012-08-02 15:02                   ` Fengguang Wu
  2012-08-12  1:33                     ` Michael Cree
  0 siblings, 1 reply; 7+ messages in thread
From: Fengguang Wu @ 2012-08-02 15:02 UTC (permalink / raw)
  To: linux-alpha
  Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Tony Luck,
	James Bottomley, John David Anglin, Mel Gorman, kernel-janitors,
	Kyle McMartin, Andrew Morton, LKML, Parisc List

On Thu, Jul 26, 2012 at 10:06:41AM -0700, Tony Luck wrote:
> On Tue, Jul 24, 2012 at 10:10 PM, James Bottomley
> <James.Bottomley@hansenpartnership.com> wrote:
> >> Here is the line in sock.i:
> >>
> >> struct static_key memalloc_socks = ((struct static_key) { .enabled =
> >> ((atomic_t) { (0) }) });
> >
> > The above line contains two compound literals.  It also uses a designated
> > initializer to initialize the field enabled.  A compound literal is not a
> > constant expression.
> 
> Seeing the same thing on ia64 building next-20120726.  Same fix works
> for me ... so I'll steal this whole changelog and attributes.

I got the same error for alpha, the same fix applies.
---
From: Mel Gorman <mgorman@suse.de>
Subject: [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts

The following build error occurred during an alpha build:

net/core/sock.c:274:36: error: initializer element is not constant

Dave Anglin says:
> Here is the line in sock.i:
>
> struct static_key memalloc_socks = ((struct static_key) { .enabled =
> ((atomic_t) { (0) }) });

The above line contains two compound literals.  It also uses a designated
initializer to initialize the field enabled.  A compound literal is not a
constant expression.

The location of the above statement isn't fully clear, but if a compound
literal occurs outside the body of a function, the initializer list must
consist of constant expressions.

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Mel Gorman <mgorman@suse.de>
Cc: <stable@vger.kernel.org>
---
 arch/alpha/include/asm/atomic.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- linux.orig/arch/alpha/include/asm/atomic.h	2012-05-24 19:03:06.000000000 +0800
+++ linux/arch/alpha/include/asm/atomic.h	2012-08-02 23:01:02.243224220 +0800
@@ -14,8 +14,8 @@
  */
 
 
-#define ATOMIC_INIT(i)		( (atomic_t) { (i) } )
-#define ATOMIC64_INIT(i)	( (atomic64_t) { (i) } )
+#define ATOMIC_INIT(i)		( { (i) } )
+#define ATOMIC64_INIT(i)	( { (i) } )
 
 #define atomic_read(v)		(*(volatile int *)&(v)->counter)
 #define atomic64_read(v)	(*(volatile long *)&(v)->counter)

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

* Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
  2012-08-02 15:02                   ` [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant Fengguang Wu
@ 2012-08-12  1:33                     ` Michael Cree
  2012-08-12  2:10                       ` Fengguang Wu
  2012-08-12  2:14                       ` [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts Fengguang Wu
  0 siblings, 2 replies; 7+ messages in thread
From: Michael Cree @ 2012-08-12  1:33 UTC (permalink / raw)
  To: Fengguang Wu
  Cc: linux-alpha, Richard Henderson, Ivan Kokshaysky, Matt Turner,
	Tony Luck, James Bottomley, John David Anglin, Mel Gorman,
	kernel-janitors, Kyle McMartin, Andrew Morton, LKML, Parisc List

On 03/08/12 03:02, Fengguang Wu wrote:
> On Thu, Jul 26, 2012 at 10:06:41AM -0700, Tony Luck wrote:
>> On Tue, Jul 24, 2012 at 10:10 PM, James Bottomley
>> <James.Bottomley@hansenpartnership.com> wrote:
>>>> Here is the line in sock.i:
>>>>
>>>> struct static_key memalloc_socks = ((struct static_key) { .enabled =
>>>> ((atomic_t) { (0) }) });
>>>
>>> The above line contains two compound literals.  It also uses a designated
>>> initializer to initialize the field enabled.  A compound literal is not a
>>> constant expression.
>>
>> Seeing the same thing on ia64 building next-20120726.  Same fix works
>> for me ... so I'll steal this whole changelog and attributes.
> 
> I got the same error for alpha, the same fix applies.

Just trying this patch on Alpha against v3.6-rc1 and it leads to new
compilation errors, namely:

init/init_task.c:12: error: braced-group within expression allowed only
inside a function
init/init_task.c:13: error: braced-group within expression allowed only
inside a function
init/init_task.c:16: error: braced-group within expression allowed only
inside a function
init/init_task.c:16: error: braced-group within expression allowed only
inside a function
make[1]: *** [init/init_task.o] Error 1

> ---
> From: Mel Gorman <mgorman@suse.de>
> Subject: [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts
> 
> The following build error occurred during an alpha build:
> 
> net/core/sock.c:274:36: error: initializer element is not constant
> 
> Dave Anglin says:
>> Here is the line in sock.i:
>>
>> struct static_key memalloc_socks = ((struct static_key) { .enabled =
>> ((atomic_t) { (0) }) });
> 
> The above line contains two compound literals.  It also uses a designated
> initializer to initialize the field enabled.  A compound literal is not a
> constant expression.
> 
> The location of the above statement isn't fully clear, but if a compound
> literal occurs outside the body of a function, the initializer list must
> consist of constant expressions.
> 
> Reported-by: Fengguang Wu <fengguang.wu@intel.com>
> Signed-off-by: Mel Gorman <mgorman@suse.de>
> Cc: <stable@vger.kernel.org>
> ---
>  arch/alpha/include/asm/atomic.h |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> --- linux.orig/arch/alpha/include/asm/atomic.h	2012-05-24 19:03:06.000000000 +0800
> +++ linux/arch/alpha/include/asm/atomic.h	2012-08-02 23:01:02.243224220 +0800
> @@ -14,8 +14,8 @@
>   */
>  
>  
> -#define ATOMIC_INIT(i)		( (atomic_t) { (i) } )
> -#define ATOMIC64_INIT(i)	( (atomic64_t) { (i) } )
> +#define ATOMIC_INIT(i)		( { (i) } )
> +#define ATOMIC64_INIT(i)	( { (i) } )
>  
>  #define atomic_read(v)		(*(volatile int *)&(v)->counter)
>  #define atomic64_read(v)	(*(volatile long *)&(v)->counter)

Cheers
Michael.

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

* Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
  2012-08-12  1:33                     ` Michael Cree
@ 2012-08-12  2:10                       ` Fengguang Wu
  2012-08-12  2:42                         ` Michael Cree
  2012-08-12  2:14                       ` [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts Fengguang Wu
  1 sibling, 1 reply; 7+ messages in thread
From: Fengguang Wu @ 2012-08-12  2:10 UTC (permalink / raw)
  To: Michael Cree
  Cc: linux-alpha, Richard Henderson, Ivan Kokshaysky, Matt Turner,
	Tony Luck, James Bottomley, John David Anglin, Mel Gorman,
	kernel-janitors, Kyle McMartin, Andrew Morton, LKML, Parisc List

On Sun, Aug 12, 2012 at 01:33:09PM +1200, Michael Cree wrote:
> On 03/08/12 03:02, Fengguang Wu wrote:
> > On Thu, Jul 26, 2012 at 10:06:41AM -0700, Tony Luck wrote:
> >> On Tue, Jul 24, 2012 at 10:10 PM, James Bottomley
> >> <James.Bottomley@hansenpartnership.com> wrote:
> >>>> Here is the line in sock.i:
> >>>>
> >>>> struct static_key memalloc_socks = ((struct static_key) { .enabled =
> >>>> ((atomic_t) { (0) }) });
> >>>
> >>> The above line contains two compound literals.  It also uses a designated
> >>> initializer to initialize the field enabled.  A compound literal is not a
> >>> constant expression.
> >>
> >> Seeing the same thing on ia64 building next-20120726.  Same fix works
> >> for me ... so I'll steal this whole changelog and attributes.
> > 
> > I got the same error for alpha, the same fix applies.
> 
> Just trying this patch on Alpha against v3.6-rc1 and it leads to new
> compilation errors, namely:
> 
> init/init_task.c:12: error: braced-group within expression allowed only
> inside a function
> init/init_task.c:13: error: braced-group within expression allowed only
> inside a function
> init/init_task.c:16: error: braced-group within expression allowed only
> inside a function
> init/init_task.c:16: error: braced-group within expression allowed only
> inside a function
> make[1]: *** [init/init_task.o] Error 1

Sorry! This will actually compile:

-#define ATOMIC_INIT(i)         ( { (i) } )
+#define ATOMIC_INIT(i)         { (i) }

Ditto for the 64bit version. I'll send the updated patch.

Thanks,
Fengguang

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

* [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts
  2012-08-12  1:33                     ` Michael Cree
  2012-08-12  2:10                       ` Fengguang Wu
@ 2012-08-12  2:14                       ` Fengguang Wu
  2012-08-15 22:03                         ` Andrew Morton
  1 sibling, 1 reply; 7+ messages in thread
From: Fengguang Wu @ 2012-08-12  2:14 UTC (permalink / raw)
  To: Michael Cree
  Cc: linux-alpha, Richard Henderson, Ivan Kokshaysky, Matt Turner,
	Tony Luck, James Bottomley, John David Anglin, Mel Gorman,
	kernel-janitors, Kyle McMartin, Andrew Morton, LKML, Parisc List

From: Mel Gorman <mgorman@suse.de>

The following build error occurred during an alpha build:

net/core/sock.c:274:36: error: initializer element is not constant

Dave Anglin says:
> Here is the line in sock.i:
>
> struct static_key memalloc_socks = ((struct static_key) { .enabled =
> ((atomic_t) { (0) }) });

The above line contains two compound literals.  It also uses a designated
initializer to initialize the field enabled.  A compound literal is not a
constant expression.

The location of the above statement isn't fully clear, but if a compound
literal occurs outside the body of a function, the initializer list must
consist of constant expressions.

Cc: <stable@vger.kernel.org>
Signed-off-by: Mel Gorman <mgorman@suse.de>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---
 arch/alpha/include/asm/atomic.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- linux.orig/arch/alpha/include/asm/atomic.h	2012-08-12 10:12:36.667523339 +0800
+++ linux/arch/alpha/include/asm/atomic.h	2012-08-12 10:12:37.659523362 +0800
@@ -14,8 +14,8 @@
  */
 
 
-#define ATOMIC_INIT(i)		( (atomic_t) { (i) } )
-#define ATOMIC64_INIT(i)	( (atomic64_t) { (i) } )
+#define ATOMIC_INIT(i)		{ (i) }
+#define ATOMIC64_INIT(i)	{ (i) }
 
 #define atomic_read(v)		(*(volatile int *)&(v)->counter)
 #define atomic64_read(v)	(*(volatile long *)&(v)->counter)

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

* Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
  2012-08-12  2:10                       ` Fengguang Wu
@ 2012-08-12  2:42                         ` Michael Cree
  2012-08-12 13:00                           ` John David Anglin
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Cree @ 2012-08-12  2:42 UTC (permalink / raw)
  To: Fengguang Wu
  Cc: linux-alpha, Richard Henderson, Ivan Kokshaysky, Matt Turner,
	Tony Luck, James Bottomley, John David Anglin, Mel Gorman,
	kernel-janitors, Kyle McMartin, Andrew Morton, LKML, Parisc List

On 12/08/12 14:10, Fengguang Wu wrote:
> On Sun, Aug 12, 2012 at 01:33:09PM +1200, Michael Cree wrote:
>> On 03/08/12 03:02, Fengguang Wu wrote:
>>> On Thu, Jul 26, 2012 at 10:06:41AM -0700, Tony Luck wrote:
>>>> On Tue, Jul 24, 2012 at 10:10 PM, James Bottomley
>>>> <James.Bottomley@hansenpartnership.com> wrote:
>>>>>> Here is the line in sock.i:
>>>>>>
>>>>>> struct static_key memalloc_socks = ((struct static_key) { .enabled =
>>>>>> ((atomic_t) { (0) }) });
>>>>>
>>>>> The above line contains two compound literals.  It also uses a designated
>>>>> initializer to initialize the field enabled.  A compound literal is not a
>>>>> constant expression.
>>>>
>>>> Seeing the same thing on ia64 building next-20120726.  Same fix works
>>>> for me ... so I'll steal this whole changelog and attributes.
>>>
>>> I got the same error for alpha, the same fix applies.
>>
>> Just trying this patch on Alpha against v3.6-rc1 and it leads to new
>> compilation errors, namely:
>>
>> init/init_task.c:12: error: braced-group within expression allowed only
>> inside a function
>> init/init_task.c:13: error: braced-group within expression allowed only
>> inside a function
>> init/init_task.c:16: error: braced-group within expression allowed only
>> inside a function
>> init/init_task.c:16: error: braced-group within expression allowed only
>> inside a function
>> make[1]: *** [init/init_task.o] Error 1
> 
> Sorry! This will actually compile:
> 
> -#define ATOMIC_INIT(i)         ( { (i) } )
> +#define ATOMIC_INIT(i)         { (i) }

Thanks, it now compiles correctly.  I'm currently collecting Alpha
patches to send on to Linus so will include this one.

Cheers
Michael.

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

* Re: [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant
  2012-08-12  2:42                         ` Michael Cree
@ 2012-08-12 13:00                           ` John David Anglin
  0 siblings, 0 replies; 7+ messages in thread
From: John David Anglin @ 2012-08-12 13:00 UTC (permalink / raw)
  To: Michael Cree
  Cc: Fengguang Wu, linux-alpha, Richard Henderson, Ivan Kokshaysky,
	Matt Turner, Tony Luck, James Bottomley, Mel Gorman,
	kernel-janitors, Kyle McMartin, Andrew Morton, LKML, Parisc List

[-- Attachment #1: Type: text/plain, Size: 1940 bytes --]

On 11-Aug-12, at 10:42 PM, Michael Cree wrote:

> On 12/08/12 14:10, Fengguang Wu wrote:
>> On Sun, Aug 12, 2012 at 01:33:09PM +1200, Michael Cree wrote:
>>> On 03/08/12 03:02, Fengguang Wu wrote:
>>>> On Thu, Jul 26, 2012 at 10:06:41AM -0700, Tony Luck wrote:
>>>>> On Tue, Jul 24, 2012 at 10:10 PM, James Bottomley
>>>>> <James.Bottomley@hansenpartnership.com> wrote:
>>>>>>> Here is the line in sock.i:
>>>>>>>
>>>>>>> struct static_key memalloc_socks = ((struct static_key)  
>>>>>>> { .enabled =
>>>>>>> ((atomic_t) { (0) }) });
>>>>>>
>>>>>> The above line contains two compound literals.  It also uses a  
>>>>>> designated
>>>>>> initializer to initialize the field enabled.  A compound  
>>>>>> literal is not a
>>>>>> constant expression.
>>>>>
>>>>> Seeing the same thing on ia64 building next-20120726.  Same fix  
>>>>> works
>>>>> for me ... so I'll steal this whole changelog and attributes.
>>>>
>>>> I got the same error for alpha, the same fix applies.
>>>
>>> Just trying this patch on Alpha against v3.6-rc1 and it leads to new
>>> compilation errors, namely:
>>>
>>> init/init_task.c:12: error: braced-group within expression allowed  
>>> only
>>> inside a function
>>> init/init_task.c:13: error: braced-group within expression allowed  
>>> only
>>> inside a function
>>> init/init_task.c:16: error: braced-group within expression allowed  
>>> only
>>> inside a function
>>> init/init_task.c:16: error: braced-group within expression allowed  
>>> only
>>> inside a function
>>> make[1]: *** [init/init_task.o] Error 1
>>
>> Sorry! This will actually compile:
>>
>> -#define ATOMIC_INIT(i)         ( { (i) } )
>> +#define ATOMIC_INIT(i)         { (i) }
>
> Thanks, it now compiles correctly.  I'm currently collecting Alpha
> patches to send on to Linus so will include this one.


A similar change applied to 3.5.1 stable compiles successfully
on parisc.

Regards,
Dave
--
John David Anglin	dave.anglin@bell.net



[-- Attachment #2: atomic.h.d.txt --]
[-- Type: text/plain, Size: 787 bytes --]

diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h
index 6c6defc..af9cf30 100644
--- a/arch/parisc/include/asm/atomic.h
+++ b/arch/parisc/include/asm/atomic.h
@@ -141,7 +141,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
 
 #define atomic_sub_and_test(i,v)	(atomic_sub_return((i),(v)) == 0)
 
-#define ATOMIC_INIT(i)	((atomic_t) { (i) })
+#define ATOMIC_INIT(i)	{ (i) }
 
 #define smp_mb__before_atomic_dec()	smp_mb()
 #define smp_mb__after_atomic_dec()	smp_mb()
@@ -150,7 +150,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
 
 #ifdef CONFIG_64BIT
 
-#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
+#define ATOMIC64_INIT(i) { (i) }
 
 static __inline__ s64
 __atomic64_add_return(s64 i, atomic64_t *v)

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

* Re: [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts
  2012-08-12  2:14                       ` [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts Fengguang Wu
@ 2012-08-15 22:03                         ` Andrew Morton
  0 siblings, 0 replies; 7+ messages in thread
From: Andrew Morton @ 2012-08-15 22:03 UTC (permalink / raw)
  To: Fengguang Wu
  Cc: Michael Cree, linux-alpha, Richard Henderson, Ivan Kokshaysky,
	Matt Turner, Tony Luck, James Bottomley, John David Anglin,
	Mel Gorman, kernel-janitors, Kyle McMartin, LKML, Parisc List,
	David Miller

On Sun, 12 Aug 2012 10:14:05 +0800
Fengguang Wu <fengguang.wu@intel.com> wrote:

> From: Mel Gorman <mgorman@suse.de>
> 
> The following build error occurred during an alpha build:
> 
> net/core/sock.c:274:36: error: initializer element is not constant
> 
> Dave Anglin says:
> > Here is the line in sock.i:
> >
> > struct static_key memalloc_socks = ((struct static_key) { .enabled =
> > ((atomic_t) { (0) }) });
> 
> The above line contains two compound literals.  It also uses a designated
> initializer to initialize the field enabled.  A compound literal is not a
> constant expression.
> 
> The location of the above statement isn't fully clear, but if a compound
> literal occurs outside the body of a function, the initializer list must
> consist of constant expressions.
> 
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Mel Gorman <mgorman@suse.de>
> Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>

I'll remvoe the Cc:stable from this one - the regression is post-3.5.

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

end of thread, other threads:[~2012-08-15 22:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20120722163058.GB13376@localhost>
     [not found] ` <20120723111619.GT9222@suse.de>
     [not found]   ` <1343042420.3027.11.camel@dabdike.int.hansenpartnership.com>
     [not found]     ` <20120723114258.GV9222@suse.de>
     [not found]       ` <20120723122905.GA22476@localhost>
     [not found]         ` <BLU0-SMTP2254F8872DDE5FA6035CDE97DD0@phx.gbl>
     [not found]           ` <20120724074844.GA9519@localhost>
     [not found]             ` <BLU0-SMTP6C7CFCFF734FE10A39B6E97DC0@phx.gbl>
     [not found]               ` <1343193053.3139.6.camel@dabdike>
     [not found]                 ` <CA+8MBbJkGN+zGBdD5Hg26wW_6E9L_ufoutn7wj+Y+nhtW7WKWg@mail.gmail.com>
2012-08-02 15:02                   ` [next:akpm 129/309] net/core/sock.c:274:36: error: initializer element is not constant Fengguang Wu
2012-08-12  1:33                     ` Michael Cree
2012-08-12  2:10                       ` Fengguang Wu
2012-08-12  2:42                         ` Michael Cree
2012-08-12 13:00                           ` John David Anglin
2012-08-12  2:14                       ` [PATCH] [ALPHA] Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts Fengguang Wu
2012-08-15 22:03                         ` Andrew Morton

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 NNTP newsgroup(s).