public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-4824] modula2: Fix lto profiledbootstrap on powerpc64le-linux and s390x-linux [PR108153]
@ 2022-12-21  8:18 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-12-21  8:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:88709c4a1e6f8b69a33897a1ab46b8d66c4569c4

commit r13-4824-g88709c4a1e6f8b69a33897a1ab46b8d66c4569c4
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Wed Dec 21 09:10:35 2022 +0100

    modula2: Fix lto profiledbootstrap on powerpc64le-linux and s390x-linux [PR108153]
    
    Lto profiledbootstrap was failing for me on {powerpc64le,s390x}-linux with
    modula 2 enabled, with:
    cc1gm2: internal compiler error: the location value is corrupt
    0x11a3d2d m2assert_AssertLocation(unsigned int)
            ../../gcc/m2/gm2-gcc/m2assert.cc:40
    0x11a3d2d m2statement_BuildAssignmentTree
            ../../gcc/m2/gm2-gcc/m2statement.cc:177
    ICE.  The problem was that caller (m2assert_AssertLocation used
    location_t M2Options_OverrideLocation (location_t);
    prototype with the libcpp/line-map.h
    typedef unsigned int location_t;
    typedef, but the callee defined in Modula 2 was using:
    TYPE
       location_t = INTEGER ;
    and
    PROCEDURE OverrideLocation (location: location_t) : location_t ;
    Now, on powerpc64le-linux unsigned int is returned and passed zero extended
    into 64-bits, while signed int is returned and passed sign-extended into 64-bits
    and Modula 2 INTEGER is signed 32-bit type, so when the caller then compared
    M2Options_OverrideLocation (location) != location
    and powerpc64le-linux performed the comparison as 64-bit compare, there
    was a mismatch for location_t of 0x8000007 or others with the MSB set.
    
    Fixed by making Modula 2 location_t a CARDINAL, which is 32-bit unsigned type.
    
    2022-12-21  Jakub Jelinek  <jakub@redhat.com>
    
            PR modula2/108153
            * gm2-gcc/m2linemap.def (location_t): Use CARDINAL instead of INTEGER.

Diff:
---
 gcc/m2/gm2-gcc/m2linemap.def | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/m2/gm2-gcc/m2linemap.def b/gcc/m2/gm2-gcc/m2linemap.def
index 689dcb4b4e1..f4c17b5677b 100644
--- a/gcc/m2/gm2-gcc/m2linemap.def
+++ b/gcc/m2/gm2-gcc/m2linemap.def
@@ -30,7 +30,7 @@ EXPORT QUALIFIED StartFile, EndFile, StartLine, GetLocationColumn, GetLocationRa
                  WarningAtf, NoteAtf, internal_error, location_t ;
 
 TYPE
-   location_t = INTEGER ;
+   location_t = CARDINAL ;
 
 
 PROCEDURE StartFile (filename: ADDRESS; linebegin: CARDINAL) ;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-12-21  8:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-21  8:18 [gcc r13-4824] modula2: Fix lto profiledbootstrap on powerpc64le-linux and s390x-linux [PR108153] Jakub Jelinek

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