------- Comment #12 from hjl at gcc dot gnu dot org 2009-06-28 15:14 ------- Subject: Bug 40528
Author: hjl Date: Sun Jun 28 15:14:09 2009 New Revision: 149026 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=149026 Log: gcc/ 2009-06-28 H.J. Lu <hongjiu...@intel.com> PR c/40528 * c-common.c (handle_ifunc_attribute): New. (c_common_attribute_table): Add "ifunc". * c-decl.c (merge_decls): Only allow IFUNC attribute on definition. Merge the IFUNC information. (start_function): Use function_return_type to get function return type. (store_parm_decls_newstyle): Don't warn omitted parameter name on IFUNC function. (finish_function): Issue an error if control reaches end of IFUNC function. (c_write_global_declarations_1): Add an argument to indicate global scope. Issue an error for undefined IFUNC function. (c_write_global_declarations): Updated. * c-typeck.c (c_finish_return): Use function_return_type to get function return type. * gimplify.c (gimplify_return_expr): Likewise. * stmt.c (expand_return): Likewise. * cgraphunit.c (cgraph_finalize_function): Don't allow parameter usage in ifunc function. (process_function_and_variable_attributes): Check ifunc attribute. * tree-cfg.c (verify_gimple_return): Use function_return_type to get function return type. (execute_warn_function_return): Issue an error if control reaches end of ifunc function. * tree.h (tree_decl_with_vis): Add ifunc_flag. (DECL_IS_IFUNC): New. * varasm.c (default_binds_local_p_1): Return false for IFUNC function. * config/elfos.h (ASM_DECLARE_FUNCTION_NAME): Output "gnu_indirect_function" instead of "function" for IFUNC function. * doc/extend.texi: Document ifunc attribute. gcc/cp/ 2009-06-28 H.J. Lu <hongjiu...@intel.com> PR c/40528 * typeck.c (cp_build_unary_op): Take the address of non-static member function for IFUNC member function. (check_return_expr): Use function_return_type to get function return type. * decl.c (check_function_type): Change return type to bool. Return true if the function type is changed to void. (wrapup_globals_for_namespace): Check undefined IFUNC symbols. (duplicate_decls): Only allow IFUNC attribute on definition. Merge the IFUNC information. (start_preparsed_function): Use function_return_type to build the return declaration for the function if its type isn't changed to void. (finish_function): Use function_return_type to get function return type. Issue an error if control reaches end of IFUNC function. gcc/testsuite/ 2009-06-28 H.J. Lu <hongjiu...@intel.com> PR c/40528 * g++.dg/torture/ifunc-1.C: New. * g++.dg/torture/ifunc-2.C: Likewise. * g++.dg/torture/ifunc-3.C: Likewise. * g++.dg/torture/ifunc-4.C: Likewise. * g++.dg/torture/ifunc-5.C: Likewise. * g++.dg/torture/ifunc-6.C: Likewise. * g++.dg/torture/ifunc-7.C: Likewise. * g++.dg/torture/ifunc-8.C: Likewise. * g++.dg/torture/ifunc-9.C: Likewise. * g++.dg/torture/ifunc-10.C: Likewise. * g++.dg/torture/ifunc-11.C: Likewise. * g++.dg/torture/ifunc-12.C: Likewise. * g++.dg/torture/ifunc-13.C: Likewise. * g++.dg/torture/ifunc-14.C: Likewise. * g++.dg/torture/ifunc-15.C: Likewise. * g++.dg/torture/ifunc-16.C: Likewise. * g++.dg/torture/ifunc-17.C: Likewise. * g++.dg/torture/ifunc-18.C: Likewise. * g++.dg/torture/ifunc-19.C: Likewise. * g++.dg/torture/ifunc-20.C: Likewise. * gcc.dg/torture/ifunc-1.c: Likewise. * gcc.dg/torture/ifunc-2.c: Likewise. * gcc.dg/torture/ifunc-3.c: Likewise. * gcc.dg/torture/ifunc-4.c: Likewise. * gcc.dg/torture/ifunc-5.c: Likewise. * gcc.dg/torture/ifunc-6.c: Likewise. * gcc.dg/torture/ifunc-7.c: Likewise. * gcc.dg/torture/ifunc-8.c: Likewise. * gcc.dg/torture/ifunc-9.c: Likewise. * gcc.dg/torture/ifunc-10.c: Likewise. * gcc.dg/torture/ifunc-11.c: Likewise. * gcc.dg/torture/ifunc-12.c: Likewise. * gcc.dg/torture/ifunc-13.c: Likewise. * gcc.dg/torture/ifunc-14.c: Likewise. * gcc.dg/torture/ifunc-15.c: Likewise. * gcc.dg/torture/ifunc-16.c: Likewise. * gcc.dg/torture/ifunc-17.c: Likewise. * gcc.dg/torture/ifunc-18.c: Likewise. Added: branches/ifunc/gcc/ChangeLog.ifunc branches/ifunc/gcc/cp/ChangeLog.ifunc branches/ifunc/gcc/testsuite/ChangeLog.ifunc branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-1.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-10.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-11.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-12.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-13.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-14.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-15.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-16.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-17.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-18.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-19.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-2.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-20.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-3.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-4.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-5.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-6.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-7.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-8.C branches/ifunc/gcc/testsuite/g++.dg/torture/ifunc-9.C branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-1.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-10.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-11.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-12.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-13.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-14.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-15.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-16.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-17.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-18.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-2.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-3.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-4.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-5.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-6.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-7.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-8.c branches/ifunc/gcc/testsuite/gcc.dg/torture/ifunc-9.c Modified: branches/ifunc/gcc/c-common.c branches/ifunc/gcc/c-decl.c branches/ifunc/gcc/c-typeck.c branches/ifunc/gcc/cgraphunit.c branches/ifunc/gcc/config/elfos.h branches/ifunc/gcc/cp/decl.c branches/ifunc/gcc/cp/typeck.c branches/ifunc/gcc/doc/extend.texi branches/ifunc/gcc/gimplify.c branches/ifunc/gcc/stmt.c branches/ifunc/gcc/tree-cfg.c branches/ifunc/gcc/tree.h branches/ifunc/gcc/varasm.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40528