This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/40528] Add a new ifunc attribute



------- 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.lu@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.lu@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.lu@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]