gcc/gcc
Richard Guenther ca818bd905 re PR middle-end/46251 (ICE: in expand_expr_real_2, at expr.c:7276 with -funsafe-math-optimizations -mbionic and __builtin_sincosl())
2010-11-03  Richard Guenther  <rguenther@suse.de>

	PR middle-end/46251
	* builtins.c (expand_builtin_sincos): Properly build MEM_REFs,
	not INDIRECT_REFs.

	* gcc.dg/pr46251.c: New testcase.

From-SVN: r166235
2010-11-03 09:57:13 +00:00
..
ada gigi.h (add_stmt_force): Declare. 2010-11-03 00:15:51 +00:00
c-family In gcc/c-family/: 2010-11-01 Nicola Pero <nicola.pero@meta-innovation.com> 2010-11-01 22:54:35 +00:00
config builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
cp builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
doc re PR lto/46273 (Failed to bootstrap) 2010-11-03 09:14:32 +00:00
fortran builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
ginclude
java Centralize knowledge of eh personality routines. 2010-10-13 11:57:31 -07:00
lto lto-object.c: New file. 2010-11-02 14:48:34 +00:00
objc In gcc/c-family/: 2010-11-01 Nicola Pero <nicola.pero@meta-innovation.com> 2010-11-01 22:54:35 +00:00
objcp In gcc/cp/: 2010-10-24 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-24 02:44:03 +00:00
po * gcc.pot: Regenerate. 2010-10-22 16:30:08 +01:00
testsuite re PR middle-end/46251 (ICE: in expand_expr_real_2, at expr.c:7276 with -funsafe-math-optimizations -mbionic and __builtin_sincosl()) 2010-11-03 09:57:13 +00:00
ABOUT-GCC-NLS
acinclude.m4
aclocal.m4 configure: Regenerate. 2010-09-03 13:16:24 +00:00
addresses.h
alias.c re PR rtl-optimization/45834 (Redundant inter-loop edges in DDG) 2010-10-21 15:16:01 +00:00
alias.h
alloc-pool.c
alloc-pool.h
attribs.c
auto-inc-dec.c
BASE-VER
basic-block.h basic-block.h (insert_insn_end_bb_new): Delete. 2010-11-02 19:31:59 +00:00
bb-reorder.c re PR middle-end/45458 (ICE: in add_labels_and_missing_jumps, at bb-reorder.c:1306 with-fnon-call-exceptions -freorder-blocks-and-partition -fprofile-use) 2010-09-01 21:46:21 +02:00
bb-reorder.h
bitmap.c
bitmap.h
bt-load.c
builtin-attrs.def builtin-attrs.def (ATTR_LEAF): New attribute. 2010-09-28 16:34:36 +00:00
builtin-types.def
builtins.c re PR middle-end/46251 (ICE: in expand_expr_real_2, at expr.c:7276 with -funsafe-math-optimizations -mbionic and __builtin_sincosl()) 2010-11-03 09:57:13 +00:00
builtins.def builtins.def (BUILT_IN_CALLOC, [...]): Mark as leaf. 2010-10-06 09:48:46 +02:00
builtins.h
c-aux-info.c
c-config-lang.in
c-convert.c
c-decl.c tree.h (EXPR_LOC_OR_HERE): New macro. 2010-10-31 22:04:39 -04:00
c-errors.c
c-lang.c In gcc/: 2010-10-20 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-20 09:08:57 +00:00
c-lang.h c-lang.h (struct lang_type): Add variable_size GTY option. 2010-09-15 03:08:22 +00:00
c-objc-common.c
c-objc-common.h Makefile.in (TM_H): Include $(FLAGS_H) instead of options.h. 2010-10-08 16:17:32 +01:00
c-parser.c In gcc/: 2010-10-30 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-30 11:22:46 +00:00
c-tree.h In gcc/: 2010-10-06 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-06 10:10:14 +00:00
c-typeck.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
caller-save.c
calls.c expr.c (emit_group_load_1): Update calls to extract_bit_field. 2010-10-22 00:40:15 +00:00
cfg.c
cfganal.c
cfgbuild.c
cfgcleanup.c cfgcleanup.c (try_forward_edges): Do not throw away previous steps when stopping because of a different locus on... 2010-10-21 21:38:03 +00:00
cfgexpand.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
cfghooks.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
cfghooks.h
cfglayout.c cfglayout.c (fixup_reorder_chain): When ensuring that there is at least one insn with a locus corresponding to an... 2010-10-24 07:45:26 +00:00
cfglayout.h
cfgloop.c cfgloop.c (flow_loops_find): Call bb_has_abnormal_pred. 2010-10-21 13:01:35 +00:00
cfgloop.h tree-vrp.c (adjust_range_with_scev): Use number of iteration estimate. 2010-09-01 11:39:55 +00:00
cfgloopanal.c
cfgloopmanip.c re PR tree-optimization/46107 (-ftree-loop-distribute-patterns caused verify_loop_structure problem) 2010-11-03 10:49:16 +01:00
cfgrtl.c basic-block.h (insert_insn_end_bb_new): Delete. 2010-11-02 19:31:59 +00:00
cgraph.c re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
cgraph.h re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
cgraphbuild.c * cgraphbuild.c (build_cgraph_edges): Use ipa-reference to represent OMP. 2010-10-26 22:32:47 +00:00
cgraphunit.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
ChangeLog re PR middle-end/46251 (ICE: in expand_expr_real_2, at expr.c:7276 with -funsafe-math-optimizations -mbionic and __builtin_sincosl()) 2010-11-03 09:57:13 +00:00
ChangeLog-1997
ChangeLog-1998
ChangeLog-1999
ChangeLog-2000
ChangeLog-2001
ChangeLog-2002
ChangeLog-2003
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog.dataflow
ChangeLog.graphite Fix PR45758: reset scevs before Graphite. 2010-09-30 21:22:07 +00:00
ChangeLog.lib
ChangeLog.ptr
ChangeLog.tree-ssa
ChangeLog.tuples
cif-code.def tree-inline.c (tree_inlinable_function_p): Do not test DECL_REPLACEABLE_P. 2010-09-07 21:26:34 +00:00
collect2-aix.c
collect2-aix.h
collect2.c collect2.c (maybe_run_lto_and_relink): Rewrite code producing ld command line to allow more partitions than input files. 2010-09-09 13:56:49 +00:00
collect2.h
combine-stack-adj.c common.opt: Add -fcombine-stack-adjustments. 2010-10-01 12:48:50 +00:00
combine.c re PR rtl-optimization/46034 (internal compiler error: segmentation fault) 2010-11-03 09:30:21 +01:00
common.opt common.opt (R, [...]): New. 2010-11-01 23:40:53 +00:00
conditions.h
config.build
config.gcc re PR lto/46273 (Failed to bootstrap) 2010-11-03 09:14:32 +00:00
config.host config.host: Update copyright year. 2010-10-07 21:04:47 +00:00
config.in configure.ac: Use AC_SYS_LARGEFILE. 2010-11-03 02:45:25 +00:00
configure configure.ac: Use AC_SYS_LARGEFILE. 2010-11-03 02:45:25 +00:00
configure.ac configure.ac: Use AC_SYS_LARGEFILE. 2010-11-03 02:45:25 +00:00
convert.c
convert.h
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
coretypes.h Move enum unwind_info_type from target.h to coretypes.h. 2010-10-07 13:03:13 -07:00
coverage.c
coverage.h
cppbuiltin.c cppbuiltin.c (define_builtin_macros_for_type_sizes): Define __BYTE_ORDER__... 2010-10-23 03:05:47 +00:00
cppbuiltin.h cppbuiltin.c: New file. 2010-10-03 19:00:55 +00:00
cppdefault.c
cppdefault.h
cppspec.c
crtstuff.c
cse.c cse.c (is_dead_reg): Change into inline function that is not called through for_each_rtx. 2010-10-14 09:17:54 +02:00
cselib.c rtl.def (DEBUG_IMPLICIT_PTR): New rtl code. 2010-09-09 08:43:47 +02:00
cselib.h
cstamp-h.in
DATESTAMP Daily bump. 2010-11-03 00:17:18 +00:00
dbgcnt.c
dbgcnt.def
dbgcnt.h
dbxout.c re PR c++/44561 (using nullptr_t with -flto/-fwhopr causes ICE: tree code 'lang_type' is not supported in gimple streams) 2010-10-14 11:59:47 +00:00
dbxout.h
dce.c
dce.h
ddg.c ddg.c (add_cross_iteration_register_deps): Call gcc_assert instead of gcc_checking_assert. 2010-10-21 21:39:13 +00:00
ddg.h
debug.c
debug.h
defaults.h common.opt (R, [...]): New. 2010-11-01 23:40:53 +00:00
DEV-PHASE
df-core.c re PR rtl-optimization/44374 (Hoist same instructions in different branches) 2010-09-23 10:04:33 +00:00
df-problems.c re PR rtl-optimization/44374 (Hoist same instructions in different branches) 2010-09-23 10:04:33 +00:00
df-scan.c vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
df.h re PR rtl-optimization/44374 (Hoist same instructions in different branches) 2010-09-23 10:04:33 +00:00
dfp.c
dfp.h
diagnostic-core.h
diagnostic.c opt-functions.awk (static_var): Update comment. 2010-09-30 14:53:12 +01:00
diagnostic.def
diagnostic.h opts-common.c (handle_option, [...]): Add diagnostic_context parameter. 2010-10-05 15:28:39 +01:00
dojump.c
dominance.c
domwalk.c
domwalk.h
double-int.c
double-int.h
dse.c
dse.h
dwarf2asm.c re PR middle-end/45862 (SUPPORTS_WEAK is documented as a C expression, used as a compile time constant) 2010-10-11 16:52:12 +00:00
dwarf2asm.h
dwarf2out.c Emit SEH unwind info. 2010-10-31 17:40:33 -07:00
dwarf2out.h re PR middle-end/45484 (Invalid memory access in gcc.c-torture/execute/builtins/sprintf-chk.c) 2010-09-03 16:46:39 +02:00
ebitmap.c
ebitmap.h
emit-rtl.c emit-rtl.c (mark_used_flags): New function. 2010-10-31 01:58:12 +00:00
emit-rtl.h
emutls.c
errors.c
errors.h
et-forest.c et-forest.c (et_nca): Return NULL immediately when the dominance forest has disjoint components. 2010-10-14 11:08:45 +04:00
et-forest.h
except.c Hookize TARGET_UNWIND_INFO et al. 2010-09-28 13:44:58 -07:00
except.h
exec-tool.in Support '-plugin' as the second option to the linker. 2010-10-12 09:40:39 -07:00
explow.c re PR rtl-optimization/33721 ([meta-bug] Gcc can't properly align stack variable) 2010-10-09 15:05:51 -07:00
expmed.c expr.c (emit_group_load_1): Update calls to extract_bit_field. 2010-10-22 00:40:15 +00:00
expmed.h
expr.c expr.c (emit_group_load_1): Update calls to extract_bit_field. 2010-10-22 00:40:15 +00:00
expr.h expr.c (emit_group_load_1): Update calls to extract_bit_field. 2010-10-22 00:40:15 +00:00
final.c tm.texi.in (TARGET_ASM_JUMP_ALIGN_MAX_SKIP): New. 2010-10-19 17:07:50 -04:00
fixed-value.c
fixed-value.h
flag-types.h flag-types.h: New. 2010-10-12 12:25:16 +01:00
flags.h flag-types.h: New. 2010-10-12 12:25:16 +01:00
fold-const.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
fp-test.c
FSFChangeLog
FSFChangeLog.10
FSFChangeLog.11
function.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
function.h Stack usage support 2010-08-30 20:04:49 +00:00
fwprop.c fwprop.c (forward_propagate_and_simplify): Only attach a REG_EQUAL note to an insn if the destination is a register. 2010-09-13 14:18:31 +00:00
gbl-ctors.h
gcc-plugin.h
gcc.c common.opt (R, [...]): New. 2010-11-01 23:40:53 +00:00
gcc.h
gccspec.c
gcov-dump.c
gcov-io.c
gcov-io.h
gcov-iov.c
gcov.c
gcse.c re PR debug/46252 (-fcompare-debug failure (length) with -O -frerun-cse-after-loop -fno-tree-loop-optimize -funroll-loops) 2010-11-03 09:38:42 +01:00
gcse.h
gdbinit.in
genattr.c
genattrtab.c
genautomata.c vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
gencheck.c
genchecksum.c Build compiler checksum from object files v2 2010-10-11 13:06:50 +00:00
gencodes.c
genconditions.c
genconfig.c
genconstants.c
genemit.c
genenums.c
genextract.c
genflags.c
gengenrtl.c
gengtype-lex.l
gengtype-parse.c gengtype.c: Reindented. 2010-09-24 17:37:16 +00:00
gengtype.c gengtype.c (new_structure): Remove ad-hoc "location_s" processing. 2010-10-19 06:47:02 +00:00
gengtype.h gengtype.c (verbosity_level): Added variable. 2010-10-18 06:05:28 +00:00
genhooks.c
genmddeps.c
genmodes.c tm.texi.in (OVERRIDE_OPTIONS): Remove documentation. 2010-09-16 12:59:39 +01:00
genmultilib
genopinit.c Add fma support 2010-10-15 17:42:05 +00:00
genoutput.c
genpeep.c
genpreds.c
genrecog.c
gensupport.c
gensupport.h
ggc-common.c params.c (set_param_value_internal): New. 2010-10-11 13:28:40 +01:00
ggc-internal.h
ggc-none.c
ggc-page.c
ggc-zone.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
ggc.h
gimple-fold.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
gimple-iterator.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
gimple-low.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
gimple-pretty-print.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
gimple-pretty-print.h
gimple.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
gimple.def
gimple.h gimple.h (gimple_register_canonical_type): Declare. 2010-10-22 17:50:19 +00:00
gimplify.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
glimits.h
graph.c F^C the vcg dump bug. 2010-10-14 01:48:43 +00:00
graph.h
graphds.c
graphds.h
graphite-blocking.c Outline lst_niter_for_loop. 2010-09-30 21:20:14 +00:00
graphite-clast-to-gimple.c Fix Graphite memory leaks. 2010-09-30 21:21:29 +00:00
graphite-clast-to-gimple.h
graphite-cloog-compat.h New flag: -fgraphite-dump-cloog. 2010-09-30 21:21:21 +00:00
graphite-cloog-util.c Enable graphite to read an OpenScop file. 2010-09-30 21:17:12 +00:00
graphite-cloog-util.h Enable graphite to read an OpenScop file. 2010-09-30 21:17:12 +00:00
graphite-dependences.c Avoid set but not used warning. 2010-09-30 21:19:26 +00:00
graphite-dependences.h
graphite-flattening.c Fix comments. 2010-09-30 21:20:52 +00:00
graphite-interchange.c Fix pbb_number_of_iterations_at_time. 2010-09-30 21:20:30 +00:00
graphite-poly.c Fix Graphite memory leaks. 2010-09-30 21:21:29 +00:00
graphite-poly.h New pass: loop flattening. 2010-09-30 21:20:45 +00:00
graphite-ppl.c
graphite-ppl.h
graphite-scop-detection.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
graphite-scop-detection.h
graphite-sese-to-poly.c vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
graphite-sese-to-poly.h
graphite.c Fix PR45758: reset scevs before Graphite. 2010-09-30 21:22:07 +00:00
graphite.h
gsstruct.def
gstab.h
gsyms.h
gsyslimits.h
gthr-aix.h
gthr-dce.h
gthr-gnat.c
gthr-gnat.h
gthr-lynx.h
gthr-mipssde.h
gthr-nks.h
gthr-posix95.h re PR libobjc/19850 (libobjc leaks threads on posix) 2010-09-06 15:57:44 +00:00
gthr-posix.c
gthr-posix.h re PR libobjc/19850 (libobjc leaks threads on posix) 2010-09-06 15:57:44 +00:00
gthr-rtems.h
gthr-single.h
gthr-solaris.h
gthr-tpf.h
gthr-vxworks.h
gthr-win32.h
gthr.h
haifa-sched.c Model decoder of Core 2/i7 for multipass scheduling. 2010-11-02 16:02:09 +00:00
hard-reg-set.h
highlev-plugin-common.h
hooks.c target.def (target_option.init_struct): New hook. 2010-10-15 20:19:05 +01:00
hooks.h target.def (target_option.init_struct): New hook. 2010-10-15 20:19:05 +01:00
host-default.c
hosthooks-def.h
hosthooks.h
hwint.h
ifcvt.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
implicit-zee.c
incpath.c incpath.c (remove_duplicates): If name is not a directory, issue a warning rather than an error. 2010-09-15 17:27:24 +00:00
incpath.h
init-regs.c
input.c
input.h
insn-addr.h
insn-notes.def
integrate.c
integrate.h
intl.c
intl.h
ipa-cp.c re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
ipa-inline.c re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
ipa-prop.c re PR middle-end/45687 (possible wrong code bug) 2010-10-26 13:39:37 +00:00
ipa-prop.h tree-sra.c (build_ref_for_offset): Loc made a parameter. 2010-09-14 16:09:38 +02:00
ipa-pure-const.c re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
ipa-ref-inline.h
ipa-ref.c
ipa-ref.h
ipa-reference.c extend.texi: (attribute leaf): Document. 2010-09-24 19:14:51 +00:00
ipa-reference.h
ipa-split.c re PR tree-optimization/45612 (Reference to undefined label building libada on Solaris 2/SPARC) 2010-10-09 12:15:31 +00:00
ipa-struct-reorg.c
ipa-struct-reorg.h
ipa-type-escape.c
ipa-type-escape.h
ipa-utils.c
ipa-utils.h
ipa.c ipa.c (process_references): Enqueue all referenced nodes; mark as reachable only non-external nodes. 2010-10-26 22:42:53 +00:00
ira-build.c
ira-color.c common.opt (fira-coalesce): Remove. 2010-10-04 20:37:57 +00:00
ira-conflicts.c target.def (class_likely_spilled_p): New hook. 2010-09-02 18:29:37 +04:00
ira-costs.c re PR rtl-optimization/45912 (Patch for PR tree-optimization/44972 caused 2500+ FAILs on Solaris 2/SPARC) 2010-10-13 21:43:42 +00:00
ira-emit.c re PR fortran/42169 (gfortran.dg/pr41928.f90:47: internal compiler error: in store_can_be_removed_p, at ira-emit.c:371) 2010-10-20 13:51:31 +00:00
ira-int.h
ira-lives.c re PR bootstrap/45445 (ARM bootstrap failure: comparison failures after stage 3) 2010-10-11 19:39:37 +00:00
ira.c ira.c (setup_class_hard_regs): Fix typo in indexing ira_non_ordered_class_hard_regs and ira_class_hard_reg_index. 2010-10-14 03:07:59 +00:00
ira.h
jump.c
lambda-code.c
lambda-mat.c
lambda-trans.c
lambda.h builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
langhooks-def.h target.def (target_option.init_struct): New hook. 2010-10-15 20:19:05 +01:00
langhooks.c target.def (target_option.init_struct): New hook. 2010-10-15 20:19:05 +01:00
langhooks.h Makefile.in (TM_H): Include $(FLAGS_H) instead of options.h. 2010-10-08 16:17:32 +01:00
LANGUAGES
lcm.c
libfuncs.h
libgcc2.c libgcc2.h: Use __SIZEOF_LONG_LONG__ instead of LONG_LONG_TYPE_SIZE. 2010-10-09 21:12:56 +00:00
libgcc2.h cppbuiltin.c (define_builtin_macros_for_type_sizes): Define __BYTE_ORDER__... 2010-10-23 03:05:47 +00:00
libgcc-libsystem.ver
libgcc-std.ver common.opt (fsplit-stack): New option. 2010-09-27 19:48:20 +00:00
libgcov.c defaults.h (TARGET_VTABLE_USES_DESCRIPTORS): Move under ifdef GCC_INSN_FLAGS_H. 2010-11-01 20:38:40 +00:00
limitx.h
limity.h
lists.c
longlong.h
loop-doloop.c
loop-init.c
loop-invariant.c
loop-iv.c
loop-unroll.c
loop-unswitch.c
lower-subreg.c re PR middle-end/44569 (ICE in simplify_subreg for debug insn with CONCATN) 2010-10-30 21:55:16 +02:00
lto-cgraph.c cgraph.c (dump_cgraph_node): Dump same_comdat_group, only_called_at_startup and only_called_at_exit. 2010-10-16 16:59:07 +00:00
lto-compress.c
lto-compress.h
lto-opts.c opts-common.c (handle_option, [...]): Add diagnostic_context parameter. 2010-10-05 15:28:39 +01:00
lto-section-in.c
lto-section-out.c
lto-streamer-in.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
lto-streamer-out.c re PR lto/45667 (ICE: verify_stmts failed: type mismatch in address expression with -flto) 2010-10-20 14:11:06 +00:00
lto-streamer.c tree.c (tree_node_structure_for_code): TRANSLATION_UNIT_DECL is TS_TRANSLATION_UNIT_DECL. 2010-09-16 09:38:13 +00:00
lto-streamer.h tree.c (tree_node_structure_for_code): TRANSLATION_UNIT_DECL is TS_TRANSLATION_UNIT_DECL. 2010-09-16 09:38:13 +00:00
lto-symtab.c lto-symtab.c (lto_symtab_entry_def): Add guessed field. 2010-09-24 21:47:59 +00:00
lto-wrapper.c common.opt (combine): Remove. 2010-09-17 09:04:14 +00:00
machmode.def tm.texi.in (OVERRIDE_OPTIONS): Remove documentation. 2010-09-16 12:59:39 +01:00
machmode.h machmode.h (mode_for_vector): Declare. 2010-10-07 14:36:38 +00:00
main.c
Makefile.in configure.ac: Remove elf_getshdrstrndx test. 2010-11-02 14:53:15 +00:00
matrix-reorg.c
mcf.c
mips-tdump.c
mips-tfile.c
mkconfig.sh
mkmap-flat.awk
mkmap-symver.awk
mode-classes.def
mode-switching.c target.def (class_likely_spilled_p): New hook. 2010-09-02 18:29:37 +04:00
modulo-sched.c
omega.c
omega.h
omp-builtins.def re PR middle-end/45838 (FAIL: libgomp.c/pr34513.c execution test) 2010-10-06 09:47:28 +02:00
omp-low.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
ONEWS
opt-functions.awk Fix PR bootstrap/35855: awk character classes. 2010-10-11 17:58:53 +00:00
opt-gather.awk
optabs.c
optabs.h Add fma support 2010-10-15 17:42:05 +00:00
optc-gen.awk Fix PR bootstrap/35855: awk character classes. 2010-10-11 17:58:53 +00:00
opth-gen.awk flag-types.h: New. 2010-10-12 12:25:16 +01:00
opts-common.c common.opt (R, [...]): New. 2010-11-01 23:40:53 +00:00
opts-diagnostic.h
opts.c target.h (enum opt_levels, [...]): New. 2010-10-22 13:14:45 +01:00
opts.h Makefile.in (TM_H): Include $(FLAGS_H) instead of options.h. 2010-10-08 16:17:32 +01:00
output.h common.opt (fsplit-stack): New option. 2010-09-27 19:48:20 +00:00
params.c params.c (params_finished): New. 2010-10-14 11:22:43 +01:00
params.def invoke.texi (-flto-partition, [...]): Document. 2010-10-05 17:57:09 +00:00
params.h params.c (params_finished): New. 2010-10-14 11:22:43 +01:00
passes.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
plugin.c opts-common.c (handle_option, [...]): Add diagnostic_context parameter. 2010-10-05 15:28:39 +01:00
plugin.def
plugin.h opts-common.c (handle_option, [...]): Add diagnostic_context parameter. 2010-10-05 15:28:39 +01:00
pointer-set.c
pointer-set.h
postreload-gcse.c
postreload.c re PR target/40457 (use stm and ldm to access consecutive memory words) 2010-09-29 20:06:55 +00:00
predict.c cgraph.c (dump_cgraph_node): Dump same_comdat_group, only_called_at_startup and only_called_at_exit. 2010-10-16 16:59:07 +00:00
predict.def
predict.h
prefix.c
prefix.h
pretty-print.c
pretty-print.h
print-rtl.c re PR middle-end/45234 (ICE in expand_call, at calls.c:2845 when passing aligned function argument from unaligned stack after alloca) 2010-09-24 16:37:02 +02:00
print-tree.c * print-tree.c (print_node): Print in-constant-pool. 2010-09-27 10:16:44 +00:00
profile.c
profile.h
read-md.c
read-md.h
read-rtl.c
README.Portability
real.c
real.h
realmpfr.c
realmpfr.h
recog.c recog.c (split_all_insns): Remove dead code. 2010-10-28 21:20:01 +00:00
recog.h target.def (preferred_output_reload_class): New hook. 2010-10-17 19:27:53 +04:00
reg-notes.def
reg-stack.c reg-stack.c (convert_regs_1): Return boolean value, true if the CFG has been modified. 2010-10-24 20:50:20 +00:00
regcprop.c
reginfo.c optc-gen.awk: Generate global_options initializer instead of individual variables. 2010-09-29 15:49:14 +01:00
regmove.c target.def (class_likely_spilled_p): New hook. 2010-09-02 18:29:37 +04:00
regrename.c optc-gen.awk: Generate global_options initializer instead of individual variables. 2010-09-29 15:49:14 +01:00
regs.h target.def (class_likely_spilled_p): New hook. 2010-09-02 18:29:37 +04:00
regset.h
regstat.c
reload1.c re PR debug/46252 (-fcompare-debug failure (length) with -O -frerun-cse-after-loop -fno-tree-loop-optimize -funroll-loops) 2010-11-03 09:38:42 +01:00
reload.c target.def (preferred_output_reload_class): New hook. 2010-10-17 19:27:53 +04:00
reload.h
reorg.c re PR rtl-optimization/45593 (segfault with -Os) 2010-09-15 22:48:00 +00:00
resource.c optc-gen.awk: Generate global_options initializer instead of individual variables. 2010-09-29 15:49:14 +01:00
resource.h
rtl-error.c
rtl-error.h
rtl.c rtl.h: Include hashtab.h. 2010-10-12 08:24:07 +02:00
rtl.def Add fma support 2010-10-15 17:42:05 +00:00
rtl.h rtl.h: Include hashtab.h. 2010-10-12 08:24:07 +02:00
rtlanal.c re PR target/40457 (use stm and ldm to access consecutive memory words) 2010-09-29 20:06:55 +00:00
rtlhooks-def.h
rtlhooks.c
sbitmap.c
sbitmap.h
sched-deps.c sched-deps.c (sched_insn_is_legitimate_for_speculation): Invoke may_trap_or_fault_p instead of may_trap_p predicate. 2010-10-14 13:39:18 +00:00
sched-ebb.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
sched-int.h Model decoder of Core 2/i7 for multipass scheduling. 2010-11-02 16:02:09 +00:00
sched-rgn.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
sched-vis.c sel-sched-ir.c (init_global_and_expr_for_insn): Set CANT_MOVE on RTX_FRAME_RELATED_P insns and the insn to which... 2010-10-14 11:59:57 +04:00
sdbout.c re PR c++/44561 (using nullptr_t with -flto/-fwhopr causes ICE: tree code 'lang_type' is not supported in gimple streams) 2010-10-14 11:59:47 +00:00
sdbout.h
sel-sched-dump.c
sel-sched-dump.h
sel-sched-ir.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
sel-sched-ir.h sel-sched-ir.c (maybe_tidy_empty_bb): Simplify comment. 2010-10-14 11:39:07 +04:00
sel-sched.c Model decoder of Core 2/i7 for multipass scheduling. 2010-11-02 16:02:09 +00:00
sel-sched.h
sese.c
sese.h Fix miscompilation of 416.gamess. 2010-09-30 21:21:56 +00:00
simplify-rtx.c tree-vrp.c (extract_range_from_binary_expr): If flag_non_call_exceptions don't eliminate division by zero. 2010-10-23 16:18:32 +00:00
sparseset.c
sparseset.h
sreal.c
sreal.h
ssaexpand.h
stab.def
stack-ptr-mod.c
statistics.c
statistics.h
stmt.c re PR rtl-optimization/46226 (asm goto may leave stack pointer invalid) 2010-10-29 09:56:18 -07:00
stor-layout.c stor-layout.c (layout_decl): Use the field's type to determine the mode and keep DECL_BIT_FIELD for a... 2010-10-26 03:22:49 +00:00
store-motion.c
stringpool.c
sync-builtins.def builtin-attrs.def (ATTR_LEAF): New attribute. 2010-09-28 16:34:36 +00:00
system.h common.opt (R, [...]): New. 2010-11-01 23:40:53 +00:00
target-def.h
target-globals.c
target-globals.h
target.def Model decoder of Core 2/i7 for multipass scheduling. 2010-11-02 16:02:09 +00:00
target.h target.h (enum opt_levels, [...]): New. 2010-10-22 13:14:45 +01:00
targhooks.c tm.texi.in (TARGET_GET_RAW_RESULT_MODE): New. 2010-10-27 22:44:31 +00:00
targhooks.h tm.texi.in (TARGET_GET_RAW_RESULT_MODE): New. 2010-10-27 22:44:31 +00:00
timevar.c
timevar.def
timevar.h
tlink.c
toplev.c target.h (enum opt_levels, [...]): New. 2010-10-22 13:14:45 +01:00
toplev.h opts.c (set_fast_math_flags, [...]): Make static. 2010-10-16 13:13:21 +01:00
tracer.c
tree-affine.c
tree-affine.h
tree-browser.c
tree-browser.def
tree-call-cdce.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-cfg.c re PR debug/46255 (-fcompare-debug failure with -fprofile-generate) 2010-11-02 14:00:39 +01:00
tree-cfgcleanup.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-chrec.c
tree-chrec.h A function is affine when CHREC_RIGHT is invariant. 2010-09-30 21:18:27 +00:00
tree-complex.c basic-block.h (find_fallthru_edge): Define. 2010-10-21 02:33:33 +00:00
tree-data-ref.c re PR tree-optimization/44913 (-ftree-vectorize causes FAIL: gcc.dg/pr44838.c execution test) 2010-10-14 15:51:15 +00:00
tree-data-ref.h Use DR_IS_WRITE instead of !DR_IS_READ. 2010-09-03 20:05:42 +00:00
tree-dfa.c tree.def (TARGET_MEM_REF): Merge TMR_SYMBOL and TMR_BASE. 2010-09-03 09:50:17 +00:00
tree-diagnostic.c
tree-diagnostic.h
tree-dump.c tree.def (MISALIGNED_INDIRECT_REF): Remove. 2010-09-06 13:26:13 +00:00
tree-dump.h
tree-eh.c re PR middle-end/45854 (ICE in redirect_eh_edge_1, at tree-eh.c:2131) 2010-10-01 12:07:47 +00:00
tree-emutls.c
tree-flow-inline.h basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-flow.h tree-flow.h (gimple_purge_all_dead_abnormal_call_edges): Declare. 2010-10-18 16:44:38 +00:00
tree-if-conv.c re PR tree-optimization/46008 (Floating point condexpr not vectorized) 2010-10-14 21:34:16 +02:00
tree-inline.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-inline.h
tree-into-ssa.c tree-into-ssa.c (rewrite_update_enter_block): Remove unused variables. 2010-10-21 14:05:57 +00:00
tree-iterator.c
tree-iterator.h
tree-loop-distribution.c re PR tree-optimization/46177 (ICE: in prop_phis, at tree-loop-distribution.c:327 with -fno-tree-copy-prop -ftree-loop-distribution) 2010-11-02 15:45:26 +00:00
tree-loop-linear.c
tree-mudflap.c
tree-mudflap.h
tree-nested.c tree-nested.c (convert_all_function_calls): Iterate until after the sum of static chains in the nest doesn't change. 2010-08-31 21:05:22 +00:00
tree-nomudflap.c
tree-nrv.c
tree-object-size.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-optimize.c tree-optimize.c (execute_fixup_cfg): Purge dead abnormal call edges if there is a call statement to pure or const... 2010-10-20 17:30:10 +00:00
tree-outof-ssa.c
tree-parloops.c re PR tree-optimization/46111 (ICE: tree check: expected tree that contains 'decl minimal' structure, have 'mem_ref' in take_address_of, at tree-parloops.c:336 with -ftree-parallelize-loops -g) 2010-10-21 10:38:51 +00:00
tree-pass.h value-prof.c (gimple_divmod_fixed_value): Work on SSA form. 2010-10-05 10:42:24 +00:00
tree-phinodes.c
tree-predcom.c vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
tree-pretty-print.c re PR debug/45673 (-fcompare-debug failure with minor difference in dumps) 2010-10-08 04:40:59 +00:00
tree-pretty-print.h
tree-profile.c re PR lto/45736 (ICE: in cgraph_remove_unreachable_nodes, at ipa.c:245 with -flto and attribute((constructor))) 2010-10-26 16:40:16 +00:00
tree-scalar-evolution.c Also handle ARRAY_REFs in instantiate_scev_r. 2010-09-30 21:18:48 +00:00
tree-scalar-evolution.h
tree-sra.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-ssa-address.c re PR middle-end/45534 (ICE in refs_may_alias_p_1, at tree-ssa-alias.c:1031) 2010-09-06 12:14:02 +00:00
tree-ssa-alias.c re PR tree-optimization/44913 (-ftree-vectorize causes FAIL: gcc.dg/pr44838.c execution test) 2010-10-14 15:51:15 +00:00
tree-ssa-alias.h re PR tree-optimization/44913 (-ftree-vectorize causes FAIL: gcc.dg/pr44838.c execution test) 2010-10-14 15:51:15 +00:00
tree-ssa-ccp.c re PR tree-optimization/45919 (ICE: SIGSEGV in fold_ctor_reference (tree-ssa-ccp.c:1527) at -O1) 2010-10-20 23:17:30 +02:00
tree-ssa-coalesce.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-ssa-copy.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-ssa-copyrename.c
tree-ssa-dce.c
tree-ssa-dom.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-ssa-dse.c re PR tree-optimization/45970 (tree DSE misses many obvious dead stores) 2010-10-13 13:03:31 +00:00
tree-ssa-forwprop.c re PR tree-optimization/46216 (ICE: SSA corruption) 2010-11-02 16:58:40 +00:00
tree-ssa-ifcombine.c
tree-ssa-live.c vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
tree-ssa-live.h
tree-ssa-loop-ch.c
tree-ssa-loop-im.c * tree-ssa-loop-im.c (rewrite_reciprocal): Use build_one_cst. 2010-10-31 02:32:20 +00:00
tree-ssa-loop-ivcanon.c re PR tree-optimization/45605 (Missed devirtualization) 2010-09-20 15:48:42 +00:00
tree-ssa-loop-ivopts.c re PR bootstrap/45611 (SIGBUS in generate_option_input_file on Solaris 2/SPARC) 2010-09-13 10:47:28 +00:00
tree-ssa-loop-manip.c
tree-ssa-loop-niter.c tree-vrp.c (adjust_range_with_scev): Use number of iteration estimate. 2010-09-01 11:39:55 +00:00
tree-ssa-loop-prefetch.c tree.def (MISALIGNED_INDIRECT_REF): Remove. 2010-09-06 13:26:13 +00:00
tree-ssa-loop-unswitch.c
tree-ssa-loop.c New pass: loop flattening. 2010-09-30 21:20:45 +00:00
tree-ssa-math-opts.c
tree-ssa-operands.c tree.def (MISALIGNED_INDIRECT_REF): Remove. 2010-09-06 13:26:13 +00:00
tree-ssa-operands.h
tree-ssa-phiopt.c re PR tree-optimization/45860 (ICE: verify_ssa failed: virtual SSA name for non-VOP decl at -O1) 2010-10-20 11:09:54 +00:00
tree-ssa-phiprop.c
tree-ssa-pre.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-ssa-propagate.c re PR tree-optimization/45580 (Building WebKit fails with compiler catching SIGSEGV in gimple_fold_obj_type_ref_known_binfo()) 2010-09-21 09:52:00 +00:00
tree-ssa-propagate.h
tree-ssa-reassoc.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-ssa-sccvn.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-ssa-sccvn.h
tree-ssa-sink.c re PR tree-optimization/33244 (Missed opportunities for vectorization) 2010-09-08 12:34:52 +00:00
tree-ssa-structalias.c re PR tree-optimization/46149 (26_numerics/valarray/27867.cc FAILs with -O2 -fno-tree-sra) 2010-11-02 17:00:09 +00:00
tree-ssa-ter.c basic-block.h (single_succ_edge): Use gcc_checking_assert. 2010-10-21 13:08:28 +00:00
tree-ssa-threadedge.c
tree-ssa-threadupdate.c
tree-ssa-uncprop.c
tree-ssa-uninit.c uninit var analysis enhancement 2010-10-15 23:16:59 +00:00
tree-ssa.c gimple.h (gimple_register_canonical_type): Declare. 2010-10-22 17:50:19 +00:00
tree-ssanames.c tree-ssanames.c (release_dead_ssa_names): Do not remove callee edges here. 2010-09-22 12:15:56 +00:00
tree-stdarg.c
tree-stdarg.h
tree-switch-conversion.c foldconst-1.c: New testcase. 2010-09-04 16:02:38 +00:00
tree-tailcall.c Hookize TARGET_UNWIND_INFO et al. 2010-09-28 13:44:58 -07:00
tree-vect-data-refs.c re PR middle-end/45720 (Revision 164367 miscompiled SPEC CPU 2K) 2010-10-22 14:44:48 +00:00
tree-vect-generic.c
tree-vect-loop-manip.c re PR middle-end/45720 (Revision 164367 miscompiled SPEC CPU 2K) 2010-10-22 14:44:48 +00:00
tree-vect-loop.c re PR tree-optimization/46184 (ICE: SIGSEGV in vectorizable_reduction (tree-vect-loop.c:4067) with -O -ftree-vectorize -fno-tree-copy-prop -fno-tree-dce) 2010-11-02 15:46:46 +00:00
tree-vect-patterns.c re PR tree-optimization/46167 (ICE: SIGSEGV in flow_bb_inside_loop_p (cfgloop.c:776) with -O -ftree-vectorize) 2010-10-26 15:53:28 +00:00
tree-vect-slp.c fold-const.c (build_zero_vector): Use build_vector_from_val. 2010-10-31 02:20:22 +00:00
tree-vect-stmts.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree-vectorizer.c tree-vectorizer.c: Fix documentation. 2010-09-16 10:35:14 +00:00
tree-vectorizer.h re PR tree-optimization/46049 (ICE: in expand_widen_pattern_expr, at optabs.c:522 with -ftree-vectorize) 2010-10-21 13:36:56 +00:00
tree-vrp.c tree-vrp.c (extract_range_from_binary_expr): If flag_non_call_exceptions don't eliminate division by zero. 2010-10-23 16:18:32 +00:00
tree.c builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. 2010-11-03 00:49:00 +00:00
tree.def re PR c++/44561 (using nullptr_t with -flto/-fwhopr causes ICE: tree code 'lang_type' is not supported in gimple streams) 2010-10-14 11:59:47 +00:00
tree.h tree.h (EXPR_LOC_OR_HERE): New macro. 2010-10-31 22:04:39 -04:00
treestruct.def tree.c (tree_node_structure_for_code): TRANSLATION_UNIT_DECL is TS_TRANSLATION_UNIT_DECL. 2010-09-16 09:38:13 +00:00
tsystem.h
typeclass.h
unwind-c.c
unwind-compat.c
unwind-compat.h
unwind-dw2-fde-compat.c
unwind-dw2-fde-darwin.c
unwind-dw2-fde-glibc.c Include <link.h> only if USE_PT_GNU_EH_FRAME is defined. 2010-09-07 14:14:41 -07:00
unwind-dw2-fde.c
unwind-dw2-fde.h
unwind-dw2.c
unwind-dw2.h
unwind-generic.h
unwind-pe.h
unwind-sjlj.c
unwind.inc
value-prof.c value-prof.c (gimple_divmod_fixed_value): Work on SSA form. 2010-10-05 10:42:24 +00:00
value-prof.h
var-tracking.c re PR target/45250 (FAIL: tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_nan.cc) 2010-11-01 08:58:46 +01:00
varasm.c varasm.c (constructor_static_from_elts_p): Don't require a CONSTRUCTOR to have elements to be suitable for static... 2010-10-26 13:57:44 -04:00
varpool.c lto-symtab.c (lto_symtab_entry_def): Add guessed field. 2010-09-24 21:47:59 +00:00
vec.c
vec.h vec.h (VEC_qsort): Define. 2010-10-11 15:08:28 +00:00
vecir.h
vecprim.h
version.c
version.h
vmsdbg.h
vmsdbgout.c
web.c
xcoff.h
xcoffout.c
xcoffout.h

Copyright (C) 2000, 2003 Free Software Foundation, Inc.

This file is intended to contain a few notes about writing C code
within GCC so that it compiles without error on the full range of
compilers GCC needs to be able to compile on.

The problem is that many ISO-standard constructs are not accepted by
either old or buggy compilers, and we keep getting bitten by them.
This knowledge until know has been sparsely spread around, so I
thought I'd collect it in one useful place.  Please add and correct
any problems as you come across them.

I'm going to start from a base of the ISO C90 standard, since that is
probably what most people code to naturally.  Obviously using
constructs introduced after that is not a good idea.

For the complete coding style conventions used in GCC, please read
http://gcc.gnu.org/codingconventions.html


String literals
---------------

Irix6 "cc -n32" and OSF4 "cc" have problems with constant string
initializers with parens around it, e.g.

const char string[] = ("A string");

This is unfortunate since this is what the GNU gettext macro N_
produces.  You need to find a different way to code it.

Some compilers like MSVC++ have fairly low limits on the maximum
length of a string literal; 509 is the lowest we've come across.  You
may need to break up a long printf statement into many smaller ones.


Empty macro arguments
---------------------

ISO C (6.8.3 in the 1990 standard) specifies the following:

If (before argument substitution) any argument consists of no
preprocessing tokens, the behavior is undefined.

This was relaxed by ISO C99, but some older compilers emit an error,
so code like

#define foo(x, y) x y
foo (bar, )

needs to be coded in some other way.


free and realloc
----------------

Some implementations crash upon attempts to free or realloc the null
pointer.  Thus if mem might be null, you need to write

  if (mem)
    free (mem);


Trigraphs
---------

You weren't going to use them anyway, but some otherwise ISO C
compliant compilers do not accept trigraphs.


Suffixes on Integer Constants
-----------------------------

You should never use a 'l' suffix on integer constants ('L' is fine),
since it can easily be confused with the number '1'.


			Common Coding Pitfalls
			======================

errno
-----

errno might be declared as a macro.


Implicit int
------------

In C, the 'int' keyword can often be omitted from type declarations.
For instance, you can write

  unsigned variable;

as shorthand for

  unsigned int variable;

There are several places where this can cause trouble.  First, suppose
'variable' is a long; then you might think

  (unsigned) variable

would convert it to unsigned long.  It does not.  It converts to
unsigned int.  This mostly causes problems on 64-bit platforms, where
long and int are not the same size.

Second, if you write a function definition with no return type at
all:

  operate (int a, int b)
  {
    ...
  }

that function is expected to return int, *not* void.  GCC will warn
about this.

Implicit function declarations always have return type int.  So if you
correct the above definition to

  void
  operate (int a, int b)
  ...

but operate() is called above its definition, you will get an error
about a "type mismatch with previous implicit declaration".  The cure
is to prototype all functions at the top of the file, or in an
appropriate header.

Char vs unsigned char vs int
----------------------------

In C, unqualified 'char' may be either signed or unsigned; it is the
implementation's choice.  When you are processing 7-bit ASCII, it does
not matter.  But when your program must handle arbitrary binary data,
or fully 8-bit character sets, you have a problem.  The most obvious
issue is if you have a look-up table indexed by characters.

For instance, the character '\341' in ISO Latin 1 is SMALL LETTER A
WITH ACUTE ACCENT.  In the proper locale, isalpha('\341') will be
true.  But if you read '\341' from a file and store it in a plain
char, isalpha(c) may look up character 225, or it may look up
character -31.  And the ctype table has no entry at offset -31, so
your program will crash.  (If you're lucky.)

It is wise to use unsigned char everywhere you possibly can.  This
avoids all these problems.  Unfortunately, the routines in <string.h>
take plain char arguments, so you have to remember to cast them back
and forth - or avoid the use of strxxx() functions, which is probably
a good idea anyway.

Another common mistake is to use either char or unsigned char to
receive the result of getc() or related stdio functions.  They may
return EOF, which is outside the range of values representable by
char.  If you use char, some legal character value may be confused
with EOF, such as '\377' (SMALL LETTER Y WITH UMLAUT, in Latin-1).
The correct choice is int.

A more subtle version of the same mistake might look like this:

  unsigned char pushback[NPUSHBACK];
  int pbidx;
  #define unget(c) (assert(pbidx < NPUSHBACK), pushback[pbidx++] = (c))
  #define get(c) (pbidx ? pushback[--pbidx] : getchar())
  ...
  unget(EOF);

which will mysteriously turn a pushed-back EOF into a SMALL LETTER Y
WITH UMLAUT.


Other common pitfalls
---------------------

o Expecting 'plain' char to be either sign or unsigned extending.

o Shifting an item by a negative amount or by greater than or equal to
  the number of bits in a type (expecting shifts by 32 to be sensible
  has caused quite a number of bugs at least in the early days).

o Expecting ints shifted right to be sign extended.

o Modifying the same value twice within one sequence point.

o Host vs. target floating point representation, including emitting NaNs
  and Infinities in a form that the assembler handles.

o qsort being an unstable sort function (unstable in the sense that
  multiple items that sort the same may be sorted in different orders
  by different qsort functions).

o Passing incorrect types to fprintf and friends.

o Adding a function declaration for a module declared in another file to
  a .c file instead of to a .h file.