diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6475b43fc1b..5ef7e2e1005 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2008-07-03 Richard Guenther + + 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 * Make-lang.in (cp/typeck2.o): Add $(REAL_H) dependency. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index d41465db638..368d95a677f 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 14cbd9d8dd2..409f34068d4 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 1cfcad45c05..3feefc8985a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-03 Richard Guenther + + PR c++/36128 + * g++.dg/other/builtin1.C: New testcase. + 2008-07-02 Joseph Myers * 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 00000000000..88665819987 --- /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" } */ +}