public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/14146] New: GCC 3.3-branch (only) has an ICE for sparc64
@ 2004-02-14 14:36 gcc-bugzilla at gcc dot gnu dot org
  2004-02-14 15:11 ` [Bug target/14146] " ebotcazou at gcc dot gnu dot org
  0 siblings, 1 reply; 2+ messages in thread
From: gcc-bugzilla at gcc dot gnu dot org @ 2004-02-14 14:36 UTC (permalink / raw)
  To: gcc-bugs

	when building netpbm's "exif.c" with any optimisation, any GCC3.3 release
	compiler will have an ICE, eg:

foo.i: In function `ProcessExifDir':
foo.i:83: error: insn does not satisfy its constraints:
(insn:HI 219 214 471 13 0x404c3aa0 (set (reg:DI 31 %i7 [32])
        (fix:DI (fix:DF (reg:DF 32 %f0 [169])))) 166 {fix_truncdfdi2} (insn_list 215 (nil))
	    (nil))
foo.i:83: internal compiler error: in reload_cse_simplify_operands, at reload1.c:8345

	i first reduced the code to the smallest test case i could find, and then
	looked at top-of-CVS for GCC to see if the bug was still present.  i was
	actually unable to reproduce this at any date of the GCC mainline for the
	past 16 months.  i found that this change on the GCC 3.3 branch introduced
	this regression, but why it does not for mainline i can not say:

	+ 2003-03-11  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
	+
	+       PR bootstrap/9994
	+       Backport from mainline:

	specifically, the call to the new sbitmap_resize() in reload.c causes the
	problem to occur.

	(this exact same bug also occurs with kdegraphics 3.1.4's "exif.cpp" file.)

Environment:
System: NetBSD phat-bass.eterna.com.au 1.6ZG NetBSD 1.6ZG (_phat_) #8: Sat Dec 6 18:19:50 EST 2003 mrg@phat-bass.eterna.com.au:/home/obj/i386/usr/src/sys/arch/i386/compile/_phat_ i386


	
host: i386-unknown-netbsdelf1.6ZG
build: i386-unknown-netbsdelf1.6ZG
target: sparc64-unknown-netbsd
configured with: /home/mrg/src/gcc-current/gcc-date/configure --target=sparc64-netbsd --enable-languages=c

How-To-Repeat:

	compile the following input with a sparc64-cc1 from GCC 3.3 branch.  this
	code is extremely sensitive to avoiding the failure.  removing or changing
	almost any part of this will mask the problem.

------>8-------->8-------->8-------->8-------
typedef struct {
    unsigned char * ThumbnailPointer;
    unsigned ThumbnailSize;
} ImageInfo_t;

static double ConvertAnyFormat(void * ValuePtr, int Format)
{
	return *(signed char *)ValuePtr;
}

static void ProcessExifDir(unsigned char * DirStart,
                           unsigned char * OffsetBase, unsigned ExifLength,
                           ImageInfo_t * const ImageInfoP,
                           int const ShowTags,
                           unsigned char ** const LastExifRefdP )
{
    int de;
    int NumDirEntries;
    unsigned ThumbnailOffset = 0;
    unsigned ThumbnailSize = 0;

    NumDirEntries = Get16u(DirStart);

    if (DirStart > (OffsetBase+ExifLength))
        pm_error("Illegally sized directory");
    if (ShowTags)
        pm_message("Directory with %d entries",NumDirEntries);

    for (de=0;de<NumDirEntries;de++){
        int Tag, Format, Components;
        unsigned char * ValuePtr;
        int ByteCount;
        unsigned char * DirEntry;
        DirEntry = DirStart+2+12*de;

        Tag = Get16u(DirEntry);
        Format = Get16u(DirEntry+2);
        Components = Get32u(DirEntry+4);
        ByteCount = Components;

        if (ByteCount > 4){
            unsigned OffsetVal;
            OffsetVal = Get32u(DirEntry+8);

            if (OffsetVal+ByteCount > ExifLength){

                pm_error("Illegal pointer offset value in EXIF.  "
                         "Offset %d bytes %d ExifLen %d\n",
                         OffsetVal, ByteCount, ExifLength);
            }
            ValuePtr = OffsetBase+OffsetVal;
        } else {
            ValuePtr = DirEntry+8;
        }

        switch(Tag){
            case 0x0201:
                ThumbnailOffset = (unsigned)ConvertAnyFormat(ValuePtr, Format);
                break;

            case 0x0202:
                ThumbnailSize = (unsigned)ConvertAnyFormat(ValuePtr, Format);
                break;
        }

        if (Tag == 0x8769 || Tag == 0xa005){
            unsigned char * SubdirStart;
            SubdirStart = OffsetBase + Get32u(ValuePtr);
            if (SubdirStart > OffsetBase+ExifLength)
                pm_error("Illegal subdirectory link");
            ProcessExifDir(SubdirStart, OffsetBase, ExifLength, ImageInfoP,
                           ShowTags, LastExifRefdP);
            continue;
        }
    }

    if (ThumbnailSize && ThumbnailOffset){
        if (ThumbnailSize + ThumbnailOffset <= ExifLength){
            ImageInfoP->ThumbnailPointer = OffsetBase + ThumbnailOffset;
            ImageInfoP->ThumbnailSize = ThumbnailSize;
        }
    }
}
------>8-------->8-------->8-------->8-------
------- Additional Comments From mrg at eterna dot com dot au  2004-02-14 14:36 -------
Fix:
	using -O0 stops the bug from occuring.

-- 
           Summary: GCC 3.3-branch (only) has an ICE for sparc64
           Product: gcc
           Version: 3.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mrg at eterna dot com dot au
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i386-unknown-netbsdelf1.6ZG
  GCC host triplet: i386-unknown-netbsdelf1.6ZG
GCC target triplet: sparc64-unknown-netbsd


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14146


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

* [Bug target/14146] GCC 3.3-branch (only) has an ICE for sparc64
  2004-02-14 14:36 [Bug c/14146] New: GCC 3.3-branch (only) has an ICE for sparc64 gcc-bugzilla at gcc dot gnu dot org
@ 2004-02-14 15:11 ` ebotcazou at gcc dot gnu dot org
  0 siblings, 0 replies; 2+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2004-02-14 15:11 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From ebotcazou at gcc dot gnu dot org  2004-02-14 15:11 -------


*** This bug has been marked as a duplicate of 13058 ***

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
          Component|c                           |target
         Resolution|                            |DUPLICATE
   Target Milestone|---                         |3.4.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14146


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

end of thread, other threads:[~2004-02-14 15:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-14 14:36 [Bug c/14146] New: GCC 3.3-branch (only) has an ICE for sparc64 gcc-bugzilla at gcc dot gnu dot org
2004-02-14 15:11 ` [Bug target/14146] " ebotcazou at gcc dot gnu dot org

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