On 5 March 2016 at 01:06, David Malcolm wrote:
> On Wed, 2016-02-24 at 17:56 +0530, Prasad Ghangal wrote:
>> Thanks Prathamesh and Joseph for your suggestions.
>>
>> Here is my updated patch :
>>
>> for test cases:
>>
>> const int array[5] = {1, 2, 3};
>> const int array1[3] = {1, 2, 3, 6};
>> const int array2[4] = {1, 2, 3, 6, 89};
>> const int array3[5] = {1, 2, 3, 6, 89, 193};
>> const int array4[3] = {1, 2, 3, 6, 89, 193};
>> const int array5[1] = {1, 2, 3, 6, 89, 193};
>> const int array6[3] = {1, 2, 3, 6, 89, 193;
>> const int array7[5] = {1, 2, 3, 6, 89, 193}
>> const int array8[5] = {1, 2, 3, 6, 89, 193
>>
>>
>>
>> It gives:
>>
>> 68425.c: In function ‘main’:
>> 68425.c:4:37: warning: excess elements in array initializer (4
>> elements, expected 3)
>> const int array1[3] = {1, 2, 3, 6};
>>^
>> 68425.c:4:37: note: (near initialization for ‘array1’)
>> 68425.c:5:40: warning: excess elements in array initializer (5
>> elements, expected 4)
>> const int array2[4] = {1, 2, 3, 6, 89};
>>^~
>> 68425.c:5:40: note: (near initialization for ‘array2’)
>> 68425.c:6:44: warning: excess elements in array initializer (6
>> elements, expected 5)
>> const int array3[5] = {1, 2, 3, 6, 89, 193};
>> ^~~
>> 68425.c:6:44: note: (near initialization for ‘array3’)
>> 68425.c:7:37: warning: excess elements in array initializer (6
>> elements, expected 3)
>> const int array4[3] = {1, 2, 3, 6, 89, 193};
>>^
>> 68425.c:7:37: note: (near initialization for ‘array4’)
>> 68425.c:8:31: warning: excess elements in array initializer (6
>> elements, expected 1)
>> const int array5[1] = {1, 2, 3, 6, 89, 193};
>>^
>> 68425.c:8:31: note: (near initialization for ‘array5’)
>> 68425.c:9:37: warning: excess elements in array initializer (6
>> elements, expected 3)
>> const int array6[3] = {1, 2, 3, 6, 89, 193;
>>^
>> 68425.c:9:37: note: (near initialization for ‘array6’)
>> 68425.c:9:47: error: expected ‘}’ before ‘;’ token
>> const int array6[3] = {1, 2, 3, 6, 89, 193;
>>^
>> 68425.c:14:1: error: expected declaration or statement at end of
>> input
>> }
>> ^
>
> Those caret locations look wrong to me - they don't seem to be
> underlining the pertinent source. Is that what the patched compiler is
> printing, or did things get messed up somewhere via email?
>
> (I tried the patch, but it didn't quite apply cleanly against my
> working copy)
>
> As mentioned before, I think the ideal behavior would be to underline
> *all* of the surplus elements, like this:
>
> 68425.c: In function ‘main’:
> 68425.c:4:37: warning: excess elements in array initializer (4
> elements, expected 3)
> const int array1[3] = {1, 2, 3, 6};
> ^
> 68425.c:4:37: note: (near initialization for ‘array1’)
> 68425.c:5:40: warning: excess elements in array initializer (5
> elements, expected 4)
> const int array2[4] = {1, 2, 3, 6, 89};
> ^~
> 68425.c:5:40: note: (near initialization for ‘array2’)
> 68425.c:6:44: warning: excess elements in array initializer (6
> elements, expected 5)
> const int array3[5] = {1, 2, 3, 6, 89, 193};
> ^~~
> 68425.c:6:44: note: (near initialization for ‘array3’)
> 68425.c:7:37: warning: excess elements in array initializer (6
> elements, expected 3)
> const int array4[3] = {1, 2, 3, 6, 89, 193};
> ^~
> 68425.c:7:37: note: (near initialization for ‘array4’)
> 68425.c:8:31: warning: excess elements in array initializer (6
> elements, expected 1)
> const int array5[1] = {1, 2, 3, 6, 89, 193};
>^~~~
> 68425.c:8:31: note: (near initialization for ‘array5’)
> 68425.c:9:37: warning: excess elements in array initializer (6
> elements, expected 3)
> const int array6[3] = {1, 2, 3, 6, 89, 193;
> ^~
> 68425.c:9:37: note: (near initialization for ‘array6’)
> 68425.c:9:47: error: expected ‘}’ before ‘;’ token
> const int array6[3] = {1, 2, 3, 6, 89, 193;
>^
> 68425.c:14:1: error: expected declaration or statement at end of input
> }
> ^
>
> You can use "make_location" to build a range; see e.g. this fragment
> from the C++ frontend:
>
> /* Create a location of the form:
> type_name{i, f}
> ^~~
> with caret == start at the start of the type name,
> finishing at the closing brace. */
> location_t finish_loc
>