gcc will segment fault when compiling following code (copied from linux kernel) when no optimize option is given (I need to debug linux kernel without optimizing interfere my investigation): gcc -S -i hello1.i //hello1.i 1 2 struct genapic { 3 4 int (*check_phys_apicid_present)(int boot_cpu_physical_apicid); 5 6 unsigned (*get_apic_id)(unsigned long x); 7 8 }; 9 10 static inline __attribute__((always_inline)) unsigned get_apic_id(unsigned long x) 11 { 12 return 1; 13 } 14 15 16 17 static inline int check_phys_apicid_present(int cpu_physical_apicid) 18 { 19 20 return get_apic_id(2); 21 22 } 23 24 25 struct genapic apic_es7000 = { .check_phys_apicid_present = check_phys_apicid_present,.get_ apic_id = get_apic_id, };
A solution is change gcc-4.1.0's function cgraph_preserve_function_body_p: 1201 bool 1202 cgraph_preserve_function_body_p (tree decl) 1203 { 1204 struct cgraph_node *node; 1205 /* Keep the body; we're going to dump it. */ 1206 if (dump_enabled_p (TDI_tree_all)) 1207 return true; 1208 if (!cgraph_global_info_ready) 1209 return (DECL_INLINE (decl) && !flag_really_no_inline); 1210 /* Look if there is any clone around. */ 1211 for (node = cgraph_node (decl); node; node = node->next_clone) 1212 if (node->global.inlined_to) 1213 return true; 1214 return false; 1215 } into bool cgraph_preserve_function_body_p (tree decl) { struct cgraph_node *node; /* Keep the body; we're going to dump it. */ if (dump_enabled_p (TDI_tree_all)) return true; if (!cgraph_global_info_ready && !((DECL_INLINE (decl) && !flag_really_no_inline))){ for (node = cgraph_node (decl); node; node = node->next_clone) if (node->global.local.disregard_inline_limits) return true; return false; } /* Look if there is any clone around. */ for (node = cgraph_node (decl); node; node = node->next_clone) if (node->global.inlined_to) return true; return false; } best regards Zhouyi Zhou -- Summary: C handling of always_inline attribute error and a solution Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: zhouyi04 at ios dot cn GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31077