Bug 114857 - Pointer attributes and qualifiers are parsed in wrong order
Summary: Pointer attributes and qualifiers are parsed in wrong order
Status: UNCONFIRMED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 14.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid, rejects-valid
Depends on:
Blocks:
 
Reported: 2024-04-25 22:37 UTC by Halalaluyafail3
Modified: 2024-04-28 00:41 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Halalaluyafail3 2024-04-25 22:37:18 UTC
GCC accepts the following declaration:

int*const[[]]p=0;

And rejects the following declaration:

int*[[]]const p=0;

It seems that GCC expects the attributes of a pointer declarator to come after the qualifiers. The standard specifies in the grammar that the attributes should come before qualifiers and not after:

> ptr-operator:
> * attribute-specifier-seq opt cv-qualifier-seq opt
> & attribute-specifier-seq opt
> && attribute-specifier-seq opt
> nested-name-specifier * attribute-specifier-seq opt cv-qualifier-seq opt
Section 9.3.1 "General" [dcl.decl.general] Paragraph 5 ISO/IEC 14882:2020

The first declaration should be rejected and the second declaration should be accepted. Clang and MSVC get this correct (though not EDG I think so Visual Studio will show errors in the correct declarations and not in the incorrect declarations), and GCC gets this correct with pointer to members but not with normal pointers.