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 76986 - gcc fail to allocate storage for struct someways
Summary: gcc fail to allocate storage for struct someways
Keywords:
Status: CLOSED DUPLICATE of bug 76985
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: gcc
Version: 7.3
Hardware: i386
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2002-10-30 16:47 UTC by Need Real Name
Modified: 2007-04-18 16:48 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2002-10-30 16:47:15 UTC


Attachments (Terms of Use)

Description Need Real Name 2002-10-30 16:47:08 UTC
From Bugzilla Helper:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

Description of problem:
1)When I define structed variables within a function/main as local variable 
using a structed type declared outside all the function/main at the beginning 
of the program, I always get "segmentation fault" 
from the running of compiler-passed program when I put a system-
declared struct definition "struct sigaction sa;" before my-declared 
struct definitions; sometimes gcc can find only one my-declared struct and 
sometimes none; 
2)When I define these variables outside the function/main as global variables 
after the structed type declarations, I only receive 
"segmentation fault" from the running of the compiler-passed program;
3)my declared struct is fixed-sized with 1 int and 2 unsigned char and
gcc should recognize, allocate storages for them, and initiate them by default 
when I define variables using these types, according Brian Richiete C book.  

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


How reproducible:
Always

Steps to Reproduce:
1.copy the following program types.c into your pc redhat 7.3:
#include <stdio.h>
#include <signal.h>
//#include "types.h"
struct maketype {
int c0;
unsigned char c1;
unsigned char c2;
};	
//struct  maketype *m_c;
//struct  maketype *s_c;
typedef struct maketype Mt;
//Mt *m_c;
//Mt *s_c;

main () {
//struct sigaction sa;
struct  maketype *m_c;
struct  maketype *s_c;
//Mt *m_c;
//Mt *s_c;
	int i;
	printf("types Test!\n");
	m_c->c0 = 1;
	printf("types Test! m c0\n");
	m_c->c1 = 2;
	printf("types Test! m c1:%d\n",m_c->c1);
	m_c->c2 = 3;
	s_c->c0 = 10;
//	printf("types Test! s c0: %d\n",s_c->c0);
	for (i=0;i<4; i++) {
		printf("Mt c0:%d\n",m_c->c0);
//		sleep(3);
		m_c->c0++;
	}
}//end main


2.make or gcc types.c -o types directly

3.run types to see the stranges

4.comment out some lines of codes and/or add some lines of codes as
  one of the following options:
4.1 if line 16 "struct sigaction sa;" is kept there, using line 17,18
    "struct maketype *m_c; struct maketype *s_c;" or line 19,20 
    "Mt *m_c; Mt *s_c;", the returning is:
 
4.2 if line 16 is commented out, the returning is ok;
 
4.3 if line 19,20 "Mt *m_c; Mt *s_c;" are commented out and line 12, 
    13 "Mt *m_c; Mt *s_c;" or line 9,10 "struct maketype *m_c,*s_c;" 
    remains there, the returning is:


5.goto step 2. to see the results until all the options has been  
  selected or you don't think further options(adding your own option)
  are needed.



Actual Results:  * if line 16 "struct sigaction sa;" is kept there, using line 
17,18
* "struct maketype *m_c; struct maketype *s_c;" or line 19,20 
* "Mt *m_c; Mt *s_c;", the returning is:
[trouble:759]$ make clean
rm -f *.o  types
[trouble:760]$ make
gcc    -c -o types.o types.c
gcc   types.o   -o types
[trouble:761]$ types
types Test!
Segmentation fault
[trouble:762]$
 
* if line 16 is commented out, the returning is:
[trouble:768]$ make clean
rm -f *.o  types
[trouble:769]$ make
gcc    -c -o types.o types.c
gcc   types.o   -o types
[trouble:770]$ types
types Test!
types Test! m c0
types Test! m c1:2
Mt c0:1
Mt c0:2
Mt c0:3
Mt c0:4
Aborted
[trouble:771]$
 
* if line 19,20 "Mt *m_c; Mt *s_c;" are commented out and line 12,13 
* "Mt *m_c; Mt *s_c;" or line 9,10 "struct maketype *m_c,*s_c;" *
* remains there, the returning is:
[trouble:771]$ make clean
rm -f *.o  types
[trouble:772]$ make
gcc    -c -o types.o types.c
gcc   types.o   -o types
[trouble:773]$ types
types Test!
Segmentation fault
[trouble:774]$


Expected Results:  [trouble:770]$ types
types Test!
types Test! m c0
types Test! m c1:2
Mt c0:1
Mt c0:2
Mt c0:3
Mt c0:4
[trouble:771]$


Additional info:

Comment 1 Jakub Jelinek 2002-10-30 16:48:24 UTC

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


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