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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Iain D Sandoe <ia...@gcc.gnu.org>:

https://gcc.gnu.org/g:aecc0d4ba73d0810334b351da1e67232cea450d3

commit r14-8232-gaecc0d4ba73d0810334b351da1e67232cea450d3
Author: Iain Sandoe <i...@sandoe.co.uk>
Date:   Sat Jan 6 10:52:38 2024 +0000

    Darwin: Fix constant CFString code-gen [PR105522].

    Although this only fires for one of the Darwin sub-ports, it is latent
    elsewhere, it is also a regression c.f. the Darwin system compiler.

    In the code we imported from an earlier branch, CFString objects (which
    are constant aggregates) are constructed as CONST_DECLs.  Although our
    current documentation suggests that these are reserved for enumeration
    values, in fact they are used elsewhere in the compiler for constants.
    This includes Objective-C where they are used to form NSString constants.

    In the particular case, we take the address of the constant and that
    triggers varasm.cc:decode_addr_constant, which does not currently support
    CONST_DECL.

    If there is a general intent to allow/encourage wider use of CONST_DECL,
    then we should fix decode_addr_constant to look through these and evaluate
    the initializer (a two-line patch, but I'm not suggesting it for stage-4).

    We also need to update the GCC internals documentation to allow for the
    additional uses.

    This patch is Darwin-local and fixes the problem by making the CFString
    constants into regular variable but TREE_CONSTANT+TREE_READONLY. I plan
    to back-port this to the open branches once it has baked a while on trunk.

    Since, for Darwin, the Objective-C default is to construct constant
    NSString objects as CFStrings; this will also cover the majority of cases
    there (this patch does not make any changes to Objective-C NSStrings).

            PR target/105522

    gcc/ChangeLog:

            * config/darwin.cc (machopic_select_section): Handle C and C++
            CFStrings.
            (darwin_rename_builtins): Move this out of the CFString code.
            (darwin_libc_has_function): Likewise.
            (darwin_build_constant_cfstring): Create an anonymous var to
            hold each CFString.
            * config/darwin.h (ASM_OUTPUT_LABELREF): Handle constant
            CFstrings.

    Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
  • [Bug target/105522] [powerpc-da... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to