Skip to contentSkip to conversation

kernel/sched.c: Fix array initialization typo

PATCH In review Jean Sacren 5 participants 7 messages Jun 12, 2011 – Jun 14, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kernel/sched.c: Fix array initialization typo

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

---
 kernel/sched.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
kernel/sched.c +2 -2
index c164920..c29ddd0 100644
@@ -1383,7 +1383,7 @@ static const int prio_to_weight[40] = {
  /*   0 */      1024,       820,       655,       526,       423,
  /*   5 */       335,       272,       215,       172,       137,
  /*  10 */       110,        87,        70,        56,        45,
- /*  15 */        36,        29,        23,        18,        15,
+ /*  15 */        36,        29,        23,        18,        15
 };
 
 /*
@@ -1401,7 +1401,7 @@ static const u32 prio_to_wmult[40] = {
  /*   0 */   4194304,   5237765,   6557202,   8165337,  10153587,
  /*   5 */  12820798,  15790321,  19976592,  24970740,  31350126,
  /*  10 */  39045157,  49367440,  61356676,  76695844,  95443717,
- /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153,
+ /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153
 };
 
 /* Time spent by the tasks of the cpu accounting group executing in ... */
Signature · 4 lines
1.7.2.2

-- 
Jean Sacren
#1 lore raw
Quoted 2 lines · Jean Sacren

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

Why would it possibly do that?

And it's not a typo.

Quoted 16 lines
kernel/sched.c +2 -2
@@ -1383,7 +1383,7 @@ static const int prio_to_weight[40] = {
  /*   0 */      1024,       820,       655,       526,       423,
  /*   5 */       335,       272,       215,       172,       137,
  /*  10 */       110,        87,        70,        56,        45,
- /*  15 */        36,        29,        23,        18,        15,
+ /*  15 */        36,        29,        23,        18,        15
 };
 
 /*
@@ -1401,7 +1401,7 @@ static const u32 prio_to_wmult[40] = {
  /*   0 */   4194304,   5237765,   6557202,   8165337,  10153587,
  /*   5 */  12820798,  15790321,  19976592,  24970740,  31350126,
  /*  10 */  39045157,  49367440,  61356676,  76695844,  95443717,
- /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153,
+ /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153
 };
#2 lore raw

From: Alexey Dobriyan <[email protected]>
Date: Mon, 13 Jun 2011 00:35:49 +0300

Quoted 6 lines · Jean Sacren
Quoted 2 lines

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

Why would it possibly do that?

With that ',' comma, doesn't it imply there might be the 41st element in the array? Despite the fact that that element is bogus.

Further, if the comma is there, what's the benefit? I know you're cool, but is it cool in code that way as well?

Quoted 2 lines

And it's not a typo.

What is it then?

Quoted 17 lines
Quoted 17 lines
kernel/sched.c +2 -2
@@ -1383,7 +1383,7 @@ static const int prio_to_weight[40] = {
  /*   0 */      1024,       820,       655,       526,       423,
  /*   5 */       335,       272,       215,       172,       137,
  /*  10 */       110,        87,        70,        56,        45,
- /*  15 */        36,        29,        23,        18,        15,
+ /*  15 */        36,        29,        23,        18,        15
 };
 
 /*
@@ -1401,7 +1401,7 @@ static const u32 prio_to_wmult[40] = {
  /*   0 */   4194304,   5237765,   6557202,   8165337,  10153587,
  /*   5 */  12820798,  15790321,  19976592,  24970740,  31350126,
  /*  10 */  39045157,  49367440,  61356676,  76695844,  95443717,
- /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153,
+ /*  15 */ 119304647, 148102320, 186737708, 238609294, 286331153
 };
Signature · 1 line
Jean Sacren
#3 lore raw
Quoted 11 lines · Jean Sacren

From: Alexey Dobriyan <[email protected]>
Date: Mon, 13 Jun 2011 00:35:49 +0300

Quoted 6 lines · Jean Sacren
Quoted 2 lines

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

Why would it possibly do that?

With that ',' comma, doesn't it imply there might be the 41st element in the array?

No, that's not how C works.

Quoted 1 line

Despite the fact that that element is bogus.

It's not bogus, it's utterly cromulent. Trailing comma on array initializer was mentioned in the original K&R and is explicitly endorsed by ISO/IEC 9899:1999 6.7.8 paragraph 1.

Quoted 6 lines

Further, if the comma is there, what's the benefit? I know you're cool, but is it cool in code that way as well?

Quoted 2 lines

And it's not a typo.

What is it then?

It is a standard C idiom for defining array contents. If you write

int x[] = {
    1,
    2,
    3
};

then when I add a fourth element to your array, I have to modify two lines, and the diff will say

-    3
+    3,
+    4

};

whereas if you wrote "3," as the last line of the initializer, the diff would be one line long.

Furthermore, spot the error in this diff:

@@ -3,4 +3,5 @@ char *x[] = {
     "quick",
     "brown",
     "fox"

+ "jumped"
};

HTH, HAND,
-andy

#4 lore raw
Quoted 21 lines · On Sun, 12 Jun 2011 16:09:01 -0700 Andy Isaacson wrote:
Quoted 11 lines · Jean Sacren

From: Alexey Dobriyan <[email protected]>
Date: Mon, 13 Jun 2011 00:35:49 +0300

Quoted 6 lines · Jean Sacren
Quoted 2 lines

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

Why would it possibly do that?

With that ',' comma, doesn't it imply there might be the 41st element in the array?

No, that's not how C works.

Quoted 1 line

Despite the fact that that element is bogus.

It's not bogus, it's utterly cromulent. Trailing comma on array initializer was mentioned in the original K&R and is explicitly endorsed by ISO/IEC 9899:1999 6.7.8 paragraph 1.

Quoted 8 lines
Quoted 6 lines

Further, if the comma is there, what's the benefit? I know you're cool, but is it cool in code that way as well?

Quoted 2 lines

And it's not a typo.

What is it then?

It is a standard C idiom for defining array contents. If you write

ack. I once worked on on OS where the common idiom for array inits was:

int x[] = {
	1

, 2
, 3
};

so that additions only required one line of change.

Quoted 19 lines
int x[] = {
    1,
    2,
    3
};

then when I add a fourth element to your array, I have to modify two lines, and the diff will say

(quoted diff) +2 -1
-    3
+    3,
+    4
 };

whereas if you wrote "3," as the last line of the initializer, the diff would be one line long.

Furthermore, spot the error in this diff:

Review char *x[] = { · line 7

Quoted 5 lines
(quoted diff) +1 -0
@@ -3,4 +3,5 @@ char *x[] = {
     "quick",
     "brown",
     "fox"
+    "jumped"
 };

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#5 lore raw
In reply to Andy Isaacson

From: Andy Isaacson <[email protected]>
Date: Sun, 12 Jun 2011 16:09:01 -0700

Quoted 15 lines

It is a standard C idiom for defining array contents. If you write

int x[] = {
    1,
    2,
    3
};

then when I add a fourth element to your array, I have to modify two lines, and the diff will say

(quoted diff) +2 -1
-    3
+    3,
+    4
 };
Quoted 2 lines

whereas if you wrote "3," as the last line of the initializer, the diff would be one line long.

I don't know how to thank you for this. Apparently the patch is bogus.

Quoted 12 lines

Furthermore, spot the error in this diff:

(quoted diff) +1 -0
@@ -3,4 +3,5 @@ char *x[] = {
     "quick",
     "brown",
     "fox"
+    "jumped"
 };

HTH, HAND,
-andy

Signature · 1 line
Jean Sacren
#6 lore raw
In reply to Jean Sacren
Quoted 2 lines · Jean Sacren

The fix makes certain so that the size of the initialized arrays doesn't go beyond the boundary set by the array size of 40.

Did you notice that gcc as far back as 3.4.6 will whinge *anyhow* if you have too many initializers?

% cat > test9.c
int foo[5] = { 0, 1, 2, 3, 4, 5, 6};
^D
% gcc -c test9.c
test9.c:1:1: warning: excess elements in array initializer [enabled by default] test9.c:1:1: warning: (near initialization for 'foo') [enabled by default] test9.c:1:1: warning: excess elements in array initializer [enabled by default] test9.c:1:1: warning: (near initialization for 'foo') [enabled by default]