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

            Bug ID: 117308
           Summary: Undocumented implementation limits of C++
                    specification (ISO/IEC 14882)
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Thomas.Kiess at vector dot com
  Target Milestone: ---

Hi,

the current implementation limits overview
(https://gcc.gnu.org/onlinedocs/gcc-14.2.0/cpp/Implementation-limits.html) does
not list all "Implementation quantities" [implimits] of a recent C++
specification (e.g., ISO/IEC 14882:2014 or 2017, ...).

The C++14 specification lists the following implementation quantities:

— Nesting levels of compound statements, iteration control structures, and
selection control structures
[256].
— Nesting levels of conditional inclusion [256].
— Pointer, array, and function declarators (in any combination) modifying a
class, arithmetic, or incom-
plete type in a declaration [256].
— Nesting levels of parenthesized expressions within a full-expression [256].
— Number of characters in an internal identifier or macro name [1 024].
— Number of characters in an external identifier [1 024].
— External identifiers in one translation unit [65 536].
— Identifiers with block scope declared in one block [1 024].
— Macro identifiers simultaneously defined in one translation unit [65 536].
— Parameters in one function definition [256].
— Arguments in one function call [256].
— Parameters in one macro definition [256].
— Arguments in one macro invocation [256].
— Characters in one logical source line [65 536].
— Characters in a string literal (after concatenation) [65 536].
— Size of an object [262 144].
— Nesting levels for #include files [256].
— Case labels for a switch statement (excluding those for any nested switch
statements) [16 384].
— Data members in a single class [16 384].
— Enumeration constants in a single enumeration [4 096].
— Levels of nested class definitions in a single member-specification [256].

https://gcc.gnu.org/onlinedocs/gcc-14.2.0/cpp/Implementation-limits.html only
lists 
- Nesting levels of ‘#include’ files.
- Nesting levels of conditional inclusion.
- Levels of parenthesized expressions within a full expression.
- Significant initial characters in an identifier or macro name.
- Number of macros simultaneously defined in a single translation unit.
- Number of parameters in a macro definition and arguments in a macro call.
- Number of characters on a logical source line.
- Maximum size of a source file.

I create this bug ticket, because it is requested by
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/cpp/Implementation-limits.html: "If
you encounter an undocumented or inconvenient limit, please report that as a
bug. See Reporting Bugs in Using the GNU Compiler Collection (GCC)."

I/we are primarily interested in the effect of violating 
— External identifiers in one translation unit [65 536]. 
— Size of an object [262 144].
— Data members in a single class [16 384].

What happens when the limit of the standard is violated, what is the limit of
GCC and what happens when the GCC/g++ limit is violated (more items/objects are
"used").

Best regards,
Thomas

Reply via email to