public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration
@ 2021-06-29 20:09 gcc at alanwu dot email
  2021-06-30 16:54 ` [Bug c/101265] " joseph at codesourcery dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: gcc at alanwu dot email @ 2021-06-29 20:09 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 101265
           Summary: C2X [[maybe_unused]] ignored when placed after array
                    declaration
           Product: gcc
           Version: 11.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc at alanwu dot email
  Target Milestone: ---

With the following:

    void foo(void) {
        [[maybe_unused]] int thisworks[1];
        int thisdoesnt[1] [[maybe_unused]];
    }

GCC 11 warns:

    $ gcc-11 -std=c2x -pedantic -Wall -c test.c
    test.c: In function 'foo':
    test.c:3:5: warning: 'maybe_unused' attribute ignored [-Wattributes]
        3 |     int thisdoesnt[1] [[maybe_unused]];
          |     ^~~
    test.c:3:9: warning: unused variable 'thisdoesnt' [-Wunused-variable]
        3 |     int thisdoesnt[1] [[maybe_unused]];
          |         ^~~~~~~~~~

Is this a bug? I'm not familiar with the spec. By the way, `g++-11`
doesn't emit any warnings for the same file and `clang` seems to also accept
it.

gcc-11 -v:

    COLLECT_GCC=gcc-11
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu
11.1.0-1ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-11
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib
--enable-libphobos-checking=release --with-target-system-zlib=auto
--enable-objc-gc=auto --enable-multiarch --disable-werror --disable-cet
--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-11-2V7zgg/gcc-11-11.1.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-2V7zgg/gcc-11-11.1.0/debian/tmp-gcn/usr
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2
    Thread model: posix
    Supported LTO compression algorithms: zlib zstd
    gcc version 11.1.0 (Ubuntu 11.1.0-1ubuntu1~20.04)

It seems to reproduce on trunk on Compiler Explorer:

    gcc
(Compiler-Explorer-Build-gcc-7c6b354b92b38f31cd2399fbdbc9d6f837881480-binutils-2.36.1)
12.0.0 20210628 (experimental)

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

* [Bug c/101265] C2X [[maybe_unused]] ignored when placed after array declaration
  2021-06-29 20:09 [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration gcc at alanwu dot email
@ 2021-06-30 16:54 ` joseph at codesourcery dot com
  2021-06-30 22:17 ` gcc at alanwu dot email
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: joseph at codesourcery dot com @ 2021-06-30 16:54 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from joseph at codesourcery dot com <joseph at codesourcery dot com> ---
On Tue, 29 Jun 2021, gcc at alanwu dot email via Gcc-bugs wrote:

>         [[maybe_unused]] int thisworks[1];

That attribute appertains to the declared entity.

>         int thisdoesnt[1] [[maybe_unused]];

Whereas that one appertains to the array type (that position after an 
array declarator can also be used for e.g. a pointer to an array, an array 
of arrays, etc., and an attribute there appertains to the specific array 
given by that declarator - not the declared entity as a whole).

It's not clear what it would mean to declare that some particular part of 
the type of an entity is possibly unused like that.  Appropriate places in 
a declaration are either at the start as in the first example, or after 
the identifier where an attribute specifier sequence appertains to the 
declared entity.

In general you need to be a lot more careful about the positioning of [[]] 
attributes than __attribute__.

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

* [Bug c/101265] C2X [[maybe_unused]] ignored when placed after array declaration
  2021-06-29 20:09 [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration gcc at alanwu dot email
  2021-06-30 16:54 ` [Bug c/101265] " joseph at codesourcery dot com
@ 2021-06-30 22:17 ` gcc at alanwu dot email
  2021-06-30 22:59 ` joseph at codesourcery dot com
  2021-07-01 13:21 ` gcc at alanwu dot email
  3 siblings, 0 replies; 5+ messages in thread
From: gcc at alanwu dot email @ 2021-06-30 22:17 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Alan Wu <gcc at alanwu dot email> ---
>         int thisdoesnt[1] [[maybe_unused]];
> Whereas that one appertains to the array type

This seems to contradict the latest document I could find about the attribute
syntax proposal. From N2335
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2335.pdf:


>     [[attr1]] int [[attr2]] a[10] [[attr3]], b [[attr4]];
> attr1 appertains to the variable declarations a and b, attr2
> appertains to the type int, attr3 appertains to the variable
> declaration a, and attr4 appertains to the variable declaration b.

GCC warns about a and b for the following:

    void foo(void) {
        int a[10] [[maybe_unused]], b;
    }

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

* [Bug c/101265] C2X [[maybe_unused]] ignored when placed after array declaration
  2021-06-29 20:09 [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration gcc at alanwu dot email
  2021-06-30 16:54 ` [Bug c/101265] " joseph at codesourcery dot com
  2021-06-30 22:17 ` gcc at alanwu dot email
@ 2021-06-30 22:59 ` joseph at codesourcery dot com
  2021-07-01 13:21 ` gcc at alanwu dot email
  3 siblings, 0 replies; 5+ messages in thread
From: joseph at codesourcery dot com @ 2021-06-30 22:59 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> ---
On Wed, 30 Jun 2021, gcc at alanwu dot email via Gcc-bugs wrote:

> >     [[attr1]] int [[attr2]] a[10] [[attr3]], b [[attr4]];
> > attr1 appertains to the variable declarations a and b, attr2
> > appertains to the type int, attr3 appertains to the variable
> > declaration a, and attr4 appertains to the variable declaration b.

That looks like an error in introductory text describing that proposal 
(not text that was proposed for addition to the standard itself).  I at 
least mainly concentrate on the proposed changes to the standard text when 
reviewing the details of C standards proposals; mistakes of detail outside 
those changes aren't really important.  The current working draft is 
N2596, which has plenty of attributes-related changes that postdate the 
original proposal for attributes support; you should search for the word 
"appertain" there and disregard the older proposal.

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

* [Bug c/101265] C2X [[maybe_unused]] ignored when placed after array declaration
  2021-06-29 20:09 [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration gcc at alanwu dot email
                   ` (2 preceding siblings ...)
  2021-06-30 22:59 ` joseph at codesourcery dot com
@ 2021-07-01 13:21 ` gcc at alanwu dot email
  3 siblings, 0 replies; 5+ messages in thread
From: gcc at alanwu dot email @ 2021-07-01 13:21 UTC (permalink / raw)
  To: gcc-bugs

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

Alan Wu <gcc at alanwu dot email> changed:

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

--- Comment #4 from Alan Wu <gcc at alanwu dot email> ---
Thank you! The key paragraph in N2596 seems to be 6.7.6.2p3. I also reached out
to Aaron Ballman for clarification.

gcc is right to ignore the attribute in this case. g++ accepting the attribute
is potentially an issue, since the C++ spec has similar rules ([dcl.array]p3).

Clang accepting the attribute also seems to be a bug. There is now a ticket for
it: https://bugs.llvm.org/show_bug.cgi?id=50954

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

end of thread, other threads:[~2021-07-01 13:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-29 20:09 [Bug c/101265] New: C2X [[maybe_unused]] ignored when placed after array declaration gcc at alanwu dot email
2021-06-30 16:54 ` [Bug c/101265] " joseph at codesourcery dot com
2021-06-30 22:17 ` gcc at alanwu dot email
2021-06-30 22:59 ` joseph at codesourcery dot com
2021-07-01 13:21 ` gcc at alanwu dot email

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).