public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
@ 2005-01-13 2:34 ` ian at airs dot com
2005-01-13 15:16 ` ian at airs dot com
` (6 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: ian at airs dot com @ 2005-01-13 2:34 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ian at airs dot com 2005-01-13 02:34 -------
Just a note that reverting this patch:
http://gcc.gnu.org/ml/gcc-patches/2003-02/msg01334.html
fixes this regression. Reverting that patch
Jan said that his patch did not change the results of the test, so presumably
something else changed somewhere.
Reverting that patch removes most of the warnings from c90-const-expr-3.c and
c99-const-expr-3.c, although we still get warnings for +0.0, 0.0+0.0, and
(double)0.0.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |ian at airs dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
2005-01-13 2:34 ` [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions ian at airs dot com
@ 2005-01-13 15:16 ` ian at airs dot com
2005-01-17 18:54 ` cvs-commit at gcc dot gnu dot org
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: ian at airs dot com @ 2005-01-13 15:16 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ian at airs dot com 2005-01-13 15:16 -------
Partial patch: http://gcc.gnu.org/ml/gcc-patches/2005-01/msg00725.html
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
2005-01-13 2:34 ` [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions ian at airs dot com
2005-01-13 15:16 ` ian at airs dot com
@ 2005-01-17 18:54 ` cvs-commit at gcc dot gnu dot org
2005-01-17 18:56 ` cvs-commit at gcc dot gnu dot org
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-01-17 18:54 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-01-17 18:54 -------
Subject: Bug 5675
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: ian@gcc.gnu.org 2005-01-17 18:54:21
Modified files:
gcc : ChangeLog c-typeck.c
Log message:
PR c/5675
* c-typeck.c (build_c_cast): Revert patch of 2003-02-16: don't
fold constant variables into initial values.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.7155&r2=2.7156
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/c-typeck.c.diff?cvsroot=gcc&r1=1.407&r2=1.408
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
` (2 preceding siblings ...)
2005-01-17 18:54 ` cvs-commit at gcc dot gnu dot org
@ 2005-01-17 18:56 ` cvs-commit at gcc dot gnu dot org
2005-01-17 18:57 ` [Bug c/5675] " ian at airs dot com
` (3 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-01-17 18:56 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-01-17 18:56 -------
Subject: Bug 5675
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: ian@gcc.gnu.org 2005-01-17 18:55:57
Modified files:
gcc/testsuite : ChangeLog
gcc/testsuite/gcc.dg: c90-const-expr-3.c c99-const-expr-3.c
Log message:
PR c/5675
* gcc.dg/c90-const-expr-3.c: Remove xfails on tests which now
pass--those that refer just to the variable, possibly with a
cast.
* gcc.dg/c99-const-expr-3.c: Likewise.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.4897&r2=1.4898
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/c90-const-expr-3.c.diff?cvsroot=gcc&r1=1.5&r2=1.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/c99-const-expr-3.c.diff?cvsroot=gcc&r1=1.4&r2=1.5
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
` (3 preceding siblings ...)
2005-01-17 18:56 ` cvs-commit at gcc dot gnu dot org
@ 2005-01-17 18:57 ` ian at airs dot com
2005-01-24 0:08 ` pinskia at gcc dot gnu dot org
` (2 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: ian at airs dot com @ 2005-01-17 18:57 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ian at airs dot com 2005-01-17 18:57 -------
This bug is not fixed, but the 4.0 regression has been fixed. 4.0 now fails in
the same way as earlier gcc versions.
--
What |Removed |Added
----------------------------------------------------------------------------
Summary|[4.0 regression] const |const variables wrongly
|variables wrongly considered|considered part of constant
|part of constant expressions|expressions
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
` (4 preceding siblings ...)
2005-01-17 18:57 ` [Bug c/5675] " ian at airs dot com
@ 2005-01-24 0:08 ` pinskia at gcc dot gnu dot org
2005-04-25 2:09 ` pinskia at gcc dot gnu dot org
2005-06-30 13:31 ` [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c) pinskia at gcc dot gnu dot org
7 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-01-24 0:08 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.0.0 |---
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
` (5 preceding siblings ...)
2005-01-24 0:08 ` pinskia at gcc dot gnu dot org
@ 2005-04-25 2:09 ` pinskia at gcc dot gnu dot org
2005-06-30 13:31 ` [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c) pinskia at gcc dot gnu dot org
7 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-04-25 2:09 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |pinskia at gcc dot gnu dot
| |org
Last reconfirmed|2004-12-05 04:31:32 |2005-04-25 02:08:58
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c)
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
` (6 preceding siblings ...)
2005-04-25 2:09 ` pinskia at gcc dot gnu dot org
@ 2005-06-30 13:31 ` pinskia at gcc dot gnu dot org
7 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-30 13:31 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-30 13:31 -------
Adding "gcc.dg/c9[09]-const-expr-3.c" to the summary so I don't get confused between this bug and
PR 456.
--
What |Removed |Added
----------------------------------------------------------------------------
Summary|const variables wrongly |const variables wrongly
|considered part of constant |considered part of constant
|expressions |expressions (gcc.dg/c9[09]-
| |const-expr-3.c)
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c)
[not found] <bug-5675-230@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2009-03-29 18:15 ` jsm28 at gcc dot gnu dot org
@ 2009-03-29 18:18 ` jsm28 at gcc dot gnu dot org
3 siblings, 0 replies; 12+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2009-03-29 18:18 UTC (permalink / raw)
To: gcc-bugs
------- Comment #15 from jsm28 at gcc dot gnu dot org 2009-03-29 18:18 -------
Fixed for 4.5.
--
jsm28 at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
Target Milestone|--- |4.5.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c)
[not found] <bug-5675-230@http.gcc.gnu.org/bugzilla/>
2008-10-24 0:08 ` jsm28 at gcc dot gnu dot org
2008-10-24 19:38 ` jsm28 at gcc dot gnu dot org
@ 2009-03-29 18:15 ` jsm28 at gcc dot gnu dot org
2009-03-29 18:18 ` jsm28 at gcc dot gnu dot org
3 siblings, 0 replies; 12+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2009-03-29 18:15 UTC (permalink / raw)
To: gcc-bugs
------- Comment #14 from jsm28 at gcc dot gnu dot org 2009-03-29 18:14 -------
Subject: Bug 5675
Author: jsm28
Date: Sun Mar 29 18:13:43 2009
New Revision: 145254
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=145254
Log:
PR c/456
PR c/5675
PR c/19976
PR c/29116
PR c/31871
PR c/35198
fixincludes:
* inclhack.def (glibc_tgmath): New fix.
* fixincl.x: Regenerate.
* tests/base/tgmath.h: New.
gcc:
* builtins.c (fold_builtin_sincos): Build COMPOUND_EXPR in
void_type_node.
(fold_call_expr): Return a NOP_EXPR from folding rather than the
contained expression.
* c-common.c (c_fully_fold, c_fully_fold_internal, c_save_expr):
New.
(c_common_truthvalue_conversion): Use c_save_expr. Do not fold
conditional expressions for C.
(decl_constant_value_for_optimization): Move from
decl_constant_value_for_broken_optimization in c-typeck.c. Check
whether optimizing and that the expression is a VAR_DECL not of
array type instead of doing such checks in the caller. Do not
check pedantic. Call gcc_unreachable for C++.
* c-common.def (C_MAYBE_CONST_EXPR): New.
* c-common.h (c_fully_fold, c_save_expr,
decl_constant_value_for_optimization): New prototypes.
(C_MAYBE_CONST_EXPR_PRE, C_MAYBE_CONST_EXPR_EXPR,
C_MAYBE_CONST_EXPR_INT_OPERANDS, C_MAYBE_CONST_EXPR_NON_CONST,
EXPR_INT_CONST_OPERANDS): Define.
* c-convert.c (convert): Strip nops from expression.
* c-decl.c (groktypename): Take extra parameters expr and
expr_const_operands. Update call to grokdeclarator.
(start_decl): Update call to grokdeclarator. Add statement for
expressions used in type of decl.
(grokparm): Update call to grokdeclarator.
(push_parm_decl): Update call to grokdeclarator.
(build_compound_literal): Add parameter non_const and build a
C_MAYBE_COSNT_EXPR if applicable.
(grokdeclarator): Take extra parameters expr and
expr_const_operands. Track expressions used in declaration
specifiers and declarators. Fold array sizes and track whether
they are constant expressions and whether they are integer
constant expressions.
(parser_xref_tag): Set expr and expr_const_operands fields in
return value.
(grokfield): Update call to grokdeclarator.
(start_function): Update call to grokdeclarator.
(build_null_declspecs): Set expr and expr_const_operands fields in
return value.
(declspecs_add_type): Handle expressions in typeof specifiers.
* c-parser.c (c_parser_declspecs): Set expr and
expr_const_operands fields for declaration specifiers.
(c_parser_enum_specifier): Likewise.
(c_parser_struct_or_union_specifier): Likewise.
(c_parser_typeof_specifier): Likewise. Update call to
groktypename. Fold expression as needed. Return expressions with
type instead of adding statements.
(c_parser_attributes): Update calls to c_parser_expr_list.
(c_parser_statement_after_labels): Fold expression before passing
to objc_build_throw_stmt.
(c_parser_condition): Fold expression.
(c_parser_asm_operands): Fold expression.
(c_parser_conditional_expression): Use c_save_expr. Update call
to build_conditional_expr.
(c_parser_alignof_expression): Update call to groktypename.
(c_parser_postfix_expression): Preserve C_MAYBE_CONST_EXPR as
original_code. Fold expression argument of va_arg. Create
C_MAYBE_CONST_EXPR to preserve side effects of expressions in type
argument to va_arg. Update calls to groktypename. Fold array
index for offsetof. Verify that first argument to
__builtin_choose_expr has integer type.
(c_parser_postfix_expression_after_paren_type): Update calls to
groktypename and build_compound_literal. Handle expressions with
side effects in type name.
(c_parser_postfix_expression_after_primary): Update call to
c_parser_expr_list. Set original_code for calls to
__builtin_constant_p.
(c_parser_expr_list): Take extra parameter fold_p. Fold
expressions if requested.
(c_parser_objc_type_name): Update call to groktypename.
(c_parser_objc_synchronized_statement): Fold expression.
(c_parser_objc_receiver): Fold expression.
(c_parser_objc_keywordexpr): Update call to c_parser_expr_list.
(c_parser_omp_clause_num_threads, c_parser_omp_clause_schedule,
c_parser_omp_atomic, c_parser_omp_for_loop): Fold expressions.
* c-tree.h (CONSTRUCTOR_NON_CONST): Define.
(struct c_typespec): Add elements expr and expr_const_operands.
(struct c_declspecs): Add elements expr and expr_const_operands.
(groktypename, build_conditional_expr, build_compound_literal):
Update prototypes.
(in_late_binary_op): Declare.
* c-typeck.c (note_integer_operands): New function.
(in_late_binary_op): New variable.
(decl_constant_value_for_broken_optimization): Move to c-common.c
and rename to decl_constant_value_for_optimization.
(default_function_array_conversion): Do not strip nops.
(default_conversion): Do not call
decl_constant_value_for_broken_optimization.
(build_array_ref): Do not fold result.
(c_expr_sizeof_expr): Fold operand. Use C_MAYBE_CONST_EXPR for
result when operand is a VLA.
(c_expr_sizeof_type): Update call to groktypename. Handle
expressions included in type name. Use C_MAYBE_CONST_EXPR for
result when operand names a VLA type.
(build_function_call): Update call to build_compound_literal.
Only fold result for calls to __builtin_* functions. Strip
NOP_EXPR from INTEGER_CST returned from such functions. Fold
the function designator.
(convert_arguments): Fold arguments. Update call to
convert_for_assignment.
(build_unary_op): Handle increment and decrement of
C_MAYBE_CONST_EXPR. Move lvalue checks for increment and
decrement earlier. Fold operand of increment and decrement.
Handle address of C_MAYBE_CONST_EXPR. Only fold expression being
built for integer operand. Wrap returns that are INTEGER_CSTs
without being integer constant expressions or that have integer
constant operands without being INTEGER_CSTs.
(lvalue_p): Handle C_MAYBE_CONST_EXPR.
(build_conditional_expr): Add operand ifexp_bcp. Track whether
result is an integer constant expression or can be used in
unevaluated parts of one and avoid folding and wrap as
appropriate. Fold operands before possibly doing -Wsign-compare
warnings.
(build_compound_expr): Wrap result for C99 if operands can be used
in integer constant expressions.
(build_c_cast): Update call to digest_init. Do not ignore
overflow from casting floating-point constants to integers. Wrap
results that could be confused with integer constant expressions,
null pointer constants or floating-point constants.
(c_cast_expr): Update call to groktypename. Handle expressions
included in type name.
(build_modify_expr): Handle modifying a C_MAYBE_CONST_EXPR. Fold
lhs inside possible SAVE_EXPR. Fold RHS before assignment.
Update calls to convert_for_assignment.
(convert_for_assignment): Take new parameter
null_pointer_constant. Do not strip nops or call
decl_constant_value_for_broken_optimization. Set
in_late_binary_op for conversions to boolean.
(store_init_value): Update call to digest_init.
(digest_init): Take new parameter null_pointer_constant. Do not
call decl_constant_value_for_broken_optimization. pedwarn for
initializers not constant expressions. Update calls to
convert_for_assignment.
(constructor_nonconst): New.
(struct constructor_stack): Add nonconst element.
(really_start_incremental_init, push_init_level, pop_init_level):
Handle constructor_nonconst and nonconst element.
(set_init_index): Call constant_expression_warning for array
designators.
(output_init_element): Fold value. Set constructor_nonconst as
applicable. pedwarn for initializers not constant expressions.
Update call to digest_init. Call constant_expression_warning
where constant initializers are required.
(process_init_element): Use c_save_expr.
(c_finish_goto_ptr): Fold expression.
(c_finish_return): Fold return value. Update call to
convert_for_assignment.
(c_start_case): Fold switch expression.
(c_process_expr_stmt): Fold expression.
(c_finish_stmt_expr): Create C_MAYBE_CONST_EXPR as needed to
ensure statement expression is not evaluated in constant
expression.
(build_binary_op): Track whether results are integer constant
expressions or may occur in such, disable folding and wrap results
as applicable. Fold operands for -Wsign-compare warnings unless
in_late_binary_op.
(c_objc_common_truthvalue_conversion): Handle results folded to
integer constants that are not integer constant expressions.
* doc/extend.texi: Document when typeof operands are evaluated,
that condition of __builtin_choose_expr is an integer constant
expression, and more about use of __builtin_constant_p in
initializers.
gcc/objc:
* objc-act.c (objc_finish_try_stmt): Set in_late_binary_op.
gcc/testsuite:
* gcc.c-torture/compile/20081108-1.c,
gcc.c-torture/compile/20081108-2.c,
gcc.c-torture/compile/20081108-3.c, gcc.dg/bconstp-2.c,
gcc.dg/bconstp-3.c, gcc.dg/bconstp-4.c, gcc.dg/c90-const-expr-6.c,
gcc.dg/c90-const-expr-7.c, gcc.dg/c90-const-expr-8.c,
gcc.dg/c90-const-expr-9.c, gcc.dg/c90-const-expr-10.c,
gcc.dg/c90-const-expr-11.c, gcc.dg/c99-const-expr-6.c,
gcc.dg/c99-const-expr-7.c, gcc.dg/c99-const-expr-8.c,
gcc.dg/c99-const-expr-9.c, gcc.dg/c99-const-expr-10.c,
gcc.dg/c99-const-expr-11.c, gcc.dg/c99-const-expr-12.c,
gcc.dg/c99-const-expr-13.c, gcc.dg/compare10.c,
gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu89-const-expr-2.c,
gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-const-expr-2.c,
gcc.dg/gnu99-const-expr-3.c, gcc.dg/vla-12.c, gcc.dg/vla-13.c,
gcc.dg/vla-14.c, gcc.dg/vla-15.c, gcc.dg/vla-16.c: New tests.
* gcc.dg/c90-const-expr-1.c, gcc.dg/c90-const-expr-2.c,
gcc.dg/c90-const-expr-3.c, gcc.dg/c99-const-expr-2.c,
gcc.dg/c99-const-expr-3.c, gcc.dg/c99-static-1.c: Remove XFAILs.
* gcc.dg/c90-const-expr-2.c: Use ZERO in place of 0 in another
case.
* gcc.dg/overflow-warn-1.c, gcc.dg/overflow-warn-2.c,
gcc.dg/overflow-warn-3.c, gcc.dg/overflow-warn-4.c: Remove
XFAILs. Update expected messages.
* gcc.dg/pr14649-1.c, gcc.dg/pr19984.c, gcc.dg/pr25682.c: Update
expected messages.
* gcc.dg/real-const-1.c: Replace with test from original PR.
* gcc.dg/vect/pr32230.c: Use intermediate cast to __PTRDIFF_TYPE__
when casting from non-constant integer to pointer.
Added:
trunk/fixincludes/tests/base/tgmath.h
trunk/gcc/testsuite/gcc.c-torture/compile/20081108-1.c
trunk/gcc/testsuite/gcc.c-torture/compile/20081108-2.c
trunk/gcc/testsuite/gcc.c-torture/compile/20081108-3.c
trunk/gcc/testsuite/gcc.dg/bconstp-2.c
trunk/gcc/testsuite/gcc.dg/bconstp-3.c
trunk/gcc/testsuite/gcc.dg/bconstp-4.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-10.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-11.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-6.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-7.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-8.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-9.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-10.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-11.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-12.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-13.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-6.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-7.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-8.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-9.c
trunk/gcc/testsuite/gcc.dg/compare10.c
trunk/gcc/testsuite/gcc.dg/gnu89-const-expr-1.c
trunk/gcc/testsuite/gcc.dg/gnu89-const-expr-2.c
trunk/gcc/testsuite/gcc.dg/gnu99-const-expr-1.c
trunk/gcc/testsuite/gcc.dg/gnu99-const-expr-2.c
trunk/gcc/testsuite/gcc.dg/gnu99-const-expr-3.c
trunk/gcc/testsuite/gcc.dg/vla-12.c
trunk/gcc/testsuite/gcc.dg/vla-13.c
trunk/gcc/testsuite/gcc.dg/vla-14.c
trunk/gcc/testsuite/gcc.dg/vla-15.c
trunk/gcc/testsuite/gcc.dg/vla-16.c
Modified:
trunk/fixincludes/ChangeLog
trunk/fixincludes/fixincl.x
trunk/fixincludes/inclhack.def
trunk/gcc/ChangeLog
trunk/gcc/builtins.c
trunk/gcc/c-common.c
trunk/gcc/c-common.def
trunk/gcc/c-common.h
trunk/gcc/c-convert.c
trunk/gcc/c-decl.c
trunk/gcc/c-parser.c
trunk/gcc/c-tree.h
trunk/gcc/c-typeck.c
trunk/gcc/doc/extend.texi
trunk/gcc/objc/ChangeLog
trunk/gcc/objc/objc-act.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/c90-const-expr-1.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-2.c
trunk/gcc/testsuite/gcc.dg/c90-const-expr-3.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-2.c
trunk/gcc/testsuite/gcc.dg/c99-const-expr-3.c
trunk/gcc/testsuite/gcc.dg/c99-static-1.c
trunk/gcc/testsuite/gcc.dg/overflow-warn-1.c
trunk/gcc/testsuite/gcc.dg/overflow-warn-2.c
trunk/gcc/testsuite/gcc.dg/overflow-warn-3.c
trunk/gcc/testsuite/gcc.dg/overflow-warn-4.c
trunk/gcc/testsuite/gcc.dg/pr14649-1.c
trunk/gcc/testsuite/gcc.dg/pr19984.c
trunk/gcc/testsuite/gcc.dg/pr25682.c
trunk/gcc/testsuite/gcc.dg/real-const-1.c
trunk/gcc/testsuite/gcc.dg/vect/pr32230.c
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c)
[not found] <bug-5675-230@http.gcc.gnu.org/bugzilla/>
2008-10-24 0:08 ` jsm28 at gcc dot gnu dot org
@ 2008-10-24 19:38 ` jsm28 at gcc dot gnu dot org
2009-03-29 18:15 ` jsm28 at gcc dot gnu dot org
2009-03-29 18:18 ` jsm28 at gcc dot gnu dot org
3 siblings, 0 replies; 12+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-10-24 19:38 UTC (permalink / raw)
To: gcc-bugs
------- Comment #13 from jsm28 at gcc dot gnu dot org 2008-10-24 19:36 -------
Subject: Bug 5675
Author: jsm28
Date: Fri Oct 24 19:34:52 2008
New Revision: 141349
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=141349
Log:
PR c/456
PR c/5675
PR c/19976
PR c/29116
PR c/31871
PR c/35198
fixincludes:
* inclhack.def (glibc_tgmath): New fix.
* fixincl.x: Regenerate.
* tests/base/tgmath.h: New.
gcc:
* builtins.c (fold_call_expr): Return a NOP_EXPR from folding
rather than the contained expression.
* c-common.c (c_save_expr): New.
(c_common_truthvalue_conversion): Use c_save_expr. Do not fold
conditional expressions for C.
* c-common.def (C_MAYBE_CONST_EXPR): New.
* c-common.h (c_fully_fold, c_save_expr): New prototypes.
(C_MAYBE_CONST_EXPR_PRE, C_MAYBE_CONST_EXPR_EXPR,
C_MAYBE_CONST_EXPR_INT_OPERANDS, C_MAYBE_CONST_EXPR_NON_CONST,
EXPR_INT_CONST_OPERANDS): Define.
* c-convert.c (convert): Strip nops from expression.
* c-decl.c (groktypename): Take extra parameters expr and
expr_const_operands. Update call to grokdeclarator.
(start_decl): Update call to grokdeclarator. Add statement for
expressions used in type of decl.
(grokparm): Update call to grokdeclarator.
(push_parm_decl): Update call to grokdeclarator.
(build_compound_literal): Add parameter non_const and build a
C_MAYBE_COSNT_EXPR if applicable.
(grokdeclarator): Take extra parameters expr and
expr_const_operands. Track expressions used in declaration
specifiers and declarators. Fold array sizes and track whether
they are constant expressions and whether they are integer
constant expressions.
(parser_xref_tag): Set expr and expr_const_operands fields in
return value.
(grokfield): Update call to grokdeclarator.
(start_function): Update call to grokdeclarator.
(build_null_declspecs): Set expr and expr_const_operands fields in
return value.
(declspecs_add_type): Handle expressions in typeof specifiers.
* c-parser.c (c_parser_declspecs): Set expr and
expr_const_operands fields for declaration specifiers.
(c_parser_enum_specifier): Likewise.
(c_parser_struct_or_union_specifier): Likewise.
(c_parser_typeof_specifier): Likewise. Update call to
groktypename. Fold expression as needed. Return expressions with
type instead of adding statements.
(c_parser_attributes): Update calls to c_parser_expr_list.
(c_parser_statement_after_labels): Fold expression before passing
to objc_build_throw_stmt.
(c_parser_condition): Fold expression.
(c_parser_asm_operands): Fold expression.
(c_parser_conditional_expression): Use c_save_expr. Update call
to build_conditional_expr.
(c_parser_alignof_expression): Update call to groktypename.
(c_parser_postfix_expression): Preserve C_MAYBE_CONST_EXPR as
original_code. Fold expression argument of va_arg. Create
C_MAYBE_CONST_EXPR to preserve side effects of expressions in type
argument to va_arg. Update calls to groktypename. Fold array
index for offsetof. Verify that first argument to
__builtin_choose_expr has integer type.
(c_parser_postfix_expression_after_paren_type): Update calls to
groktypename and build_compound_literal. Handle expressions with
side effects in type name.
(c_parser_postfix_expression_after_primary): Update call to
c_parser_expr_list. Set original_code for calls to
__builtin_constant_p.
(c_parser_expr_list): Take extra parameter fold_p. Fold
expressions if requested.
(c_parser_objc_type_name): Update call to groktypename.
(c_parser_objc_synchronized_statement): Fold expression.
(c_parser_objc_receiver): Fold expression.
(c_parser_objc_keywordexpr): Update call to c_parser_expr_list.
(c_parser_omp_clause_num_threads, c_parser_omp_clause_schedule,
c_parser_omp_atomic, c_parser_omp_for_loop): Fold expressions.
* c-tree.h (CONSTRUCTOR_NON_CONST): Define.
(struct c_typespec): Add elements expr and expr_const_operands.
(struct c_declspecs): Add elements expr and expr_const_operands.
(groktypename, build_conditional_expr, build_compound_literal):
Update prototypes.
* c-typeck.c (c_fully_fold, c_fully_fold_internal,
note_integer_operands): New functions.
(decl_constant_value_for_broken_optimization): Rename to
decl_constant_value_for_optimization: Check whether optimizing
and that the expression is a VAR_DECL not of array type instead of
doing such checks in the caller. Do not check pedantic.
(default_function_array_conversion): Do not strip nops.
(default_conversion): Do not call
decl_constant_value_for_broken_optimization.
(build_array_ref): Do not fold result.
(c_expr_sizeof_expr): Fold operand. Use C_MAYBE_CONST_EXPR for
result when operand is a VLA.
(c_expr_sizeof_type): Update call to groktypename. Handle
expressions included in type name. Use C_MAYBE_CONST_EXPR for
result when operand names a VLA type.
(build_function_call): Update call to build_compound_literal.
Only fold result for calls to __builtin_* functions. Strip
NOP_EXPR from INTEGER_CST returned from such functions.
(convert_arguments): Fold arguments. Update call to
convert_for_assignment.
(build_unary_op): Handle increment and decrement of
C_MAYBE_CONST_EXPR. Move lvalue checks for increment and
decrement earlier. Fold operand of increment and decrement.
Handle address of C_MAYBE_CONST_EXPR. Only fold expression being
built for integer operand. Wrap returns that are INTEGER_CSTs
without being integer constant expressions or that have integer
constant operands without being INTEGER_CSTs.
(lvalue_p): Handle C_MAYBE_CONST_EXPR.
(build_conditional_expr): Add operand ifexp_bcp. Track whether
result is an integer constant expression or can be used in
unevaluated parts of one and avoid folding and wrap as
appropriate.
(build_compound_expr): Wrap result for C99 if operands can be used
in integer constant expressions.
(build_c_cast): Update call to digest_init. Do not ignore
overflow from casting floating-point constants to integers. Wrap
results that could be confused with integer constant expressions,
null pointer constants or floating-point constants.
(c_cast_expr): Update call to groktypename. Handle expressions
included in type name.
(build_modify_expr): Handle modifying a C_MAYBE_CONST_EXPR. Fold
lhs inside possible SAVE_EXPR. Fold RHS before assignment.
Update calls to convert_for_assignment.
(convert_for_assignment): Take new parameter
null_pointer_constant. Do not strip nops or call
decl_constant_value_for_broken_optimization.
(store_init_value): Update call to digest_init.
(digest_init): Take new parameter null_pointer_constant. Do not
call decl_constant_value_for_broken_optimization. pedwarn for
initializers not constant expressions. Update calls to
convert_for_assignment.
(constructor_nonconst): New.
(struct constructor_stack): Add nonconst element.
(really_start_incremental_init, push_init_level, pop_init_level):
Handle constructor_nonconst and nonconst element.
(set_init_index): Call constant_expression_warning for array
designators.
(output_init_element): Fold value. Set constructor_nonconst as
applicable. pedwarn for initializers not constant expressions.
Update call to digest_init. Call constant_expression_warning
where constant initializers are required.
(process_init_element): Use c_save_expr.
(c_finish_goto_ptr): Fold expression.
(c_finish_return): Fold return value. Update call to
convert_for_assignment.
(c_start_case): Fold switch expression.
(c_process_expr_stmt): Fold expression.
(c_finish_stmt_expr): Create C_MAYBE_CONST_EXPR as needed to
ensure statement expression is not evaluated in constant
expression.
(build_binary_op): Track whether results are integer constant
expressions or may occur in such, disable folding and wrap results
as applicable.
(c_objc_common_truthvalue_conversion): Handle results folded to
integer constants that are not integer constant expressions.
* doc/extend.texi: Document when typeof operands are evaluated,
that condition of __builtin_choose_expr is an integer constant
expression, and more about use of __builtin_constant_p in
initializers.
gcc/cp:
* typeck.c (c_fully_fold): New.
gcc/testsuite:
* gcc.dg/bconstp-2.c, gcc.dg/c90-const-expr-6.c,
gcc.dg/c90-const-expr-7.c, gcc.dg/c90-const-expr-8.c,
gcc.dg/c90-const-expr-9.c, gcc.dg/c90-const-expr-10.c,
gcc.dg/c90-const-expr-11.c, gcc.dg/c99-const-expr-6.c,
gcc.dg/c99-const-expr-7.c, gcc.dg/c99-const-expr-8.c,
gcc.dg/c99-const-expr-9.c, gcc.dg/c99-const-expr-10.c,
gcc.dg/c99-const-expr-11.c, gcc.dg/c99-const-expr-12.c,
gcc.dg/c99-const-expr-13.c, gcc.dg/gnu89-const-expr-1.c,
gcc.dg/gnu89-const-expr-2.c, gcc.dg/gnu99-const-expr-1.c,
gcc.dg/gnu99-const-expr-2.c, gcc.dg/gnu99-const-expr-3.c,
gcc.dg/vla-11.c, gcc.dg/vla-12.c, gcc.dg/vla-13.c,
gcc.dg/vla-14.c, gcc.dg/vla-15.c: New tests.
* gcc.dg/c90-const-expr-1.c, gcc.dg/c90-const-expr-2.c,
gcc.dg/c90-const-expr-3.c, gcc.dg/c99-const-expr-2.c,
gcc.dg/c99-const-expr-3.c, gcc.dg/c99-static-1.c: Remove XFAILs.
* gcc.dg/overflow-warn-1.c, gcc.dg/overflow-warn-2.c,
gcc.dg/overflow-warn-3.c, gcc.dg/overflow-warn-4.c: Remove
XFAILs. Update expected messages.
* gcc.dg/pr14649-1.c, gcc.dg/pr19984.c, gcc.dg/pr25682.c: Update
expected messages.
* gcc.dg/real-const-1.c: Replace with test from original PR.
Added:
branches/c-4_5-branch/fixincludes/ChangeLog.c45
branches/c-4_5-branch/fixincludes/tests/base/tgmath.h
branches/c-4_5-branch/gcc/ChangeLog.c45
branches/c-4_5-branch/gcc/cp/ChangeLog.c45
branches/c-4_5-branch/gcc/testsuite/ChangeLog.c45
branches/c-4_5-branch/gcc/testsuite/gcc.dg/bconstp-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-10.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-11.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-6.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-7.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-8.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-9.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-10.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-11.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-12.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-13.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-6.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-7.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-8.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-9.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/gnu89-const-expr-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/gnu89-const-expr-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/gnu99-const-expr-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/gnu99-const-expr-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/gnu99-const-expr-3.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/vla-11.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/vla-12.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/vla-13.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/vla-14.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/vla-15.c
Modified:
branches/c-4_5-branch/fixincludes/fixincl.x
branches/c-4_5-branch/fixincludes/inclhack.def
branches/c-4_5-branch/gcc/builtins.c
branches/c-4_5-branch/gcc/c-common.c
branches/c-4_5-branch/gcc/c-common.def
branches/c-4_5-branch/gcc/c-common.h
branches/c-4_5-branch/gcc/c-convert.c
branches/c-4_5-branch/gcc/c-decl.c
branches/c-4_5-branch/gcc/c-parser.c
branches/c-4_5-branch/gcc/c-tree.h
branches/c-4_5-branch/gcc/c-typeck.c
branches/c-4_5-branch/gcc/cp/typeck.c
branches/c-4_5-branch/gcc/doc/extend.texi
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c90-const-expr-3.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-const-expr-3.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/c99-static-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/overflow-warn-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/overflow-warn-2.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/overflow-warn-3.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/overflow-warn-4.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/pr14649-1.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/pr19984.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/pr25682.c
branches/c-4_5-branch/gcc/testsuite/gcc.dg/real-const-1.c
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c)
[not found] <bug-5675-230@http.gcc.gnu.org/bugzilla/>
@ 2008-10-24 0:08 ` jsm28 at gcc dot gnu dot org
2008-10-24 19:38 ` jsm28 at gcc dot gnu dot org
` (2 subsequent siblings)
3 siblings, 0 replies; 12+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-10-24 0:08 UTC (permalink / raw)
To: gcc-bugs
------- Comment #12 from jsm28 at gcc dot gnu dot org 2008-10-24 00:06 -------
Testing a patch for 4.5.
--
jsm28 at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |jsm28 at gcc dot gnu dot org
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2005-12-10 05:43:26 |2008-10-24 00:06:40
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=5675
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2009-03-29 18:18 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20020212134602.5675.jsm28@gcc.gnu.org>
2005-01-13 2:34 ` [Bug c/5675] [4.0 regression] const variables wrongly considered part of constant expressions ian at airs dot com
2005-01-13 15:16 ` ian at airs dot com
2005-01-17 18:54 ` cvs-commit at gcc dot gnu dot org
2005-01-17 18:56 ` cvs-commit at gcc dot gnu dot org
2005-01-17 18:57 ` [Bug c/5675] " ian at airs dot com
2005-01-24 0:08 ` pinskia at gcc dot gnu dot org
2005-04-25 2:09 ` pinskia at gcc dot gnu dot org
2005-06-30 13:31 ` [Bug c/5675] const variables wrongly considered part of constant expressions (gcc.dg/c9[09]-const-expr-3.c) pinskia at gcc dot gnu dot org
[not found] <bug-5675-230@http.gcc.gnu.org/bugzilla/>
2008-10-24 0:08 ` jsm28 at gcc dot gnu dot org
2008-10-24 19:38 ` jsm28 at gcc dot gnu dot org
2009-03-29 18:15 ` jsm28 at gcc dot gnu dot org
2009-03-29 18:18 ` jsm28 at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).