* c-typeck.c (struct c_switch): Rename switch_stmt field to
switch_expr.
(c_start_case): Build SWITCH_EXPR, not SWITCH_STMT.
(do_case): Use SWITCH_COND rather than SWITCH_STMT_COND.
(c_finish_case): Use SWITCH_BODY rather than SWITCH_STMT_BODY.
Call c_do_switch_expr_warnings rather than c_do_switch_warnings.
* c-common.c (c_do_switch_warnings_1): New static function broken
out of c_do_switch_warnings.
(c_do_switch_warnings): Call c_do_switch_warnings_1.
(c_do_switch_expr_warnings): New function.
* c-common.h (c_do_switch_expr_warnings): Declare.
From-SVN: r97593
PR c/772
PR c/17913
* c-tree.h (C_DECL_UNJUMPABLE_STMT_EXPR,
C_DECL_UNDEFINABLE_STMT_EXPR, struct c_label_list, struct
c_label_context, label_context_stack): New.
* c-decl.c (define_label): Check for jumps into statement
expressions. Add label to list of defined labels.
(start_function): Push context on label_context_stack.
(finish_function): Pop context from label_context_stack.
* c-typeck.c (label_context_stack): New.
(c_finish_goto_label): Check for jumps into statement
expressions. Add label to list of jumped to labels.
(struct c_switch): Add blocked_stmt_expr.
(c_start_case): Initialize it.
(do_case): Check it.
(c_finish_case): Verify !blocked_stmt_expr.
(c_begin_stmt_expr): Push context on label_context_stack.
Increment blocked_stmt_expr. Mark labels jumped to from outside
as undefinable.
(c_finish_stmt_expr): December blocked_stmt_expr. Mark labels
defined in the statement expression and no longer jumpable to.
Mark labels jumped to from just outside the statement expression
as again definable. Pop context from label_context_stack.
* doc/extend.texi (Statement Exprs): Update.
objc:
* objc-act.c (objc_start_function): Push context on
label_context_stack.
testsuite:
* gcc.dg/stmt-expr-label-1.c, gcc.dg/stmt-expr-label-2.c,
gcc.dg/stmt-expr-label-3.c : New tests.
* gcc.c-torture/execute/medce-2.c: Remove.
From-SVN: r97273
* c-common.h (default_conversion): Remove.
(perform_integral_promotions): Add.
* c-tree.h (default_conversion): Add.
* c-typeck.c (perform_integral_promotions): New, split out from
default_conversion.
* c-common.c (check_case_value): Use perform_integral_promotions,
not default_conversion.
(c_add_case_label): Don't continue processing case label after
found to be pointer.
cp:
* cp-tree.h (perform_integral_promotions): Remove.
(default_conversion): Add.
From-SVN: r96916
gcc/
PR c/19333
* c-decl.c (start_decl): Do not warn about arrays of elements with
an incomplete type here.
(grokdeclarator): Do it here by making a pedwarn an error.
* c-typeck.c (push_init_level): If there were previous errors with
the constructor type, do not warn about braces for initializers.
(process_init_element): Likewise for excess initializer elements.
testsuite/
PR c/19333
* testsuite/gcc.c-torture/compile/20011130-1.c: Reorder to make
the test case valid.
* testsuite/gcc.dg/20030815-1.c: Remove invalid tests.
* testsuite/gcc.dg/array-7.c: Adjust expected result.
* testsuite/gcc.dg/pr18596-3.c: Likewise.
* testsuite/gcc.dg/noncompile/20000901-1.c: Likewise.
* testsuite/gcc.dg/noncompile/init-2.c: Likewise.
* testsuite/gcc.dg/noncompile/init-4.c: Likewise.
From-SVN: r94505
* c-common.c (fix_string_type): Just use c_build_qualified_type to
build string type.
(c_build_qualified_type): Build qualified array types with
TYPE_MAIN_VARIANT pointing to corresponding unqualified type.
* c-decl.c (c_make_fname_decl): Build unqualified array type
before qualified type.
(grokdeclarator): Use TYPE_MAIN_VARIANT of typedef type if element
type is qualified, not just if type itself is. Don't apply
qualifiers to array type when declarator is processed. Apply
qualifiers to field type whether or not it is an array type.
Don't handle array types specially for applying qualifiers to
variables.
* c-typeck.c (composite_type): Build unqualified element type and
array type when forming composite of array types.
(common_pointer_type, comptypes, comp_target_types,
type_lists_compatible_p, build_indirect_ref, build_array_ref,
convert_for_assignment): Don't apply TYPE_MAIN_VARIANT to array
types.
(type_lists_compatible_p): Cache TREE_VALUE (args1) and TREE_VALUE
(args2) in variables a1 and a2.
testsuite:
* gcc.dg/Wwrite-strings-1.c, gcc.dg/array-quals-2.c,
gcc.dg/lvalue-3.c: New tests.
* gcc.dg/concat.c: Update expected messages.
From-SVN: r94411
PR tree-optimization/13000
* tree-inline.c: Include "tree-flow.h".
(expand_call_inline): If warn_return_type, warn if non-void inline
function falls through.
* tree-cfg.c (execute_warn_function_return): Don't warn about
control reaching end if TREE_NO_WARNING is set. Set
TREE_NO_WARNING.
* gimple-low.c (block_may_fallthru): Don't assume that SWITCH_EXPR
has been lowered.
* gimplify.c (shortcut_cond_expr): Don't emit a jump over the else
branch if we don't need one.
* c-typeck.c: Include "tree-flow.h"
(c_finish_bc_stmt): Don't add a goto if the current statement
list doesn't fall through to the current point.
From-SVN: r94024
PR c/17297
* c-typeck.c (digest_init): Only call build_vector if all constructor
elements are *_CST nodes.
* gimplify.c (gimplify_init_constructor): Likewise.
* gcc.c-torture/compile/20050113-1.c: New testcase.
PR middle-end/19164
* c-typeck.c (digest_init): Only call build_vector if inside_init
is a CONSTRUCTOR.
* gcc.dg/20050113-1.c: New testcase.
From-SVN: r93891
2004-12-19 James A. Morrison <phython@gcc.gnu.org>
PR c/18596
* c-parse.in (initdcl): Don't process a declaration if start_decl fails.
(notype_initdcl): Don't process a declaration if start_decl fails.
* c-decl.c (start_decl): Fail if grokdeclarator fails.
(grokdeclarator): Fail if a function definition has an invalid storage
class.
* c-typeck.c (start_init): Treat error_mark_node the same as 0.
testsuite:
PR c/18596
* gcc.dg/funcdef-storage-1.c (foo): Remove.
* gcc.dg/pr18596-1.c: Use dg-error.
(dg-options): Use -fno-unit-at-a-time.
* gcc.dg/pr18596-2.c: New test.
* gcc.dg/pr18596-3.c: New test.
From-SVN: r92459
[gcc/ChangeLog]
2004-12-10 Ziemowit Laski <zlaski@apple.com>
* c-typeck.c (lookup_field): Check if a TYPE_LANG_SPECIFIC
pointer field is set before dereferencing it.
From-SVN: r92007
PR c/18867
* c-typeck.c (c_start_case): Set orig_type to error_mark_node
when the type of the controlling expression is not a valid type.
testsuite/
* gcc.dg/noncompile/20041207.c: New test.
From-SVN: r91837
* c-typeck.c (build_array_ref): Don't check for index == 0. Make
checks for neither argument being an array or pointer (swapping
the arguments if necessary), the array argument being a pointer to
or array of functions and for -Wchar-subscripts warnings upfront.
testsuite:
* gcc.dg/Wchar-subscripts-1.c, gcc.dg/array-8.c: New tests.
* gcc.dg/pointer-arith-1.c, gcc.dg/pointer-arith-2.c,
gcc.dg/pointer-arith-3.c, gcc.dg/pointer-arith-4.c: Update
expected diagnostics.
From-SVN: r90969
ChangeLog:
PR tree-optimization/18184
* c-typeck.c (comptypes): Do not treat pointers of different
modes or alias-all flags as equivalent.
* tree-ssa.c (tree_ssa_useless_type_conversion_1): Likewise.
cp/ChangeLog:
PR tree-optimization/18184
* cp-objcp-common.c (cxx_types_compatible_p): Do not treat pointers
of different modes or alias-all flags as equivalent.
* typeck.c (comptypes): Likewise.
From-SVN: r90078
[gcc/ChangeLog]
2004-10-30 Ziemowit Laski <zlaski@apple.com>
* c-common.h (objc_lookup_ivar): Add second parameter to
prototype.
* c-typeck.c (build_external_ref): After looking up symbol,
pass it to objc_lookup_ivar() to decide whether it or the
ivar should be used, rather than deciding the issue locally.
* stub-objc.c (objc_lookup_ivar): Add an OTHER parameter,
which is simply returned in the non-ObjC case.
[gcc/objc/ChangeLog]
2004-10-30 Ziemowit Laski <zlaski@apple.com>
* objc-act.c (objc_lookup_ivar): The new OTHER parameter
contains the result of the ID lookup by the C or C++
front-end; in class methods, use OTHER if it exists;
in instance methods, use OTHER only if it is locally
declared.
[gcc/testsuite/ChangeLog]
2004-10-30 Ziemowit Laski <zlaski@apple.com>
* objc.dg/local-decl-1.m: New test.
From-SVN: r89912
PR middle-end/18160
* c-typeck.c (c_mark_addressable): Issue error if address of a
register variable is taken. Use "%qD" to print DECL_NAME.
From-SVN: r89772
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
Revert:
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
* c-typeck.c (default_function_array_conversion): Always create
&a[0] for array types.
(build_unary_op): Do not fold &a[x] into a + x.
From-SVN: r89183
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
* c-typeck.c (default_function_array_conversion): Always create
&a[0] for array types.
(build_unary_op): Do not fold &a[x] into a + x.
From-SVN: r89173
PR c/17301
* c-typeck.c (convert_arguments): Return error_mark_node if there
are too few arguments.
(build_function_call): Handle error_mark_node return from
convert_arguments.
testsuite:
* gcc.dg/pr17301-2.c: New test.
From-SVN: r88921
* c-typeck.c (enum impl_conv): New.
(convert_for_assignment): Use it. Take tree for function called
instead of its name. Handle ObjC selectors for diagnostics at
start of function. Select diagnostic text within the function
using full sentences for diagnsotics. Use %qE to name functions
in diagnostics.
(convert_arguments, build_modify_expr,
c_convert_parm_for_inlining, digest_init, c_finish_return): Update
callers to convert_for_assignment.
(warn_for_assignment): Remove.
testsuite:
* gcc.dg/assign-warn-1.c, gcc.dg/assign-warn-2.c: New tests.
* gcc.dg/warn-1.c, gcc.dg/noncompile/20020213-1.c,
objc.dg/method-9.m: Update expected diagnostics.
From-SVN: r88741
* c-typeck.c (convert_arguments): Take expression for called
function rather than its name. Handle ObjC selectors directly
rather than relying on warn_for_assignment to do so. Call warning
directly rather than warn_for_assignment. Use %qE in diagnostics.
Say "argument" rather than "arg" in diagnostics.
(build_function_call): Update call to convert_arguments.
testsuite:
* gcc.dg/Wconversion-2.c, gcc.dg/func-args-1.c: New tests.
From-SVN: r88630