Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 84457 - gcc 2.96 segfaults when given bad struct initializer
Summary: gcc 2.96 segfaults when given bad struct initializer
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: gcc
Version: 7.1
Hardware: i686
OS: Linux
low
low
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2003-02-17 18:18 UTC by Allen Grace
Modified: 2005-10-31 22:00 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2004-10-03 12:09:32 UTC


Attachments (Terms of Use)

Description Allen Grace 2003-02-17 18:18:03 UTC
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826

Description of problem:
Bug report 77350 describes a similar situation, where feeding a bad struct
initializer to gcc 2.96 causes an unspecified internal error.

However, I've experienced the same results with a different compiler version to
the one described therein. The reporter in that case said that gcc 2.9x was not
affected; this is not what I've seen. 

This problem is not serious in the slightest, because if I fix my code it stops
happening. 

########################
Sample code:

#include <stdlib.h>
 
struct innerstruct {
        const char * const * values;
} innerstruct;
 
struct outerstruct {
        const struct innerstruct *fields;
} list_of_things[] = {
        {
                /* if I mis-spell the name of the struct in the cast,
                 * the compiler exits unhappily */
                (const struct innerstruct_wrong []) {
                        {
                                (const char * const []) {
                                        "blah", NULL
                                }
                        },
                        {
                                NULL
                        }
                }
        },
        { NULL }
};
########################



Version-Release number of selected component (if applicable):


How reproducible:
Always

Steps to Reproduce:
1. save the provided sample code to a file
2. type 'gcc -c <file>'

    

Actual Results:  The compiler aborts with an error message asking me to submit a
bug report:

crashgcc.c:15: warning: excess elements in struct initializer
crashgcc.c:15: warning: (near initialization for `(anonymous)[0]')
crashgcc.c:18: warning: excess elements in struct initializer
crashgcc.c:18: warning: (near initialization for `(anonymous)[1]')
crashgcc.c:20: warning: initialization from incompatible pointer type
crashgcc.c:22: Internal error: Segmentation fault.
Please submit a full bug report.
See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.

Expected Results:  

Something similar to the above, perhaps with a warning about a struct type being
declared inside the initializer, and without the bit about the segmentation fault. 

Additional info:

Comment 1 Richard Henderson 2004-10-03 12:09:32 UTC
No ICE with gcc 3.2.3-20.


Note You need to log in before you can comment on or make changes to this bug.