re PR c++/70507 (integer overflow builtins not constant expressions)
authorMartin Sebor <msebor@redhat.com>
Wed, 8 Jun 2016 19:03:17 +0000 (19:03 +0000)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 8 Jun 2016 19:03:17 +0000 (21:03 +0200)
commit44a845ca0e592ca187fbab07ac9e055b20fb11cc
tree3a15f43474585970a2b22a98bf6ff1b46fcf075f
parent379aea728edb345f42b19dfade5529f8f9e8a6da
re PR c++/70507 (integer overflow builtins not constant expressions)

PR c++/70507
PR c/68120
* builtins.def (BUILT_IN_ADD_OVERFLOW_P, BUILT_IN_SUB_OVERFLOW_P,
BUILT_IN_MUL_OVERFLOW_P): New builtins.
* builtins.c: Include gimple-fold.h.
(fold_builtin_arith_overflow): Handle
BUILT_IN_{ADD,SUB,MUL}_OVERFLOW_P.
(fold_builtin_3): Likewise.
* doc/extend.texi (Integer Overflow Builtins): Document
__builtin_{add,sub,mul}_overflow_p.
gcc/c/
* c-typeck.c (convert_arguments): Don't promote last argument
of BUILT_IN_{ADD,SUB,MUL}_OVERFLOW_P.
gcc/cp/
* constexpr.c: Include gimple-fold.h.
(cxx_eval_internal_function): New function.
(cxx_eval_call_expression): Call it.
(potential_constant_expression_1): Handle integer arithmetic
overflow built-ins.
* tree.c (builtin_valid_in_constant_expr_p): Handle
BUILT_IN_{ADD,SUB,MUL}_OVERFLOW_P.
gcc/c-family/
* c-common.c (check_builtin_function_arguments): Handle
BUILT_IN_{ADD,SUB,MUL}_OVERFLOW_P.
gcc/testsuite/
* c-c++-common/builtin-arith-overflow-1.c: Add test cases.
* c-c++-common/builtin-arith-overflow-2.c: New test.
* g++.dg/ext/builtin-arith-overflow-1.C: New test.
* g++.dg/cpp0x/constexpr-arith-overflow.C: New test.
* g++.dg/cpp1y/constexpr-arith-overflow.C: New test.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r237238
17 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/builtins.def
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/cp/tree.c
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/builtin-arith-overflow-1.c
gcc/testsuite/c-c++-common/builtin-arith-overflow-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-arith-overflow.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/constexpr-arith-overflow.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/builtin-arith-overflow-1.C [new file with mode: 0644]