diff options
author | Richard Guenther <rguenther@suse.de> | 2008-07-03 08:18:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-07-03 08:18:09 +0000 |
commit | 1466cf1a6b43180972c82a4bef227f1714a2110f (patch) | |
tree | 62fd1d29ef96b1eead4ac5167bf27841c90a3586 | |
parent | 6010fae75204ec20492982771e1dd2b6beb8da97 (diff) | |
download | gcc-1466cf1a6b43180972c82a4bef227f1714a2110f.zip gcc-1466cf1a6b43180972c82a4bef227f1714a2110f.tar.gz gcc-1466cf1a6b43180972c82a4bef227f1714a2110f.tar.bz2 |
re PR c++/36128 (ICE with invalid argument for builtin)
2008-07-02 Richard Guenther <rguenther@suse.de>
PR c++/36128
* typeck.c (cp_build_function_call): Move code to verify
builtin function arguments ...
* call.c (build_cxx_call): ... here.
* g++.dg/other/builtin1.C: New testcase.
From-SVN: r137408
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/call.c | 7 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/builtin1.C | 6 |
5 files changed, 25 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6475b43..5ef7e2e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2008-07-03 Richard Guenther <rguenther@suse.de> + + PR c++/36128 + * typeck.c (cp_build_function_call): Move code to verify + builtin function arguments ... + * call.c (build_cxx_call): ... here. + 2008-07-02 Jason Merrill <jason@redhat.com> * Make-lang.in (cp/typeck2.o): Add $(REAL_H) dependency. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index d41465d..368d95a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5418,6 +5418,13 @@ build_cxx_call (tree fn, int nargs, tree *argarray) && cfun) cp_function_chain->can_throw = 1; + /* Check that arguments to builtin functions match the expectations. */ + if (fndecl + && DECL_BUILT_IN (fndecl) + && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL + && !check_builtin_function_arguments (fndecl, nargs, argarray)) + return error_mark_node; + /* Some built-in function calls will be evaluated at compile-time in fold (). */ fn = fold_if_not_in_template (fn); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 14cbd9d..409f340 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2887,13 +2887,6 @@ cp_build_function_call (tree function, tree params, tsubst_flags_t complain) if (nargs < 0) return error_mark_node; - /* Check that arguments to builtin functions match the expectations. */ - if (fndecl - && DECL_BUILT_IN (fndecl) - && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL - && !check_builtin_function_arguments (fndecl, nargs, argarray)) - return error_mark_node; - /* Check for errors in format strings and inappropriately null parameters. */ check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1cfcad4..3feefc8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-03 Richard Guenther <rguenther@suse.de> + + PR c++/36128 + * g++.dg/other/builtin1.C: New testcase. + 2008-07-02 Joseph Myers <joseph@codesourcery.com> * g++.dg/compat/struct-layout-1.exp: Compile generator on build diff --git a/gcc/testsuite/g++.dg/other/builtin1.C b/gcc/testsuite/g++.dg/other/builtin1.C new file mode 100644 index 0000000..8866581 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/builtin1.C @@ -0,0 +1,6 @@ +/* { dg-do compile } */ + +void foo() +{ + __builtin_isless (foo, 0); /* { dg-error "non-floating-point arguments" } */ +} |