Commit Graph

690 Commits

Author SHA1 Message Date
Ian Lance Taylor
fbc315db4a c-common.def: Move FOR_STMT...
./	* c-common.def: Move FOR_STMT, WHILE_STMT, DO_STMT, BREAK_STMT,
	CONTINUE_STMT, and SWITCH_STMT to cp/cp-tree.def.
	* c-common.h (WHILE_COND, WHILE_BODY): Move to cp/cp-tree.h.
	(DO_COND, DO_BODY): Likewise.
	(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY): Likewise.
	(SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE): Likewise.
	(c_common_stmt_codes): Remove FOR_STMT, WHILE_STMT, DO_STMT,
	BREAK_STMT, CONTINUE_STMT, and SWITCH_STMT.
	(build_continue_stmt, build_break_stmt): Don't declare.
	(c_do_switch_warnings): Update declaration.
	* c-gimplify.c (enum bc_t): Remove.
	(struct c_gimplify_ctx, ctxp): Remove.
	(push_context, pop_context): Remove static functions.
	(c_genericize): Don't call push_context or pop_context.
	(begin_bc_block, finish_bc_block): Remove static functions.
	(build_bc_goto): Likewise.
	(gimplify_c_loop): Likewise.
	(gimplify_for_stmt, gimplify_while_stmt): Likewise.
	(gimplify_do_stmt, gimplify_switch_stmt): Likewise.
	(c_gimplify_expr): Remove handling of FOR_STMT, WHILE_STMT,
	DO_STMT, SWITCH_STMT, CONTINUE_STMT, BREAK_STMT.
	* c-common.c (c_do_switch_warnings): Rename from
	c_do_switch_warnings_1.
	(c_do_switch_warnings) [old version]: Remove.
	(c_do_switch_expr_warnings): Remove.
	* c-typeck.c (c_finish_case): Call new c_do_switch_warnings
	function instead of c_do_switch_expr_warnings.
	* c-dump.c (c_dump_tree): Remove handling of BREAK_STMT,
	CONTINUE_STMT, DO_STMT, FOR_STMT, SWITCH_STMT, and WHILE_STMT.
	* c-pretty-print.c (pp_c_statement): Likewise.
	* c-semantics.c (build_break_stmt, build_continue_stmt): Remove.
cp/
	* cp-tree.def: Define FOR_STMT, WHILE_STMT, DO_STMT, BREAK_STMT,
	CONTINUE_STMT, SWITCH_STMT.
	* cp-tree.h (cp_stmt_codes): Add FOR_STMT, WHILE_STMT, DO_STMT,
	BREAK_STMT, CONTINUE_STMT, SWITCH_STMT.
	(WHILE_COND, WHILE_BODY): Define.
	(DO_COND, DO_BODY): Define.
	(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY): Define.
	(SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE): Define.
	* cp-gimplify.c (enum bc_t): Define.
	(struct cp_gimplify_ctx, ctxp): Define.
	(push_context, pop_context): New static functions.
	(begin_bc_block, finish_bc_block): New static functions.
	(build_bc_goto): New static function.
	(gimplify_cp_loop, gimplify_for_stmt): New static functions.
	(gimplify_while_stmt, gimplify_do_stmt): Likewise.
	(gimplify_switch_stmt): Likewise.
	(cp_gimplify_expr): Handle FOR_STMT, WHILE_STMT, DO_STMT,
	SWITCH_STMT, CONTINUE_STMT, BREAK_STMT.
	(cp_genericize): Call push_context and pop_context.
	* semantics.c (finish_break_stmt): Just call build_stmt
	(BREAK_STMT) rather than build_break_stmt.
	(finish_continue_stmt): Corresponding change.
	* decl.c (pop_switch): Update call to c_do_switch_warnings for new
	parameters.
	* cxx-pretty-print.c (pp_cxx_statement): Handle SWITCH_STMT,
	WHILE_STMT, DO_STMT, FOR_STMT, BREAK_STMT, CONTINUE_STMT.
	* dump.c (cp_dump_tree): Likewise.

From-SVN: r97885
2005-04-09 03:18:18 +00:00
Ian Lance Taylor
604f5adf98 c-typeck.c (struct c_switch): Rename switch_stmt field to switch_expr.
* 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
2005-04-05 01:15:08 +00:00
Joseph Myers
16ef3accae re PR c++/772 (Statement expressions issues)
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
2005-03-30 20:56:39 +01:00
Joseph Myers
8549882418 c-common.c (c_common_truthvalue_conversion): Adjust comment.
* c-common.c (c_common_truthvalue_conversion): Adjust comment.
	Call c_common_truthvalue_conversion rather than
	lang_hooks.truthvalue_conversion.
	* c-convert.c (convert): Call c_objc_common_truthvalue_conversion.
	* c-objc-common.c (c_objc_common_truthvalue_conversion): Move to
	c-typeck.c.
	* c-objc-common.h (LANG_HOOKS_TRUTHVALUE_CONVERSION): Change to
	c_common_truthvalue_conversion.
	* c-parser.c (c_parser_paren_condition, c_parser_for_statement,
	c_parser_conditional_expression, c_parser_binary_expression): Call
	c_objc_common_truthvalue_conversion.
	* c-typeck.c (build_unary_op): Call
	c_objc_common_truthvalue_conversion.
	(build_conditional_expr): Do not call
	lang_hooks.truthvalue_conversion.
	(build_binary_op): Call c_common_truthvalue_conversion.
	(c_objc_common_truthvalue_conversion): Moved from
	c-objc-common.c.  Call default_function_array_conversion instead
	of default_conversion.

objc:
	* objc-act.c (next_sjlj_build_enter_and_setjmp,
	next_sjlj_build_catch_list, next_sjlj_build_try_catch_finally):
	Call c_common_truthvalue_conversion.

From-SVN: r96917
2005-03-23 01:35:06 +00:00
Joseph Myers
522ddfa254 c-common.h (default_conversion): Remove.
* 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
2005-03-23 01:29:08 +00:00
Joseph Myers
37dc0d8dc7 c-common.c (lvalue_or_else): Replace by lvalue_error; only give diagnostic without checking whether an lvalue.
* c-common.c (lvalue_or_else): Replace by lvalue_error; only give
	diagnostic without checking whether an lvalue.
	* c-common.h (lvalue_p): Remove.
	(enum lvalue_use): Update comment.
	(lvalue_or_else): Replace by lvalue_error.
	* c-typeck.c (lvalue_p): Make static.
	(lvalue_or_else): New.  Call lvalue_error.

cp:
	* cp-tree.h (lvalue_or_else, lvalue_p): New.
	* typeck.c (lvalue_or_else): New.  Call lvalue_error.

From-SVN: r96776
2005-03-21 02:22:08 +00:00
Joseph Myers
ed248cf764 c-common.c (check_case_value): Adjust comment about stripping NOPs.
* c-common.c (check_case_value): Adjust comment about stripping
	NOPs.
	(handle_vector_size_attribute): Don't strip NON_LVALUE_EXPR.
	* c-typeck.c (default_conversion, convert_arguments,
	build_modify_expr, convert_for_assignment, store_init_value,
	digest_init): Use STRIP_TYPE_NOPS instead of stripping nops
	manually.  Remove inaccurate comments.

From-SVN: r96770
2005-03-20 22:36:42 +00:00
Joseph Myers
f6d1c3a69b c-common.c (handle_aligned_attribute, [...]): Do not strip NOPS from INTEGER_CSTs.
* c-common.c (handle_aligned_attribute, check_function_sentinel,
	get_nonnull_operand, handle_sentinel_attribute,
	check_function_arguments_recurse): Do not strip NOPS from
	INTEGER_CSTs.
	* c-decl.c (check_bitfield_type_and_width, build_enumerator):
	Likewise.
	* c-format.c (get_constant): Likewise.
	* c-parser.c (c_parser_postfix_expression): Likewise.
	* c-typeck.c (set_init_index): Likewise.
	(convert_arguments): Don't check for NOP_EXPR containing integer
	constant.

From-SVN: r96760
2005-03-20 15:23:50 +00:00
Joseph Myers
c51a1ba9d9 c-common.c, [...]: Use %D for declarations in diagnostics and %E for identifiers, not %s.
* c-common.c, c-decl.c, c-format.c, c-typeck.c: Use %D for
	declarations in diagnostics and %E for identifiers, not %s.

From-SVN: r96701
2005-03-18 20:47:27 +00:00
Fariborz Jahanian
4d3e6fae4d Target Hook to issue diagnostics for AltiVec argument to funtion with unknown prototype.
Target Hook to issue diagnostics for AltiVec argument to funtion
with unknown prototype.
OKed by Mark Mitchel.

From-SVN: r96124
2005-03-08 21:01:47 +00:00
Kazu Hirata
802415d117 c-typeck.c (constructor_stack, [...]): Make them static.
* c-typeck.c (constructor_stack, constructor_range_stack,
	initializer_stack): Make them static.

From-SVN: r96108
2005-03-08 16:14:09 +00:00
Joseph Myers
766beb4020 re PR c/8927 (Gcc give error for wrong line of C code.)
PR c/8927
	* c-tree.h (undeclared_variable, build_external_ref): Add extra
	argument.
	* c-decl.c (undeclared_variable): Take location as argument.
	* c-typeck.c (build_external_ref): Likewise.
	* c-parser.c (c_parser_postfix_expression): Pass location of
	identifier to build_external_ref.

testsuite:
	* gcc.dg/pr8927-1.c: New test.

From-SVN: r95773
2005-03-02 02:50:25 +00:00
Jakub Jelinek
58cb41e617 re PR c/20043 (transparent_union doesn't allow restrict qualifier removal)
PR c/20043
	* c-typeck.c (composite_type): Handle quals in transparent unions.
	(type_lists_compatible_p): Likewise.

	* gcc.dg/transparent-union-1.c: New test.
	* gcc.dg/transparent-union-2.c: New test.

From-SVN: r95255
2005-02-19 01:26:38 +01:00
Jakub Jelinek
ccf7f88061 re PR c/19342 (ICE in common_type, at c-typeck.c:490)
PR c/19342
	* c-typeck.c (common_type): New routine.  Old common_type renamed
	to...
	(c_common_type): ...this.
	(build_conditional_expr, build_binary_op): Use c_common_type instead
	of common_type.

	* gcc.c-torture/execute/20050119-1.c: New test.

From-SVN: r94803
2005-02-10 13:18:52 +01:00
Joseph Myers
493179dae3 re PR c/19435 (spurious warnings with nested array constructors)
PR c/19435
	* c-typeck.c (really_start_incremental_init): Reset
	constructor_max_index for arrays of incomplete type.

testsuite:
	* gcc.dg/c99-init-4.c: New test.

From-SVN: r94595
2005-02-02 18:03:20 +00:00
Steven Bosscher
b4519d39bc re PR c/19333 (C front end accepts arrays of incomplete types)
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
2005-02-01 00:09:40 +00:00
Joseph Myers
46df282378 c-common.c (fix_string_type): Just use c_build_qualified_type to build string type.
* 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
2005-01-29 16:12:45 +00:00
Steven Bosscher
ebaae5827a tree.h (SWITCH_COND, [...]): Add tree checks.
* tree.h (SWITCH_COND, SWITCH_BODY, SWITCH_LABELS, CASE_LOW,
	CASE_HIGH, CASE_LABEL, ASM_STRING, ASM_OUTPUTS, ASM_INPUTS,
	ASM_CLOBBERS): Add tree checks.

	* c-common.h (SWITCH_TYPE): Rename to SWITCH_STMT_TYPE.
	(SWITCH_STMT_COND, SWITCH_STMT_BODY): New.
	* c-common.def (SWITCH_STMT): Update to match.
	* c-common.c (c_do_switch_warnings): Use SWITCH_STMT accessor
	macros instead of SWITCH_EXPR ones.
	* c-dump.c (c_dump_tree): Likewise.
	* c-gimplify.c (gimplify_switch_stmt): Likewise.
	* c-typeck.c (c_start_case, do_case, c_finish_case): Likewise.

cp/
	* decl.c (finish_case_label): Use SWITCH_STMT accessor macros
	instead of SWITCH_EXPR ones.
	* pt.c (tsubst_expr): Likewise.
	* semantics.c (begin_switch_stmt, finish_switch_cond,
	finish_switch_stmt): Likewise.

doc/
	* c-tree.texi (SWITCH_STMT): Update accessor macro names.

From-SVN: r94315
2005-01-27 07:32:26 +00:00
Volker Reichelt
209136895d re PR c/18809 (ICE after a couple of errors with a simple invalid C code)
PR c/18809
	* c-typeck.c (convert_arguments): Check for error_mark_node.

	* gcc.dg/pr18809-1.c: New test.

From-SVN: r94049
2005-01-22 00:12:27 +00:00
Ian Lance Taylor
089efaa4a1 re PR tree-optimization/13000 ([unit-at-a-time] Using -O2 cannot detect missing return statement in a function)
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
2005-01-21 19:05:23 +00:00
Jakub Jelinek
e89be13bdf re PR c/17297 (ICE with FP vector constructor containing qnan calculation)
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
2005-01-19 10:27:23 +01:00
Andrew Pinski
b4c3388398 re PR c/19472 (compiler internal error: in var_ann, at tree-flow-inline.h:34)
2005-01-18  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c/19472
        * semantics.c (finish_asm_stmt): Strip nops off
        input memory operands.

2005-01-18  Andrew Pinski  <pinskia@physics.uc.edu>

        PR C/19472
        * c-typeck.c (build_asm_expr): Strip nops off
        input memory operands.

2005-01-18  Andrew Pinski  <pinskia@physics.uc.edu>

        PR C/19472
        * gcc.dg/asm-a.c: New test.

From-SVN: r93840
2005-01-18 09:52:33 -08:00
Andreas Jaeger
f2fd382112 [multiple changes]
2005-01-18  Andi Kleen <ak@muc.de>

	* c-typeck.c: (convert_for_assignment): Check warn_pointer_sign.
	* c.opt (-Wpointer-sign): Add.
	* doc/invoke.texi: (-Wpointer-sign): Add.

2005-01-18  Michael Matz  <matz@suse.de>

	* gcc.dg/Wno-pointer-sign.c: New test for -Wno-pointer-sign.

From-SVN: r93813
2005-01-18 07:03:46 +01:00
Ian Lance Taylor
812ad3382c re PR c/5675 (const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c))
PR c/5675
	* c-typeck.c (build_c_cast): Revert patch of 2003-02-16: don't
	fold constant variables into initial values.

From-SVN: r93769
2005-01-17 18:54:18 +00:00
Joseph Myers
0953878d48 c-typeck.c (constructor_no_implicit): Remove.
* c-typeck.c (constructor_no_implicit): Remove.
	(set_designator, process_init_element): Don't check
	constructor_no_implicit.

From-SVN: r92951
2005-01-05 15:22:38 +00:00
Richard Henderson
74f0c611c6 re PR inline-asm/15740 (ICE caused by a memory operand in an asm statement)
PR inline-asm/15740
        * gimplify.c (gimplify_asm_expr): Move resolve asm names ...
        * c-typeck.c (build_asm_expr): ... here.  Validate input
        constraints.  Mark memory inputs addressable.

        * semantics.c (finish_asm_stmt): Resolve asm names.  Validate input
        constraints.  Mark memory inputs addressable.

From-SVN: r92693
2004-12-28 17:22:15 -08:00
James A. Morrison
6f17bbcf05 re PR c/18596 (ICE in make_decl_rtl)
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
2004-12-21 17:01:08 +00:00
Ziemowit Laski
22a0b85fcc c-typeck.c (lookup_field): Check if a TYPE_LANG_SPECIFIC pointer field is set before dereferencing it.
[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
2004-12-10 21:08:22 +00:00
Steven Bosscher
02fbae8342 re PR c/18867 (ICE on invalid switch quantity)
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
2004-12-08 00:12:03 +00:00
Roger Sayle
28af952a24 c-typeck.c (c_finish_loop): Improve initial implementations for loops whose conditions are known at...
* c-typeck.c (c_finish_loop): Improve initial implementations
	for loops whose conditions are known at compile-time.

From-SVN: r91750
2004-12-05 15:31:02 +00:00
Mark Mitchell
5ae9ba3e45 re PR c++/18001 (Badly formatted error message (quotation problem))
PR c++/18001
	* c-common.h (lvalue_use): Move here from c-ctypeck.c.
	(lvalue_or_else): Declare.
	* c-common.c (lvalue_or_else): Move here from c-typeck.c.
	* c-typeck.c (lvalue_use): Remove.
	(lvalue_or_else): Remove.

	PR c++/18556
	* toplev.c (check_global_declarations): Set DECL_IGNORED_P on
	unemitted variables with static storage duration.

	PR c++/18445
	* class.c (instantiate_type): Treat NON_DEPENDENT_EXPRs with
	unknown_type as non matching.  Tidy up.
	* pt.c (build_non_dependent_expr): Do not build a
	NON_DEPENDENT_EXPR for a VAR_DECL.

	PR c++/18001
	* cp-tree.h (lvalue_or_else): Remove declaration.
	* tree.c (lvalue_or_else): Remove.
	* typeck.c (build_unary_op): Adjust call to lvalue_or_else.
	(build_modify_expr): Likewise.

	PR c++/18625
	* decl.c (duplicate_decls): Return error_mark_node on error, as
	specified.

	PR c++/18466
	* decl.c (grokvardecl): Keep track of whether or not a there was
	explicit qualification.
	* name-lookup.c (set_decl_namespace): Complain about explicit
	qualification of a name within its own namespace.

	PR c++/18545
	* typeck.c (check_return_expr): Robustify.

	PR c++/18445
	* g++.dg/template/crash28.C: Likewise.

	PR c++/18001
	* g++.dg/expr/unary2.C: Adjust lvalue messages.
	* g++.dg/ext/lvaddr.C: Likewise.
	* g++.dg/opt/pr7503-3.C: Likewise.

	PR c++/18466
	* g++.dg/parse/qualified3.C: New test.
	* g++.old-deja/g++.other/friend7.C: Remove bogus qualification.

	PR c++/18545
	* g++.dg/expr/return1.C: New test.

From-SVN: r91301
2004-11-25 17:11:37 +00:00
Joseph Myers
a4ab7973cf c-typeck.c (build_array_ref): Don't check for index == 0.
* 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
2004-11-20 20:31:52 +00:00
Joseph Myers
37b2f2904b c-common.c (binary_op_error): Don't allow LROTATE_EXPR, RROTATE_EXPR or unknown code.
* c-common.c (binary_op_error): Don't allow LROTATE_EXPR,
	RROTATE_EXPR or unknown code.
	* c-typeck.c (build_binary_op): Don't allow RROTATE_EXPR,
	LROTATE_EXPR, MAX_EXPR, MIN_EXPR, UNORDERED_EXPR, ORDERED_EXPR,
	UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR
	or unknown code.

From-SVN: r90697
2004-11-15 22:13:21 +00:00
Kazu Hirata
4e2fb7de2d c-typeck.c (c_size_in_bytes, [...]): Make them static.
* c-typeck.c (c_size_in_bytes, record_maybe_used_decl):
	Make them static.
	* c-tree.h: Remove the corresponding prototypes.

From-SVN: r90504
2004-11-11 23:13:12 +00:00
Joseph Myers
abb54d14c0 c-typeck.c (build_unary_op): Replace unreachable diagnostic for taking address of bit-field by assertion.
* c-typeck.c (build_unary_op): Replace unreachable diagnostic for
	taking address of bit-field by assertion.

From-SVN: r90216
2004-11-07 00:31:55 +00:00
Joseph Myers
0a880880ee c-typeck.c (output_init_element): Return early if value is error_mark_node.
* c-typeck.c (output_init_element): Return early if value is
	error_mark_node.

testsuite:
	* gcc.dg/init-undef-1.c: New test.

From-SVN: r90146
2004-11-05 22:21:30 +00:00
Ulrich Weigand
106f5de5a5 re PR tree-optimization/18184 (Tree optimizers ignore pointer modes)
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
2004-11-04 20:11:13 +00:00
Ziemowit Laski
16b34ad662 c-common.h (objc_lookup_ivar): Add second parameter to prototype.
[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
2004-10-31 06:17:55 +00:00
Adam Nemet
0039fa5565 re PR middle-end/18160 (ICE on taking register variable address)
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-28 19:30:49 +00:00
Andrew Pinski
7c672dfc01 revert: c-typeck.c (default_function_array_conversion): Always create &a[0] for array types.
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 15:01:19 -07:00
Andrew Pinski
a2a877e2dc c-typeck.c (default_function_array_conversion): Always create &a[0] for array types.
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
2004-10-17 10:16:27 -07:00
Joseph Myers
dee3cda5ba c-typeck.c (build_compound_expr, [...]): Don't try to use non_lvalue to stop something being a null pointer constant.
* c-typeck.c (build_compound_expr, build_c_cast): Don't try to use
	non_lvalue to stop something being a null pointer constant.

From-SVN: r89120
2004-10-15 22:32:03 +01:00
Joseph Myers
3789b31650 re PR c/17301 (ICE on wrong usage of __builtin_stdarg_start)
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
2004-10-12 09:32:17 +01:00
Joseph Myers
6dcc04b060 c-typeck.c (enum impl_conv): Add ic_argpass_nonproto.
* c-typeck.c (enum impl_conv): Add ic_argpass_nonproto.
	(convert_for_assignment): Handle ic_argpass_nonproto.  Add
	comments about its relevance to errors.
	(c_convert_parm_for_inlining): Use ic_argpass_nonproto.

testsuite:
	* gcc.dg/assign-warn-3.c: New test.

From-SVN: r88784
2004-10-08 20:52:04 +01:00
Joseph Myers
2ac2f1647d c-typeck.c (enum impl_conv): New.
* 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
2004-10-08 11:21:42 +01:00
Joseph Myers
03dafa6108 c-typeck.c (convert_arguments): Take expression for called function rather than its name.
* 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
2004-10-06 23:16:29 +01:00
Joseph Myers
3f75a25471 c-aux-info.c, [...]: Follow code formatting conventions.
* c-aux-info.c, c-common.c, c-common.h, c-cppbuiltin.c, c-decl.c,
	c-format.c, c-incpath.c, c-lex.c, c-objc-common.c, c-opts.c,
	c-parse.in, c-pch.c, c-ppoutput.c, c-pragma.c, c-typeck.c: Follow
	code formatting conventions.

From-SVN: r88462
2004-10-03 21:53:05 +01:00
Joseph Myers
36262a4c61 * c-typeck.c (warn_for_assignment): Don't permit argnum == 0.
From-SVN: r88412
2004-10-02 00:11:58 +01:00
Joseph Myers
9bf242660a c-tree.h (readonly_error): Remove.
* c-tree.h (readonly_error): Remove.
	* c-typeck (enum lvalue_use): New.
	(lvalue_or_else, readonly_error): Use it.  All callers changed.
	(readonly_error): Make static.

testsuite:
	* gcc.dg/lvalue-2.c: New test.

From-SVN: r88362
2004-09-30 23:52:06 +01:00
Joseph Myers
254ac10c31 re PR c/17730 (Regression in diagnost message "invalid lvalue in unary %<&%>")
PR c/17730
	* c-typeck.c (lvalue_or_else): Pass msgid directly to error.

testsuite:
	* gcc.dg/pr17730-1.c: New test

From-SVN: r88343
2004-09-30 19:17:54 +01:00