public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/47143] New: warning about const multidimensional array as function parameter
@ 2011-01-01  5:38 rogi at linuxmail dot org
  2011-01-01 11:25 ` [Bug c/47143] " rogi at linuxmail dot org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: rogi at linuxmail dot org @ 2011-01-01  5:38 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

           Summary: warning about const multidimensional array as function
                    parameter
           Product: gcc
           Version: 4.4.3
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: rogi@linuxmail.org


Created attachment 22876
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22876
source which produces warning

Ehllo,

I'm getting some strange warning about this code:

--- snip ---

typedef double mat4[4][4];

void mprod4(mat4 r, const mat4 a, const mat4 b)
{
/* yes, function is empty */
}

int main()
{
    mat4 mr, ma, mb;
    mprod4(mr, ma, mb);
}

------------

gcc output as follows:

--- snip ----

$ gcc -o test test.c
test.c: In function 'main':
test.c:13: warning: passing argument 2 of 'mprod4' from incompatible pointer
type
test.c:4: note: expected 'const double (*)[4]' but argument is of type 'double
(*)[4]'
test.c:13: warning: passing argument 3 of 'mprod4' from incompatible pointer
type
test.c:4: note: expected 'const double (*)[4]' but argument is of type 'double
(*)[4]'

------------

defining the function as:

--- snip ---

void mprod4(mat4 r, mat4 a, mat4 b)
{
}

------------

OR defining matrices at main as:

--- snip ---

mat4 mr;
const mat4 ma;
const mat4 mb;

------------

OR calling teh function in main as:

--- snip ---

mprod4(mr, (const double(*)[4])ma, (const double(*)[4])mb);

------------

OR even defining mat4 as:

--- snip ---

typedef double mat4[16];

------------

make teh warning go away. Wat is happening here? Am I doing something invalid?

I have attached source code.

Thanks for your attention.


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
@ 2011-01-01 11:25 ` rogi at linuxmail dot org
  2011-01-01 12:02 ` jsm28 at gcc dot gnu.org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rogi at linuxmail dot org @ 2011-01-01 11:25 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Igor <rogi at linuxmail dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|minor                       |normal


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
  2011-01-01 11:25 ` [Bug c/47143] " rogi at linuxmail dot org
@ 2011-01-01 12:02 ` jsm28 at gcc dot gnu.org
  2011-01-01 13:02 ` rogi at linuxmail dot org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jsm28 at gcc dot gnu.org @ 2011-01-01 12:02 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Joseph S. Myers <jsm28 at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #1 from Joseph S. Myers <jsm28 at gcc dot gnu.org> 2011-01-01 12:02:28 UTC ---
Not a bug.  The function parameters are of type "pointer to array[4] of const
double" because const on an array type applies to the element type,
recursively, and then the outermost array type, only, of a parameter of array
type decays to a pointer, and the arguments passed are of type "pointer to
array[4] of double" after array-to-pointer decay, and the only case where
qualifiers are permitted to be added in assignment, argument passing etc. is
qualifiers on the immediate pointer target, not those nested more deeply.


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
  2011-01-01 11:25 ` [Bug c/47143] " rogi at linuxmail dot org
  2011-01-01 12:02 ` jsm28 at gcc dot gnu.org
@ 2011-01-01 13:02 ` rogi at linuxmail dot org
  2011-01-01 13:16 ` rogi at linuxmail dot org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rogi at linuxmail dot org @ 2011-01-01 13:02 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Igor <rogi at linuxmail dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |

--- Comment #2 from Igor <rogi at linuxmail dot org> 2011-01-01 13:02:09 UTC ---
And is it possible to write function definitions that avoid this while
maintaining my precious a[i][j] accesibility inside functions?


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
                   ` (2 preceding siblings ...)
  2011-01-01 13:02 ` rogi at linuxmail dot org
@ 2011-01-01 13:16 ` rogi at linuxmail dot org
  2011-01-01 15:06 ` jsm28 at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rogi at linuxmail dot org @ 2011-01-01 13:16 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

--- Comment #3 from Igor <rogi at linuxmail dot org> 2011-01-01 13:16:39 UTC ---
(In reply to comment #1)
> Not a bug.  The function parameters are of type "pointer to array[4] of const
> double" because const on an array type applies to the element type,
> recursively, and then the outermost array type, only, of a parameter of array
> type decays to a pointer, and the arguments passed are of type "pointer to
> array[4] of double" after array-to-pointer decay, and the only case where
> qualifiers are permitted to be added in assignment, argument passing etc. is
> qualifiers on the immediate pointer target, not those nested more deeply.

This was somewhat confusing to me. Did you mean that funcion expects:

pointer to array[4] of const doubles

and I am passing

pointer to const array[4] of doubles

instead?

This really seems pretty much teh same to me.

Correct me if I'm wrong please.


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
                   ` (3 preceding siblings ...)
  2011-01-01 13:16 ` rogi at linuxmail dot org
@ 2011-01-01 15:06 ` jsm28 at gcc dot gnu.org
  2011-01-01 15:42 ` rogi at linuxmail dot org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jsm28 at gcc dot gnu.org @ 2011-01-01 15:06 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Joseph S. Myers <jsm28 at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #4 from Joseph S. Myers <jsm28 at gcc dot gnu.org> 2011-01-01 15:06:34 UTC ---
If you want to use const here only on the callee side then you will need to use
casts.  I meant what I said: you are passing "pointer to array[4] of double",
with no const in there, to a function expecting "pointer to array[4] of const
double", and this is not a case permitted by C99 6.5.16.1#1.  C does not have a
type "pointer to const array[4] of double".


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
                   ` (4 preceding siblings ...)
  2011-01-01 15:06 ` jsm28 at gcc dot gnu.org
@ 2011-01-01 15:42 ` rogi at linuxmail dot org
  2011-01-01 16:36 ` jakub at gcc dot gnu.org
  2021-08-01  6:41 ` muecker at gwdg dot de
  7 siblings, 0 replies; 9+ messages in thread
From: rogi at linuxmail dot org @ 2011-01-01 15:42 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Igor <rogi at linuxmail dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |

--- Comment #5 from Igor <rogi at linuxmail dot org> 2011-01-01 15:42:34 UTC ---
(In reply to comment #4)
> If you want to use const here only on the callee side then you will need to use
> casts.  I meant what I said: you are passing "pointer to array[4] of double",
> with no const in there, to a function expecting "pointer to array[4] of const
> double", and this is not a case permitted by C99 6.5.16.1#1.  C does not have a
> type "pointer to const array[4] of double".

Let me see if I understood.

const double a[4][4]

will become a "pointer to array of consts". So when i call my function passing
a "pointer to array", teh conversion fails since it's only allowed to apply teh
qualifier (const) to teh _pointer type_, which is an array, and not to it's
elements as teh function was expecting.

Correct me if I'm wrong again please and thanks for your patience.


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
                   ` (5 preceding siblings ...)
  2011-01-01 15:42 ` rogi at linuxmail dot org
@ 2011-01-01 16:36 ` jakub at gcc dot gnu.org
  2021-08-01  6:41 ` muecker at gwdg dot de
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2011-01-01 16:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |jakub at gcc dot gnu.org
         Resolution|                            |INVALID

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-01-01 16:36:27 UTC ---
Please stop reopening the PR, there is no bug on the gcc side.


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

* [Bug c/47143] warning about const multidimensional array as function parameter
  2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
                   ` (6 preceding siblings ...)
  2011-01-01 16:36 ` jakub at gcc dot gnu.org
@ 2021-08-01  6:41 ` muecker at gwdg dot de
  7 siblings, 0 replies; 9+ messages in thread
From: muecker at gwdg dot de @ 2021-08-01  6:41 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47143

Martin Uecker <muecker at gwdg dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |muecker at gwdg dot de

--- Comment #7 from Martin Uecker <muecker at gwdg dot de> ---
This is supported as an extension since GCC 5 and will be supported with the
upcoming C23 standard.

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

end of thread, other threads:[~2021-08-01  6:41 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-01  5:38 [Bug c/47143] New: warning about const multidimensional array as function parameter rogi at linuxmail dot org
2011-01-01 11:25 ` [Bug c/47143] " rogi at linuxmail dot org
2011-01-01 12:02 ` jsm28 at gcc dot gnu.org
2011-01-01 13:02 ` rogi at linuxmail dot org
2011-01-01 13:16 ` rogi at linuxmail dot org
2011-01-01 15:06 ` jsm28 at gcc dot gnu.org
2011-01-01 15:42 ` rogi at linuxmail dot org
2011-01-01 16:36 ` jakub at gcc dot gnu.org
2021-08-01  6:41 ` muecker at gwdg dot de

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 read-only IMAP folder(s) and NNTP newsgroup(s).