aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
AgeCommit message (Collapse)AuthorFilesLines
2004-01-23fold-const.c (fold_binary_op_with_conditional_arg): Only build a ↵Eric Botcazou1-1/+7
COMPOUND_EXPR if 'arg' is really a SAVE_EXPR. * fold-const.c (fold_binary_op_with_conditional_arg): Only build a COMPOUND_EXPR if 'arg' is really a SAVE_EXPR. Co-Authored-By: Olivier Hainque <hainque@act-europe.fr> From-SVN: r76434
2004-01-20fold-const.c (fold_convert): Rename to fold_convert_const.Roger Sayle1-33/+44
* fold-const.c (fold_convert): Rename to fold_convert_const. (fold_convert_const): Change arguments to take a tree_code, a type and the operand/expression to be converted. Return NULL_TREE if no simplification is possible. Add support for FIX_CEIL_EXPR and FIX_FLOOR_EXPR in addition to FIX_TRUNC_EXPR. (fold): Handle FIX_CEIL_EXPR and FIX_FLOOR_EXPR. Adjust call to fold_convert to match new fold_convert_const. Avoid modifying the tree passed to fold in-place. From-SVN: r76237
2004-01-20c-decl.c (c_init_decl_processing): Set pedantic_lvalues to true unconditionally.Joseph Myers1-3/+3
* c-decl.c (c_init_decl_processing): Set pedantic_lvalues to true unconditionally. * c-typeck.c (unary_complex_lvalue, pedantic_lvalue_warning): Remove. (build_unary_op, build_modify_expr): Don't handle extended lvalues. (build_component_ref, build_conditional_expr): Call non_lvalue instead of pedantic_non_lvalue. (build_c_cast): Don't condition use of non_lvalue on pedantic. * fold-const.c (fold): Don't check pedantic directly for COMPOUND_EXPR. Ensure that results for COMPOUND_EXPR are passed to pedantic_non_lvalue. * doc/extend.texi: Remove documentation of extended lvalues. testsuite: * gcc.c-torture/compile/981022-1.c: Remove. * gcc.dg/array-5.c: Remove XFAIL. * gcc.dg/sequence-pt-1.c: Remove test using extended lvalues. * gcc.dg/cast-lvalue-1.c, gcc.dg/compound-lvalue-1.c, gcc.dg/cond-lvalue-1.c: Update. * gcc.dg/cast-lvalue-2.c: New test. From-SVN: r76192
2004-01-16c-common.h: Fix comment formatting.Kazu Hirata1-1/+1
* c-common.h: Fix comment formatting. * c-cppbuiltin.c: Likewise. * c-pragma.c: Likewise. * calls.c: Likewise. * collect2.c: Likewise. * cppcharset.c: Likewise. * cpptrad.c: Likewise. * dbxout.c: Likewise. * defaults.h: Likewise. * dwarf2out.c: Likewise. * fold-const.c: Likewise. * genautomata.c: Likewise. * genconditions.c: Likewise. * genflags.c: Likewise. * gengtype.c: Likewise. * integrate.c: Likewise. * loop.c: Likewise. * predict.c: Likewise. * sdbout.c: Likewise. From-SVN: r75957
2004-01-06alias.c: Fix comment typos.Kazu Hirata1-1/+1
* alias.c: Fix comment typos. * builtins.c: Likewise. * cfg.c: Likewise. * df.c: Likewise. * dominance.c: Likewise. * dwarf2out.c: Likewise. * emit-rtl.c: Likewise. * expr.c: Likewise. * final.c: Likewise. * fold-const.c: Likewise. * gcse.c: Likewise. * genattrtab.c: Likewise. * genrecog.c: Likewise. * gensupport.c: Likewise. * ggc-zone.c: Likewise. * integrate.c: Likewise. * local-alloc.c: Likewise. * loop.c: Likewise. * recog.c: Likewise. * regmove.c: Likewise. * reg-stack.c: Likewise. * reorg.c: Likewise. * rtlanal.c: Likewise. * rtl.h: Likewise. * sched-ebb.c: Likewise. * simplify-rtx.c: Likewise. * toplev.c: Likewise. * varasm.c: Likewise. From-SVN: r75475
2003-12-30fold-const.c (fold): Don't require strict type equality...Roger Sayle1-1/+2
* fold-const.c (fold) <COND_EXPR>: Don't require strict type equality, instead just prevent replacing a COND_EXPR of non-void type by one of its operands of void type. From-SVN: r75239
2003-12-29re PR fortran/12632 ([g77 only] -fbounds-check ICE)Roger Sayle1-3/+10
PR fortran/12632 * fold-const.c (fold) <COND_EXPR>: Don't fold a constant condition, if the type of the selected branch doesn't match its' parent. * com.c (ffecom_subscript_check_): Take as an extra argument the (possibly NULL) decl of the array. Don't create unnecessary tree nodes if the array index is known to be safe at compile-time. If the array index is unsafe, force the array decl into memory to avoid RTL expansion problems. (ffecom_array_ref_): Update calls to ffecom_subscript_check_. (ffecom_char_args_x_): Likewise. * g77.dg/12632.f: New test case. From-SVN: r75203
2003-12-20expr.c (check_max_integer_computation_mode): Remove.Kazu Hirata1-3/+0
* expr.c (check_max_integer_computation_mode): Remove. * dojump.c (do_jump): Don't use MAX_INTEGER_COMPUTATION_MODE. * fold-const.c (fold): Likewise. * system.h (MAX_INTEGER_COMPUTATION_MODE): Poison. * doc/tm.texi (MAX_INTEGER_COMPUTATION_MODE): Remove. From-SVN: r74868
2003-11-24fold-const.c (fold): Do not return early when optimizing COMPONENT_REF and ↵Jan Hubicka1-1/+2
constant. * fold-const.c (fold): Do not return early when optimizing COMPONENT_REF and constant. From-SVN: r73870
2003-11-01re PR middle-end/11968 (Array reference is incorrectly computed for ↵Roger Sayle1-2/+5
POINTERS_EXTEND_UNSIGNED) PR middle-end/11968 * expr.c (expand_expr <MULT_EXPR>): Remove inappropriate and confusing comment; distributivity isn't handled in expand_expr. * fold-const.c (extract_muldiv_1 <PLUS_EXPR>): Allow overflow in distributivity, if wrap-around semantics are specified with -fwrapv. From-SVN: r73166
2003-10-29fold-const.c (fold_single_bit_test): Convert the input to the operational ↵Richard Henderson1-6/+7
intermediate type. * fold-const.c (fold_single_bit_test): Convert the input to the operational intermediate type. From-SVN: r73077
2003-10-15fold-const.c (tree_swap_operands_p): disables some features when optimizing ↵Gábor Lóki1-0/+3
for size. 2003-10-15 G�bor L�ki <alga@rgai.hu> * fold-const.c (tree_swap_operands_p): disables some features when optimizing for size. From-SVN: r72538
2003-10-11fold-const.c (negate_mathfn_p): New function to determine whether a built-in ↵Roger Sayle1-81/+147
mathematical function is sign... * fold-const.c (negate_mathfn_p): New function to determine whether a built-in mathematical function is sign preserving, f(-x) == -f(x). Add support for BUILT_IN_ASIN, BUILT_IN_ASINF and BUILT_IN_ASINL. (tree_swap_operands_p): Change API to take an additional argument indicating that the swapped operands evaluate in reverse order. Canonicalize VAR_DECLs and PARM_DECLs last if we can, i.e. neither operand side-effects or we don't care about flag_evaluation_order. (reorder_operands_p): New function to check whether its safe to evaluate the given operands in reverse order. (negate_expr_p): We can always negate integer constants unless we honor -ftrapv and the signed type would overflow. Only allow -(A-B) into B-A if reorder_operands_p says that its OK. Allow negation of COMPLEX_CST if both real and imaginary parts can be negated. Allow negation through floating point extensions and sign-preserving built-in functions. (negate_expr): Move the code to negate integers from "fold" to here. Always negate integer constants unless we honor -ftrapv and the signed type would overflow. Always negate real constants unless we honor -ftrapping-math. Only convert -(A-B) into B-A if allowed by reorder_operands_p. Add support for COMPLEX_CST. Optimize negation through floating point extensions and sign-preserving built-in functions (as defined by negate_mathfn_p). (fold): Adjust calls to tree_swap_operands_p. (fold <NEGATE_EXPR>): Move the remaining negation optimizations to negate_expr_p/negate_expr. (fold <MINUS_EXPR>): Use reorder_operands_p to check whether we're allowed to convert (-A) - B into (-B) - A. From-SVN: r72381
2003-10-05fold-const.c: Follow spelling conventions.Kazu Hirata1-1/+1
* fold-const.c: Follow spelling conventions. * function.c: Likewise. * config/c4x/c4x.h: Likewise. * config/c4x/c4x.md: Likewise. * config/frv/frv.md: Likewise. * config/rs6000/aix.h: Likewise. * config/rs6000/linux64.h: Likewise. * config/xtensa/xtensa.c: Likewise. From-SVN: r72111
2003-10-03PR optimization/9325, PR java/6391Roger Sayle1-29/+51
PR optimization/9325, PR java/6391 * fold-const.c (fold_convert): For floating point to integer conversions, return the maximum/minimum representable integer value if the real constant overflows the destination type. * tree.c (real_value_from_int_cst): Allow the type to be NULL, meaning don't truncate the result to a floating point mode. Simplify the logic by calling real_from_integer directly. * simplify-rtx.c (simplify_unary_operation): Implement the same semantics for folding floating point to integer conversions in RTL. * gcc.c-torture/execute/20031003-1.c: New test case. From-SVN: r72079
2003-10-01fold-const.c (make_range): When handling unsigned, don't reverse range if ↵Richard Kenner1-4/+4
high bound is zero. * fold-const.c (make_range): When handling unsigned, don't reverse range if high bound is zero. From-SVN: r71991
2003-09-30fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B for any B.Kazu Hirata1-6/+2
* fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B for any B. From-SVN: r71953
2003-09-29Remove extra comma in comment.Richard Kenner1-1/+1
From-SVN: r71912
2003-09-29fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B, where B is ↵Kazu Hirata1-0/+23
any power of 2 minus 1. * fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B, where B is any power of 2 minus 1. From-SVN: r71910
2003-09-25re PR bootstrap/12358 (Bootstrap comparison failure!)Roger Sayle1-10/+0
PR bootstrap/12358 * fold-const.c (tree_swap_operands_p): Only reorder operands when one of the operands is constant. From-SVN: r71749
2003-09-18tree.def (FFS_EXPR, [...]): Delete unused tree codes.Roger Sayle1-13/+12
* tree.def (FFS_EXPR, CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR, PARITY_EXPR): Delete unused tree codes. * c-common.c (c_common_truthvalue_conversion): Delete references to FFS_EXPR and POPCOUNT_EXPR. * c-pretty-print.c (pp_c_postfix_expression): Remove FFS_EXPR. (pp_c_expression): Likewise. * expr.c (expand_expr): Delete RTL expansion of FFS_EXPR, CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR. * fold-const.c (tree_expr_nonnegative_p): Remove FFS_EXPR, CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR. Add support for calls to BUILT_IN_FFS, BUILT_IN_PARITY and BUILT_IN_POPCOUNT and their long and long long variants. * cp/lex.c (init_operators): Remove operator_name_info for FFS_EXPR. * cp/class.c (instantiate_type): Remove FFS_EXPR case. * f/com.c (ffecom_overlap_): Remove FFS_EXPR case. (ffecom_tree_canonize_ref_): Likewise. (ffe_truthvalue_conversion): Likewise. * java/expr.c (java_truthvalue_conversion): Remove FFS_EXPR case. * java/check-init.c (check_init): Likewise. From-SVN: r71525
2003-09-16fold-const.c (tree_swap_operands_p): New function to determine the prefered ↵Roger Sayle1-126/+76
ordering of operands. * fold-const.c (tree_swap_operands_p): New function to determine the prefered ordering of operands. (fold): Numerous clean-ups. Use tree_swap_operands_p when swapping operands to commutative, comparison or ternary operators. Replace uses of TREE_SET_CODE with recursive call to fold. Remove duplicate transformation of A ? B : C into !A ? C : B. From-SVN: r71438
2003-09-14alias.c: Follow spelling conventions.Kazu Hirata1-1/+1
* alias.c: Follow spelling conventions. * cpphash.h: Likewise. * fold-const.c: Likewise. * cp/ChangeLog: Likewise. * cp/parser.c: Likewise. From-SVN: r71382
2003-09-09builtins.c (real_dconstp, [...]): New, split out from fold_builtin.Kaveh R. Ghazi1-6/+34
* builtins.c (real_dconstp, fold_builtin_logarithm, fold_builtin_exponent): New, split out from fold_builtin. Also generalize to add log2, log10, exp2 and exp10/pow10 equivalents. * emit-rtl.c (dconst3, dconst10, dconstthird): New. (init_emit_once): Initialize new dconsts, use ARRAY_SIZE in lieu of hardcoded array size. * fold-const.c (fold): Add cases for exp2, exp10 and pow10. (tree_expr_nonnegative_p): Likewise. * real.h (dconst3, dconst10, dconstthird): New. testsuite: * gcc.dg/torture/builtin-explog-1.c: New testcase. From-SVN: r71252
2003-09-08* fold-const.c (operand_equal_p): Clarify documentation.Roger Sayle1-2/+16
From-SVN: r71214
2003-09-01c-typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR.Josef Zlomek1-23/+9
* c-typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR. * convert.c (convert_to_integer): Kill BIT_ANDTC_EXPR. * fold-const.c (int_const_binop): Kill BIT_ANDTC_EXPR. (fold): Kill BIT_ANDTC_EXPR and label bit_and. * tree.def (BIT_ANDTC_EXPR): Kill. * error.c (dump_expr): Kill BIT_ANDTC_EXPR. * lex.c (init_operators): Kill BIT_ANDTC_EXPR. * pt.c (tsubst_copy): Kill BIT_ANDTC_EXPR. * typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR. (tsubst_copy_and_build): Kill BIT_ANDTC_EXPR. * com.c (ffecom_overlap_): Kill BIT_ANDTC_EXPR. (ffecom_tree_canonize_ref_): Kill BIT_ANDTC_EXPR. From-SVN: r70972
2003-08-26re PR middle-end/12002 (internal compiler error: in gen_lowpart, at ↵Roger Sayle1-1/+2
emit-rtl.c:1374) PR middle-end/12002 * tree.h (SCALAR_FLOAT_TYPE_P, COMPLEX_FLOAT_TYPE_P): New macros. (FLOAT_TYPE_P): Define in terms of these two new macros. * fold-const.c (fold <PLUS_EXPR>): Don't convert x+x into x*2.0 for complex floating point types. * g77.f-torture/compile/12002.f: New test case. From-SVN: r70821
2003-08-26fold-const.c (fold <MULT_EXPR>): Optimize (C1/X)*C2 into (C1*C2)/X when ↵Roger Sayle1-10/+33
unsafe math optimizations are allowed. * fold-const.c (fold <MULT_EXPR>): Optimize (C1/X)*C2 into (C1*C2)/X when unsafe math optimizations are allowed. (fold <RDIV_EXPR>): Optimize C1/(X*C2) into (C1/C2)/X with unsafe math optimizations. Minor code clean-ups. Recursively call fold when constructing sub-expressions. * gcc.dg/20030826-1.c: New test case. From-SVN: r70807
2003-08-22c-decl.c: Fix comment formatting.Kazu Hirata1-1/+1
* c-decl.c: Fix comment formatting. * cfgrtl.c: Likewise. * combine.c: Likewise. * convert.c: Likewise. * dominance.c: Likewise. * dwarf2out.c: Likewise. * dwarfout.c: Likewise. * expmed.c: Likewise. * fold-const.c: Likewise. * gcov.c: Likewise. * genattrtab.c: Likewise. * ggc-common.c: Likewise. * mips-tfile.c: Likewise. * regmove.c: Likewise. From-SVN: r70677
2003-08-21fold-const.c (fold): Fix bug in (A & C) == D where D & ~C != 0 and similarly ↵Josef Zlomek1-2/+2
in (A | C) == D where C... * fold-const.c (fold): Fix bug in (A & C) == D where D & ~C != 0 and similarly in (A | C) == D where C & ~D != 0. From-SVN: r70637
2003-08-20re PR middle-end/11984 (ICE with -ffast_math: expected integer_cst, have ↵Roger Sayle1-1/+3
real_cst) PR middle-end/11984 * fold-const.c (fold <PLUS_EXPR>): Check for integer constant operands before calling tree_int_cst_lt when performing associative transformations. * gcc.dg/20030820-1.c: New test case. From-SVN: r70618
2003-08-20tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'.Jason Merrill1-1/+1
* tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'. (EXPR_CHECK): Don't check for 'r' or 's' if we're checking IS_EXPR_CODE_CLASS. * calls.c (calls_function_1): Likewise. * fold-const.c (fold): Likewise. * tree.c (iterative_hash_expr): Likewise. * tree-inline.c (walk_tree, copy_tree_r): Likewise. From-SVN: r70617
2003-08-20builtins.c (expand_builtin_mathfn): Use get_callee_fndecl.Jason Merrill1-63/+59
* builtins.c (expand_builtin_mathfn): Use get_callee_fndecl. (expand_builtin_mathfn2, expand_builtin, builtin_mathfn_code, fold_trunc_transparent_mathfn, fold_builtin): Likewise. * dojump.c (do_jump): Likewise. * fold-const.c (operand_equal_p, fold): Likewise. (tree_expr_nonnegative_p): Likewise. From-SVN: r70611
2003-08-19builtins.c: Fix comment typos.Kazu Hirata1-1/+1
* builtins.c: Fix comment typos. * c-common.c: Likewise. * c-decl.c: Likewise. * c-pretty-print.c: Likewise. * cfgbuild.c: Likewise. * cfglayout.c: Likewise. * cfgloopanal.c: Likewise. * cgraphunit.c: Likewise. * cppfiles.c: Likewise. * dwarfout.c: Likewise. * expr.c: Likewise. * fold-const.c: Likewise. * gcse.c: Likewise. * ggc-page.c: Likewise. * haifa-sched.c: Likewise. * pretty-print.c: Likewise. * tree.c: Likewise. * tree.h: Likewise. * value-prof.c: Likewise. From-SVN: r70583
2003-08-14fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy to negate ↵Roger Sayle1-5/+62
if either operand is easy to negate... * fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy to negate if either operand is easy to negate, if we don't care about sign-dependent rounding. (negate_expr): Make the logic to negate a REAL_CST explicit. Attempt to negate a MULT_EXPR or RDIV_EXPR by negating an operand that's easy to negate, if we don't honor sign-dependent rounding. (fold <MULT_EXPR>): Optimize -A * B as A * -B if B is easy to negate, and the symmetric A * -B as -A * B if A is easy to negate. (fold <RDIV_EXPR>): Likewise, optimize -A/B and C/-D as A/-B and -C/D if B and C are cheap to negate. Add an explicit rule to optimize X/-1.0 as -X when we don't care about signaling NaNs. From-SVN: r70455
2003-08-12fold-const.c (fold): Optimize any associative floating point operator with...Roger Sayle1-5/+3
* fold-const.c (fold): Optimize any associative floating point operator with -funsafe-math-optimizations, not just MULT_EXPR. From-SVN: r70348
2003-08-04re PR middle-end/11771 (Segfault with simple double arithmetics)Roger Sayle1-1/+4
PR middle-end/11771 * fold-const.c (negate_expr_p <MINUS_EXPR>): Change to match the logic in negate_expr, i.e. we don't invert (A-B) for floating point types unless flag_unsafe_math_optimizations. * gcc.c-torture/compile/20030804-1.c: New test case. From-SVN: r70159
2003-08-04fold-const.c (fold <PLUS_EXPR>): Transform x+x into x*2.0.Roger Sayle1-15/+64
* fold-const.c (fold <PLUS_EXPR>): Transform x+x into x*2.0. Optimize x*c+x and x+x*c into x*(c+1) and x*c1+x*c2 into x*(c1+c2) for floating point expressions with -ffast-math. (fold <MULT_EXPR>): Don't transform x*2.0 into x+x. * expmed.c (expand_mult): Wrap long line. Expand x*2.0 as x+x. * gcc.dg/20030804-1.c: New test case. From-SVN: r70158
2003-08-01fold-const.c (fold <MULT_EXPR>): Optimize both x*pow(x,c) and pow(x,c)*x as ↵Roger Sayle1-0/+98
pow(x,c+1) for constant values c. * fold-const.c (fold <MULT_EXPR>): Optimize both x*pow(x,c) and pow(x,c)*x as pow(x,c+1) for constant values c. Optimize x*x as pow(x,2.0) when the latter will be expanded back into x*x. (fold <RDIV_EXPR>): Optimize pow(x,c)/x as pow(x,c-1). * builtins.c (expand_builtin_pow): Ignore flag_errno_math as pow can never set errno when used with an integer exponent. Always use expand_powi when exponent is -1, 0, 1 or 2. (fold_builtin): Don't rewrite pow(x,2.0) as x*x nor pow(x,-2.0) as 1.0/(x*x). This avoids unbounded recursion as we now prefer the pow forms of these expressions. * gcc.dg/builtins-27.c: New test case. From-SVN: r70030
2003-07-31* fold-const.c (fold): Fold some comparisons of bit operations.Zdenek Dvorak1-0/+28
From-SVN: r70009
2003-07-28configure.in (--enable-checking): Add fold category.Jakub Jelinek1-7/+236
* configure.in (--enable-checking): Add fold category. (ENABLE_FOLD_CHECKING): Define if requested. * configure: Rebuilt. * config.in: Rebuilt. * doc/install.texi: Document it. * fold-const.c: Include md5.h. [ENABLE_FOLD_CHECKING] (fold): Define to fold_1. [ENABLE_FOLD_CHECKING] (fold, fold_checksum_tree, fold_check_failed, print_fold_checksum): New functions. * fold-const.c (fold): Never modify argument passed to fold, instead change a copy and return it. * convert.c (convert_to_integer): Likewise. testsuite/ * gcc.c-torture/compile/20030725-1.c: New test. From-SVN: r69886
2003-07-22fold-const.c (force_fit_type): Handle OFFSET_TYPE.Mark Mitchell1-1/+2
* fold-const.c (force_fit_type): Handle OFFSET_TYPE. * varasam.c (output_constant): Likewise. 2003-07-22 Mark Mitchell <mark@codesourcery.com> Eliminate use of POINTER_TYPE for pointers-to-members. * call.c (standard_conversion): Rework pointer-to-member handling. Add comments. (add_builtin_candidate): Likewise. (resolve_scoped_fn_name): Remove. (build_conditional_expr): Rework pointer-to-member handling. (compare_ics): Likewise. * class.c (check_field_decls): Use TYPE_PTR_P. * cp-lang.c (cp_var_mod_type_p): Rework pointer-to-member handling. * cp-tree.h (SCALAR_TYPE_P): Use TYPE_PTR_TO_MEMBER_P. (TYPE_PTRMEM_P): Add comment. (TYPE_PTR_P): Simplify. (TYPE_PTROB_P): Correct definition. (TYPE_PTR_TO_MEMBER_P): New macro. (TYPE_PTRMEM_CLASS_TYPE): Adjust. (TYPE_PTRMEM_POINTED_TO_TYPE): Likewise. (resolved_scoped_fn_name): Remove declaration. (build_offset_ref): Change prototype. (resolve_offset_ref): Remove. (comp_target_types): Remove. * cvt.c (cp_convert_to_pointer): Rework pointer-to-member handling. (convert_to_reference): Use can_convert. (ocp_convert): Improve error handling. Rework pointer-to-member handling. (perform_qualification_conversions): Rework pointer-to-member handling. * decl.c (build_ptrmem_type): Handle functions too. (create_array_type_for_decl): Remove OFFSET_TYPE error message. (grokdeclarator): Use OFFSET_TYPE for pointers to data members. (grokparms): Remove OFFSET_TYPE error message. * dump.c (cp_dump_tree): Rework pointer-to-member handling. * error.c (dump_type_prefix): Likewise. * expr.c (cplus_expand_constant): Use build_nop. * init.c (build_offset_ref): Add address_p parameter. Fold in necessary bits from resolve_offset_ref. (resolve_offset_ref): Remove. * parser.c (cp_parser_postfix_expression): Remove special case code for OFFSET_TYPE. * pt.c (convert_nontype_argument): Rework pointer-to-member handling. (convert_template_argument): Likewise. (unify): Likewise. (invalid_nontype_parm_type_p): Likewise. (dependent_type_p_r): Likewise. * rtti.c (get_tinfo_decl): Remove OFFSET_TYPE special case. (target_incomplete_p_): Rework pointer-to-member handling. (get_pseudo_ti_init): Likewise. (get_pseudo_ti_desc): Likewise. * semantics.c (finish_qualified_id_expr): Adjust call to build_offset_ref. Remove use of resolve_offset_ref. * tree.c (pod_type_p): Use TYPE_PTR_TO_MEMBER_P. * typeck.c (target_type): Use TYPE_PTRMEM_P. (type_unknown_p): Remove obsolete code about the time before non-dependent expressions were handled correctly. (qualify_type_recursive): Remove. (composite_pointer_type_r): New function. (composite_pointer_type): Use it. (merge_types): Remove dead comments. (comp_cv_target_types): Remove. (comp_target_types): Likewise. (comp_target_parms): Likewise. (cxx_sizeof_or_alignof_type): Remove OFFSET_TYPE error. (build_indirect_ref): Use TYPE_PTR_TO_MEMBER_P. (build_binary_op): Do not use of comp_target_types. (pointer_diff): Remove OFFSET_TYPE case. (build_unary_op): Adjust pointer-to-member handling. (unary_complex_lvalue): Likewise. (check_for_casting_away_constness): Add description parameter. (build_static_cast): Pass it. (build_reinterpret_cast): Use check_for_casting_away_constness. (build_const_cast): Adjust pointer-to-member handling. (build_c_cast): Likewise. (convert_for_assignment): Remove OFFSET_TYPE error message. (comp_ptr_ttypes_real): Adjust pointer-to-member handling. (comp_ptr_ttypes_reinterpret): Remove. (casts_away_constness_r): Adjust pointer-to-member handling. (casts_away_constness): Liekwise. (strip_all_pointer_quals): Remove. * typeck2.c (digest_init): Adjust pointer-to-member handling. (build_m_component_ref): Likewise. From-SVN: r69691
2003-07-22alias.c: Fix comment formatting.Kazu Hirata1-2/+2
* alias.c: Fix comment formatting. * c-common.c: Likewise. * c-decl.c: Likewise. * c-opts.c: Likewise. * combine.c: Likewise. * cpplib.c: Likewise. * diagnostic.c: Likewise. * dojump.c: Likewise. * final.c: Likewise. * fold-const.c: Likewise. * gcc.c: Likewise. * gcse.c: Likewise. * ggc-page.c: Likewise. * jump.c: Likewise. * loop.c: Likewise. * mips-tfile.c: Likewise. * recog.c: Likewise. * regclass.c: Likewise. * regmove.c: Likewise. * tree.c: Likewise. * tree.h: Likewise. From-SVN: r69689
2003-07-19alias.c [...]: Remove unnecessary casts.Kaveh R. Ghazi1-4/+4
* alias.c alloc-pool.c bitmap.c bitmap.h bt-load.c builtins.c c-common.c c-decl.c c-incpath.c c-lex.c c-opts.c c-parse.in c-pragma.c c-typeck.c calls.c cfg.c cfganal.c cfgloop.c cfgrtl.c collect2.c combine.c conflict.c coverage.c cppexp.c cppfiles.c cpphash.c cppinit.c cpplex.c cpplib.c cppmacro.c cppspec.c cpptrad.c cse.c cselib.c dbxout.c defaults.h df.c dominance.c dwarf2out.c dwarfout.c emit-rtl.c except.c expmed.c expr.c final.c fix-header.c flow.c fold-const.c function.c gcc.c gccspec.c gcov.c gcse.c genattr.c genattrtab.c genautomata.c genconditions.c genemit.c genextract.c genoutput.c genrecog.c gensupport.c ggc-page.c ggc-simple.c global.c graph.c haifa-sched.c hashtable.c integrate.c jump.c langhooks.c lcm.c line-map.c local-alloc.c loop.c mips-tdump.c mips-tfile.c mkdeps.c optabs.c params.c postreload.c prefix.c print-tree.c protoize.c ra-build.c ra-colorize.c ra-rewrite.c ra.c recog.c reg-stack.c regclass.c regmove.c regrename.c reload.c reload1.c reorg.c resource.c sbitmap.c sched-deps.c sched-rgn.c sched-vis.c sdbout.c simplify-rtx.c ssa-ccp.c ssa.c stmt.c stor-layout.c timevar.c tlink.c toplev.c tree-dump.c tree.c unroll.c unwind-dw2-fde.c varasm.c varray.c vmsdbgout.c xcoffout.c: Remove unnecessary casts. From-SVN: r69587
2003-07-18fold-const.c (const_binop): Avoid performing the FP operation at compile-time...Roger Sayle1-4/+44
* fold-const.c (const_binop): Avoid performing the FP operation at compile-time, if either operand is NaN and we honor signaling NaNs, or if we're dividing by zero and either flag_trapping_math is set or the desired mode doesn't support infinities. (fold_initializer): New function to fold an expression ignoring any potential run-time exceptions or traps. * tree.h (fold_initializer): Prototype here. * c-typeck.c (build_binary_op): Move to the end of the file so that intializer_stack is in scope. If constructing an initializer, i.e. when initializer_stack is not NULL, use fold_initializer to fold expressions. * simplify-rtx.c (simplify_binary_operation): Likewise, avoid performing FP operations at compile-time, if they would raise an exception at run-time. From-SVN: r69533
2003-07-10re PR c/11449 (ICE in invert_truthvalue called on AND operation)Kazu Hirata1-10/+22
PR c/11449 * fold-const.c (sign_bit_p): Return EXP if VAL is the sign bit of HOST_WIDE_INT. (fold_single_bit_test): If sign_bit_p() fails, assume that the bit being tested is not a sign bit. PR c/11449 * gcc.c-torture/compile/20030707-1.c: New. * config/h8300/h8300.md (a peephole2): New. From-SVN: r69184
2003-07-10* fold-const.c: Properly wrap prototypes.Andreas Jaeger1-28/+41
From-SVN: r69170
2003-07-09fold-const.c (make_range): Do not access operand 1 for a zero-operand operator.Mark Mitchell1-1/+2
* fold-const.c (make_range): Do not access operand 1 for a zero-operand operator. 2003-07-08 Mark Mitchell <mark@codesourcery.com> * cp-tree.def (NON_DEPENDENT_EXPR): New node. * cp-tree.h (build_call_from_tree): Remove. (build_member_call): Likewise. (dependent_template_arg_p): Remove. (any_dependent_template_arguments_p): New function. (dependent_template_id_p): Likewise. (any_type_dependent_arguments_p): Likewise. (build_non_dependent_expr): Likewise. (build_non_dependent_args): Likewise. (build_x_compound_expr): Adjust prototype. * call.c (build_new_method_call): Handle non-dependent expressions correctly. * decl2.c (grok_array_decl): Likewise. (build_offset_ref_call_from_tree): Likewise. (build_call_from_tree): Remove. * error.c (dump_decl): Handle NON_DEPENDENT_EXPR. (dump_expr): Likewise. * init.c (build_member_call): Remove. * mangle.c (write_expression): Update handling for template-ids. * parser.c (cp_parser_primary_expression): Use any_dependent_template_arguments_p. Update constant-expression handling. (cp_parser_postfix_expression): Use any_type_dependent_arguments_p. Simplify call processing. (cp_parser_unary_expression): Simplify. (cp_parser_expression): Adjust for changes to build_x_compound_expr. (cp_parser_template_argument): Implement standard-conforming parsing of non-type template arguments. (cp_parser_direct_declarator): Use cp_parser_fold_non_dependent_expr. (cp_parser_fold_non_dependent_expr): New function. (cp_parser_next_token_ends_template_argument_p): Likewise. * pt.c (convert_template_argument): Do not call maybe_fold_nontype_arg. (tsubst_baselink): Likewise. (tsubst_copy_and_build): Share common code. Make sizeof/alignof processing work correctly for non-dependent expressions. Adjust handling of COMPOUND_EXPR. Simplify call processing. (value_dependent_expression_p): Deal with functional casts and sizeof/alignof correctly. (type_dependent_expression_p): Handle overloaded functions. (any_type_dependent_arguments_p): New function. (any_dependent_template_arguments_p): Likewise. (dependent_template_p): Treat SCOPE_REFs as dependent. (dependent_template_id_p): Simplify. (build_non_dependent_expr): New function. (build_non_dependent_args): Likewise. * semantics.c (finish_stmt_expr): Don't make dependent statement-expresions have void type. (finish_call_expr): Handle non-dependent expressions correctly. * tree.c (lvalue_p_1): Treat NON_DEPENDENT_EXPRs as lvalues. * typeck.c (cxx_sizeof_or_alignof_type): Give the expression type size_t, even in templates. (expr_sizeof): Likewise. (finish_class_member_access_expr): Handle non-dependent expressions correctly. (build_x_indirect_ref): Likewise. (build_x_binary_op): Likewise. (build_x_unary_op): Likewise. (build_x_conditional_expr): Likewise. (build_x_compound_expr): Likewise. * typeck2.c (build_x_arrow): Likewise. 2003-07-08 Mark Mitchell <mark@codesourcery.com> * g++.dg/abi/mangle17.C: Make sure template expressions are dependent. * g++.dg/abi/mangle4.C: Mark erroneous casts. * g++.dg/debug/debug7.C: Mark erronous new-declarator. * g++.dg/opt/stack1.C: Remove erroneous code. * g++.dg/parse/template7.C: New test. * g++.dg/template/dependent-expr1.C: Mark erroneous code. * g++.old-deja/g++.pt/crash4.C: Likewise. 2003-07-09 Mark Mitchell <mark@codesourcery.com> * gcj/array.h (JvPrimClass): Don't parenthesize the output. From-SVN: r69130
2003-07-07genextract.c: Convert remaining prototypes to ISO C90.Andreas Jaeger1-5/+2
2003-07-07 Andreas Jaeger <aj@suse.de> * genextract.c: Convert remaining prototypes to ISO C90. * cpplex.c (_cpp_free_buff): Convert prototype to ISO C90. * fold-const.c (fold_single_bit_test): Likewise. * diagnostic.c (default_diagnostic_finalizer): Likewise. * cfgrtl.c (rtl_redirect_edge_and_branch): Likewise. * gengtype.c (write_array): Generate ISO C90 prototypes. * genflags.c (gen_proto): Generate ISO C90 prototypes. For cp: 2003-07-07 Andreas Jaeger <aj@suse.de> * friend.c: Convert to ISO C90 prototypes. * Make-lang.in ($(srcdir)/cp/cfns.h): Use ANSI-C as output language. * cfns.h: Regenerate. * typeck.c: Convert remaining prototypes to ISO C90. * search.c: Likewise. * decl2.c (build_expr_from_tree): Convert prototype to ISO C90. * semantics.c (expand_or_defer_fn): Likewise * mangle.c (discriminator_for_string_literal): Likewise. * g++spec.c (lang_specific_driver): Likewise. * search.c (lookup_base_r): Remove unused variable. From-SVN: r69050
2003-07-04expr.c (do_store_flag): Pass in the correct result type when calling ↵Jeff Law1-1/+1
fold_single_bit_test. * expr.c (do_store_flag): Pass in the correct result type when calling fold_single_bit_test. * fold-const.c (fold_single_bit_test): Use result_type for the result when folding a sign bit test. From-SVN: r68940