- 06 Nov, 2014 22 commits
-
-
This patch makes cpplib track the original spellings of extended identifiers, as well as the canonical UTF-8 version, in order to follow standard semantics properly without needing a convoluted and undocumented canonicalization in translation phase 1 (see bug 9449 comments 39-46 regarding such a canonicalization). The spelling is tracked in cpp_identifier and cpp_macro_arg without making cpp_token any larger. The original spelling is used for checks of duplicate macro definitions, stringizing (see the C++ tests added; this case is only an issue for C++ not C because C makes it implementation-defined whether a \ is inserted before the \ of a UCN in a string or character constant when stringizing, while C++ does not), pasting (relevant when the result is then stringized for C++) and when macro definitions are output as text (e.g. for -d options). Once a macro has been defined, only the original spelling of the argument names needs keeping in the argument list. While it is being defined, however, both spellings are needed: the original one for subsequent saving for checks of duplicate macro definitions, and the canonical one which is the node marked specially to generate macro argument tokens rather than normal identifier tokens. The buffer that is used to save the original values of the identifier tokens is changed so that it stores both those original values and a pointer to the canonical hash nodes, so that those canonical nodes can be found when their values need restoring after the macro definition has been parsed. I believe this covers the known standards issues in extended identifiers support (the remaining unimplemented C99 areas in GCC all being floating-point-related), except for C++ translation of extended characters to UCNs in phase 1 (which I have no plans to work on). There are however probably issues left with handling of extended identifiers in other places, as listed in <https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00337.html> (those issues are generally the sort of thing that could be addressed as bugs outside development stage 1). (The bulk of the potential issues Zack was concerned about in 2003-5, that resulted in extended identifiers being disabled in the absence of -fextended-identifiers, were effectively eliminated by the audit and fixes I did in 2009, however; that todo list reflects what was left over after that audit.) Bootstrapped with no regressions on x86_64-unknown-linux-gnu. libcpp: * include/cpp-id-data.h (struct cpp_macro): Update comment regarding parameters. * include/cpplib.h (struct cpp_macro_arg, struct cpp_identifier): Add spelling fields. (struct cpp_token): Update comment on macro_arg. * internal.h (_cpp_save_parameter): Add extra argument. (_cpp_spell_ident_ucns): New declaration. * lex.c (lex_identifier): Add SPELLING argument. Set *SPELLING to original spelling of identifier. (_cpp_lex_direct): Update calls to lex_identifier. (_cpp_spell_ident_ucns): New function, factored out of cpp_spell_token. (cpp_spell_token): Adjust FORSTRING argument semantics to return original spelling of identifiers. Use _cpp_spell_ident_ucns in !FORSTRING case. (_cpp_equiv_tokens): Check spellings of identifiers and macro arguments are identical. * macro.c (macro_arg_saved_data): New structure. (paste_tokens): Use original spellings of identifiers from cpp_spell_token. (_cpp_save_parameter): Add argument SPELLING. Save both canonical node and its value. (parse_params): Update calls to _cpp_save_parameter. (lex_expansion_token): Save spelling of macro argument tokens. (_cpp_create_definition): Extract canonical node from saved data. (cpp_macro_definition): Use UCNs in spelling of macro name. Use original spellings of macro argument tokens and identifiers. * traditional.c (scan_parameters): Update call to _cpp_save_parameter. gcc: * doc/invoke.texi (-std=c99, -std=c11): Don't refer to corner cases of extended identifiers. gcc/testsuite: * g++.dg/cpp/ucnid-2.C, g++.dg/cpp/ucnid-3.C, gcc.dg/cpp/ucnid-11.c, gcc.dg/cpp/ucnid-12.c, gcc.dg/cpp/ucnid-13.c, gcc.dg/cpp/ucnid-14.c, gcc.dg/cpp/ucnid-15.c: New tests. From-SVN: r217202
Joseph Myers committed -
From-SVN: r217201
Eric Botcazou committed -
* config/m32c/cond.md (movqicc_<code>_<mode>): Remove mode of conditional. (movhicc_<code>_<mode>): Likewise. * config/m32c/m32c.c (encode_pattern_1): Specialise PSImode subregs. (m32c_eh_return_data_regno): Change to using memregs to avoid tying up all the compute regs. (m32c_legitimate_address_p) Subregs are not valid addresses. From-SVN: r217200
DJ Delorie committed -
* target.def (call_args, end_call_args): New hooks. * hooks.c (hook_void_rtx_tree): New empty function. * hooks.h (hook_void_rtx_tree): Declare. * doc/tm.texi.in (TARGET_CALL_ARGS, TARGET_END_CALL_ARGS): Add. * doc/tm.texi: Regenerate. * calls.c (expand_call): Slightly rearrange the code. Use the two new hooks. (expand_library_call_value_1): Use the two new hooks. From-SVN: r217199
Bernd Schmidt committed -
* expr.c (use_reg_mode): Just return for pseudo registers. From-SVN: r217198
Bernd Schmidt committed -
* combine.c (try_combine): Don't allow a call as one of the source insns. From-SVN: r217197
Bernd Schmidt committed -
* target.def (decl_end): New hook. * varasm.c (assemble_variable_contents, assemble_constant_contents): Use it. * doc/tm.texi.in (TARGET_ASM_DECL_END): Add. * doc/tm.texi: Regenerate. From-SVN: r217196
Bernd Schmidt committed -
2014-11-05 Dominik Vogt <vogt@linux.vnet.ibm.com> * libgo/runtime/runtime.c (runtime_cputicks): s390: use stckf unconditionally From-SVN: r217195
Dominik Vogt committed -
2014-11-06 Dominik Vogt <vogt@linux.vnet.ibm.com> * libgo/mksysinfo.sh: Tolerate missing structures. From-SVN: r217194
Dominik Vogt committed -
2014-11-06 Renlin Li <renlin.li@arm.com> * config/aarch64/aarch64.c (aarch64_architecture_version): New. (processor): New architecture_version field. (aarch64_override_options): Initialize aarch64_architecture_version. * config/aarch64/aarch64.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_ARCH, __ARM_ARCH_PROFILE, aarch64_arch_name macro. From-SVN: r217192
Renlin Li committed -
gcc/ * params.def (sra-max-scalarization-size-Ospeed): New. (sra-max-scalarization-size-Osize): Likewise. * doc/invoke.texi (sra-max-scalarization-size-Ospeed): Document. (sra-max-scalarization-size-Osize): Likewise. * toplev.c (process_options): Set default values for new parameters. * tree-sra.c (analyze_all_variable_accesses): Use new parameters. * targhooks.c (get_move_ratio): Remove static designator. * target.h (get_move_ratio): Declare. From-SVN: r217191
James Greenhalgh committed -
* sanopt.c (sanopt_optimize_walker): Limit removal of the checks. Remove vector limit. testsuite/ * c-c++-common/ubsan/align-2.c: Add dg-output. * c-c++-common/ubsan/align-4.c: Likewise. * c-c++-common/ubsan/align-6.c: New test. * c-c++-common/ubsan/align-7.c: New test. * c-c++-common/ubsan/align-8.c: New test. * g++.dg/ubsan/null-1.C: Add dg-output. * g++.dg/ubsan/null-2.C: Likewise. * g++.dg/ubsan/null-3.C: New test. * g++.dg/ubsan/null-4.C: New test. * g++.dg/ubsan/null-5.C: New test. From-SVN: r217189
Marek Polacek committed -
gcc/testsuite * gcc.target/i386/avx512vl-vandnpd-2.c: Fix dg-require-effective-target check. * gcc.target/i386/avx512vl-vandnps-2.c: Ditto. * gcc.target/i386/avx512vl-vandpd-2.c: Ditto. * gcc.target/i386/avx512vl-vandps-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcastf32x2-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcastf32x4-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcastf64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcasti32x2-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcasti32x4-2.c: Ditto. * gcc.target/i386/avx512vl-vbroadcasti64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtpd2qq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtpd2uqq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtps2qq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtps2uqq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtqq2pd-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtqq2ps-2.c: Ditto. * gcc.target/i386/avx512vl-vcvttpd2qq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvttpd2uqq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvttps2qq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvttps2uqq-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtuqq2pd-2.c: Ditto. * gcc.target/i386/avx512vl-vcvtuqq2ps-2.c: Ditto. * gcc.target/i386/avx512vl-vdbpsadbw-2.c: Ditto. * gcc.target/i386/avx512vl-vextractf64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vextracti64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vfpclasspd-2.c: Ditto. * gcc.target/i386/avx512vl-vfpclassps-2.c: Ditto. * gcc.target/i386/avx512vl-vinsertf64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vinserti64x2-2.c: Ditto. * gcc.target/i386/avx512vl-vmovdqu16-2.c: Ditto. * gcc.target/i386/avx512vl-vmovdqu8-2.c: Ditto. * gcc.target/i386/avx512vl-vorpd-2.c: Ditto. * gcc.target/i386/avx512vl-vorps-2.c: Ditto. * gcc.target/i386/avx512vl-vpabsb-2.c: Ditto. * gcc.target/i386/avx512vl-vpabsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpackssdw-2.c: Ditto. * gcc.target/i386/avx512vl-vpacksswb-2.c: Ditto. * gcc.target/i386/avx512vl-vpackusdw-2.c: Ditto. * gcc.target/i386/avx512vl-vpackuswb-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddb-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddsb-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddusb-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddusw-2.c: Ditto. * gcc.target/i386/avx512vl-vpaddw-2.c: Ditto. * gcc.target/i386/avx512vl-vpalignr-2.c: Ditto. * gcc.target/i386/avx512vl-vpavgb-2.c: Ditto. * gcc.target/i386/avx512vl-vpavgw-2.c: Ditto. * gcc.target/i386/avx512vl-vpblendmb-2.c: Ditto. * gcc.target/i386/avx512vl-vpblendmw-2.c: Ditto. * gcc.target/i386/avx512vl-vpbroadcastb-2.c: Ditto. * gcc.target/i386/avx512vl-vpbroadcastw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpb-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpeqb-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpequb-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpequw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpeqw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpgtb-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpgtub-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpgtuw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpgtw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpub-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpuw-2.c: Ditto. * gcc.target/i386/avx512vl-vpcmpw-2.c: Ditto. * gcc.target/i386/avx512vl-vpermi2w-2.c: Ditto. * gcc.target/i386/avx512vl-vpermt2w-2.c: Ditto. * gcc.target/i386/avx512vl-vpermw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaddubsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaddwd-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaxsb-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaxsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaxub-2.c: Ditto. * gcc.target/i386/avx512vl-vpmaxuw-2.c: Ditto. * gcc.target/i386/avx512vl-vpminsb-2.c: Ditto. * gcc.target/i386/avx512vl-vpminsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpminub-2.c: Ditto. * gcc.target/i386/avx512vl-vpminuw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovb2m-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovd2m-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovm2b-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovm2d-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovm2q-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovm2w-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovq2m-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovswb-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovsxbw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovuswb-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovw2m-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovwb-2.c: Ditto. * gcc.target/i386/avx512vl-vpmovzxbw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmulhrsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmulhuw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmulhw-2.c: Ditto. * gcc.target/i386/avx512vl-vpmullq-2.c: Ditto. * gcc.target/i386/avx512vl-vpmullw-2.c: Ditto. * gcc.target/i386/avx512vl-vpshufb-2.c: Ditto. * gcc.target/i386/avx512vl-vpshufhw-2.c: Ditto. * gcc.target/i386/avx512vl-vpshuflw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsllvw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsllw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsllwi-2.c: Ditto. * gcc.target/i386/avx512vl-vpsravw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsraw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsrawi-2.c: Ditto. * gcc.target/i386/avx512vl-vpsrlvw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsrlw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsrlwi-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubb-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubsb-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubsw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubusb-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubusw-2.c: Ditto. * gcc.target/i386/avx512vl-vpsubw-2.c: Ditto. * gcc.target/i386/avx512vl-vptestmb-2.c: Ditto. * gcc.target/i386/avx512vl-vptestmw-2.c: Ditto. * gcc.target/i386/avx512vl-vptestnmb-2.c: Ditto. * gcc.target/i386/avx512vl-vptestnmw-2.c: Ditto. * gcc.target/i386/avx512vl-vpunpckhbw-2.c: Ditto. * gcc.target/i386/avx512vl-vpunpckhwd-2.c: Ditto. * gcc.target/i386/avx512vl-vpunpcklbw-2.c: Ditto. * gcc.target/i386/avx512vl-vpunpcklwd-2.c: Ditto. * gcc.target/i386/avx512vl-vrangepd-2.c: Ditto. * gcc.target/i386/avx512vl-vrangeps-2.c: Ditto. * gcc.target/i386/avx512vl-vreducepd-2.c: Ditto. * gcc.target/i386/avx512vl-vreduceps-2.c: Ditto. * gcc.target/i386/avx512vl-vxorpd-2.c: Ditto. * gcc.target/i386/avx512vl-vxorps-2.c: Ditto. From-SVN: r217188
Ilya Tocar committed -
From-SVN: r217186
Hale Wang committed -
From-SVN: r217185
Hale Wang committed -
gcc/testsuite/ * lib/mpx-dg.exp: New. * gcc.target/i386/i386.exp: Load mpx-dg.exp. * gcc.target/i386/chkp-builtins-1.c: Require mpx target. * gcc.target/i386/chkp-builtins-2.c: Likewise. * gcc.target/i386/chkp-builtins-3.c: Likewise. * gcc.target/i386/chkp-builtins-4.c: Likewise. * gcc.target/i386/chkp-const-check-1.c: Likewise. * gcc.target/i386/chkp-const-check-2.c: Likewise. * gcc.target/i386/chkp-lifetime-1.c: Likewise. * gcc.target/i386/chkp-remove-bndint-1.c: Likewise. * gcc.target/i386/chkp-remove-bndint-2.c: Likewise. From-SVN: r217180
Ilya Enkovich committed -
2014-11-06 Richard Biener <rguenther@suse.de> * match.pd: Implement bitwise binary and unary simplifications from tree-ssa-forwprop.c. * fold-const.c (fold_unary_loc): Remove them here. (fold_binary_loc): Likewise. * tree-ssa-forwprop.c (simplify_not_neg_expr): Remove. (truth_valued_ssa_name): Likewise. (lookup_logical_inverted_value): Likewise. (simplify_bitwise_binary_1): Likewise. (hoist_conversion_for_bitop_p): Likewise. (simplify_bitwise_binary_boolean): Likewise. (simplify_bitwise_binary): Likewise. (pass_forwprop::execute): Remove calls to simplify_not_neg_expr and simplify_bitwise_binary. * genmatch.c (dt_node::append_true_op): Use safe_as_a for parent. (decision_tree::insert): Also insert non-expressions. * gcc.dg/tree-ssa/forwprop-28.c: Adjust scanning for the desired transform. From-SVN: r217178
Richard Biener committed -
2014-11-06 Hale Wang <Hale.Wang@arm.com> * config/arm/arm-cores.def: Add support for -mcpu=cortex-m0.small-multiply,cortex-m0plus.small-multiply, cortex-m1.small-multiply. * config/arm/arm-tables.opt: Regenerate. * config/arm/arm-tune.md: Regenerate. * config/arm/arm.c: Update the rtx-costs for MUL. * config/arm/bpabi.h: Handle -mcpu=cortex-m0.small-multiply,cortex-m0plus.small-multiply, cortex-m1.small-multiply. * doc/invoke.texi: Document -mcpu=cortex-m0.small-multiply,cortex-m0plus.small-multiply, cortex-m1.small-multiply. * testsuite/gcc.target/arm/small-multiply-m0-1.c: New test case. * testsuite/gcc.target/arm/small-multiply-m0-2.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m0-3.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m0plus-1.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m0plus-2.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m0plus-3.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m1-1.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m1-2.c: Likewise. * testsuite/gcc.target/arm/small-multiply-m1-3.c: Likewise. From-SVN: r217175
Hale Wang committed -
From-SVN: r217174
Hale Wang committed -
2014-10-11 Hale Wang <Hale.Wang@arm.com> * config/arm/arm.c: Add cortex-m7 tune. * config/arm/arm-cores.def: Use cortex-m7 tune. From-SVN: r217173
Hale Wang committed -
2014-11-06 Prachi Godbole <prachi.godbole@imgtec.com> * MAINTAINERS (Write After Approval): Add myself. From-SVN: r217172
Prachi Godbole committed -
From-SVN: r217170
GCC Administrator committed
-
- 05 Nov, 2014 18 commits
-
-
gcc/testsuite/ * gcc.target/mips/asm-1.c (bar): Add prototype. * gcc.target/mips/call-1.c (f, h): Add return type. * gcc.target/mips/call-5.c (f, h): Likewise. * gcc.target/mips/call-6.c (f, h): Likewise. * gcc.target/mips/call-3.c (f): Likewise. * gcc.target/mips/call-2.c (g): Add prototype. (f): Add return type. * gcc.target/mips/call-4.c: Likewise. * gcc.target/mips/code-readable-1.c (foo): Add type for x. * gcc.target/mips/code-readable-2.c (foo): Likewise. * gcc.target/mips/code-readable-3.c (foo): Likewise. * gcc.target/mips/code-readable-4.c (foo): Likewise. * gcc.target/mips/const-anchor-1.c (g): Add prototype. * gcc.target/mips/const-anchor-2.c (g): Likewise. * gcc.target/mips/const-anchor-3.c (g): Likewise. * gcc.target/mips/const-anchor-4.c (g): Likewise. * gcc.target/mips/interrupt_handler.c (t): Likewise. * gcc.target/mips/mips-nonpic/main-1.c (main): Add return type. * gcc.target/mips/mips-nonpic/main-2.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-3.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-4.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-5.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-6.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-7.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-8.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-9.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-10.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-11.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-12.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-13.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-14.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-15.c (main): Likewise. * gcc.target/mips/mips-nonpic/main-16.c (main): Likewise. * gcc.target/mips/mips-nonpic/mips-nonpic.h (nonpic_call, nonpic_addr_call): Add prototype. (pic_call, pic_addr_call): Likewise. * gcc.target/mips/mips16e-extends.c (validate): Likewise. * gcc.target/mips/octeon-bbit-3.c (foo): Likewise. * gcc.target/mips/octeon-seq-4.c (h): Likewise. * gcc.target/mips/truncate-3.c (g): Add prototype. (f): Add return type. From-SVN: r217167
Matthew Fortune committed -
gcc/testsuite/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * gcc.misc-tests/output.exp: New test case for identical input and output files. include/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * filenames.h: Add prototype for canonical_filename_eq. gcc/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * diagnostic-core.h: Add prototype for fatal_error. * diagnostic.c (fatal_error): New function fatal_error. * gcc.c (store_arg): Remove have_o_argbuf_index. (process_command): Check if input and output files are the same. * toplev.c (init_asm_output): Check if input and output files are the same. libiberty/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * filename_cmp.c (canonical_filename_eq): New function to check if file names are the same. * functions.texi: Updated with documentation for new function. From-SVN: r217159
Manuel López-Ibáñez committed -
From-SVN: r217157
Eric Botcazou committed -
PR target/63538 * config/i386/i386.c (in_large_data_p): Reject automatic variables. (ix86_encode_section_info): Do not check for non-automatic varibles when setting SYMBOL_FLAG_FAR_ADDR flag. (x86_64_elf_select_section): Do not check ix86_cmodel here. (x86_64_elf_unique_section): Ditto. (x86_elf_aligned_common): Emit tab before .largecomm. testsuite/ChangeLog: PR target/63538 * gcc.target/i386/pr63538.c: New test. From-SVN: r217156
Uros Bizjak committed -
trans.c (Subprogram_Body_to_gnu): For a function with copy-in/copy-out parameters and which returns by invisible... * gcc-interface/trans.c (Subprogram_Body_to_gnu): For a function with copy-in/copy-out parameters and which returns by invisible reference, do not create the variable for the return value; instead, manually generate the indirect copy out statements on exit. (gnat_to_gnu) <N_Simple_Return_Statement>: Adjust accordingly and build a simple indirect assignment for the return value. From-SVN: r217155
Eric Botcazou committed -
2014-11-04 François Dumont <fdumont@gcc.gnu.org> Jonathan Wakely <jwakely@redhat.com> PR libstdc++/63698 * include/bits/stl_tree.h (_Reuse_or_alloc_node): Simplify constructor. Always move to the left node if there is one. * testsuite/23_containers/set/allocator/move_assign.cc (test04): New. Co-Authored-By: Jonathan Wakely <jwakely@redhat.com> From-SVN: r217154
François Dumont committed -
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: For a derived untagged type that renames discriminants, be prepared for a type derived from a private discriminated type when changing the type of the stored discriminants. From-SVN: r217153
Eric Botcazou committed -
trans.c (Handled_Sequence_Of_Statements_to_gnu): Set the SLOC of the node on the call to set_jmpbuf_address_soft emitted on... * gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): Set the SLOC of the node on the call to set_jmpbuf_address_soft emitted on block entry with SJLJ. From-SVN: r217152
Eric Botcazou committed -
utils.c (create_subprog_decl): Move code dealing with conflicting inlining status of nested subprograms to... * gcc-interface/utils.c (create_subprog_decl): Move code dealing with conflicting inlining status of nested subprograms to... * gcc-interface/trans.c (check_inlining_for_nested_subprog): ...here. (Attribute_to_gnu) <Attr_Access>: Call it. (Call_to_gnu): Likewise. (Subprogram_Body_to_gnu): Drop the body if it is an inlined external function that has been marked uninlinable. From-SVN: r217151
Eric Botcazou committed -
gcc/testsuite/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * gcc.misc-tests/output.exp: New test case for identical input and output files. include/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * filenames.h: Add prototype for canonical_filename_eq. gcc/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * diagnostic-core.h: Add prototype for fatal_error. * diagnostic.c (fatal_error): New function fatal_error. * gcc.c (store_arg): Remove have_o_argbuf_index. (process_command): Check if input and output files are the same. * toplev.c (init_asm_output): Check if input and output files are the same. libiberty/ChangeLog: 2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> PR driver/36312 * filename_cmp.c (canonical_filename_eq): New function to check if file names are the same. * functions.texi: Updated with documentation for new function. From-SVN: r217149
Anthony Brandon committed -
As proposed at <https://gcc.gnu.org/ml/gcc/2014-11/msg00014.html>, this patch enables -fextended-identifiers by default for all standard versions including this feature (all C++ versions, C99 and above for C, but not C90 / C94 / gnu89 / preprocessing assembler). It adds a couple of tests for areas where I previously noted testsuite coverage for extended identifiers was lacking, removes -fextended-identifiers from existing tests, adds -g to various such tests to verify that extended identifiers don't break debug info generation and removes the test that was only there to verify that the feature was off by default. The current state of the feature may not correspond exactly to any particular checklist from 2004/5 (see bug 9449) of what was wanted before enabling the feature by default, but I don't think it's any worse than plenty of other features supported by default before every corner case is fully functional, and think problems can readily be fixed incrementally. The following aspects of extended identifiers could still do with more work (and should be straightforward): * C -aux-info (output should use UCNs). * ObjC -gen-decls (output should use UCNs; associated diagnostics from the ObjC front end should use extended characters or UCNs as appropriate to the locale, via using %qE or identifier_to_locale). * Use DW_AT_use_UTF8 in DWARF-3 debug info for compilation units built with extended identifiers enabled (or unconditionally). * cpplib diagnostics (outputting characters or UCNs as appropriate depending on the locale, as done for identifiers in non-cpplib diagnostics). * C++ test for UCN linking with C and extern "C". * Check GDB support / file issues for support if needed. * Actual UTF-8 in identifiers (?). (Be careful about not affecting performance for the normal fast path of lexing identifiers, if possible.) The following may be trickier: * cpplib spelling preservation (required to diagnose macro redefinition with different spellings of the same identifier in the definition or argument names; different spellings of the name of the macro itself are OK, however; also required for correct handling of multiple stringizing in C++); correct output for -d (UCNs), DWARF debug info for macros (UCNs), PCH and PCH tests. (Spelling preservation is the issue that needs fixing to remove references to corner cases in the documentation of -std=c99 and -std=c11 and in c99status.html.) The idea would be to add a second pointer to cpp_identifier that stores the original spelling (whether for extended identifiers only, or for all identifiers); this does not enlarge cpp_token because the resulting larger cpp_identifier structure is no bigger than cpp_string. * C++ translation of extended characters (including $@` and various control characters) to UCNs in phase 1 (note diagnostics thus needed, but not for C++11, for control characters in strings / character constants as those UCNs invalid); a likely implementation approach is to do translation when identifiers / strings / character constants are lexed, together with errors for stray $@` / control characters in program as not being valid UCNs in identifiers ($ only if not accepted in identifiers); note that this translation should not take place inside raw string literals. Bootstrapped with no regressions on x86_64-unknown-linux-gnu. libcpp: PR preprocessor/9449 * init.c (lang_defaults): Enable extended identifiers for C++ and C99-based standards. gcc: PR preprocessor/9449 * doc/cpp.texi (Character sets, Tokenization) (Implementation-defined behavior): Don't refer to UCNs in identifiers requiring -fextended-identifiers. * doc/cppopts.texi (-fextended-identifiers): Document as enabled by default for C99 and later and C++. * doc/invoke.texi (-std=c99, -std=c11): Don't refer to extended identifiers needing -fextended-identifiers. gcc/testsuite: PR preprocessor/9449 * lib/target-supports.exp (check_effective_target_ucn_nocache): Don't use -fextended-identifiers. * c-c++-common/cpp/normalize-3.c, c-c++-common/cpp/ucnid-2011-1.c, g++.dg/cpp/ucn-1.C, g++.dg/cpp/ucnid-1.C, g++.dg/other/ucnid-1.C, gcc.dg/cpp/normalize-1.c, gcc.dg/cpp/normalize-2.c, gcc.dg/cpp/normalize-4.c: Don't use -fextended-identifiers. * gcc.dg/cpp/ucnid-1.c: Don't use -fextended-identifiers. Use -g3. * gcc.dg/cpp/ucnid-10.c, gcc.dg/cpp/ucnid-2.c, gcc.dg/cpp/ucnid-3.c, gcc.dg/cpp/ucnid-4.c, gcc.dg/cpp/ucnid-5.c, gcc.dg/cpp/ucnid-7.c, gcc.dg/cpp/ucnid-9.c, gcc.dg/cpp/warn-normalized-1.c, gcc.dg/cpp/warn-normalized-2.c, gcc.dg/cpp/warn-normalized-3.c: Don't use -fextended-identifiers. * gcc.dg/ucnid-1.c, gcc.dg/ucnid-2.c, gcc.dg/ucnid-3.c, gcc.dg/ucnid-4.c, gcc.dg/ucnid-5.c, gcc.dg/ucnid-6.c: Don't use -fextended-identifiers. Use -g. * gcc.dg/ucnid-7.c, gcc.dg/ucnid-8.c: Don't use -fextended-identifiers. * gcc.dg/ucnid-9.c: Don't use -fextended-identifiers. Use -g. * gcc.dg/ucnid-10.c: Don't use -fextended-identifiers. * gcc.dg/ucnid-11.c, gcc.dg/ucnid-12.c: Don't use -fextended-identifiers. Use -g. * gcc.dg/ucnid-13.c: Don't use -fextended-identifiers. * gcc.dg/cpp/ucnid-8.c: Remove test. * gcc.dg/cpp/ucnid-10.c, gcc.dg/ucnid-14.c: New tests. From-SVN: r217144
Joseph Myers committed -
gcc/ * config/i386/i386.c (expand_vec_perm_pshufb): Try vpermq/vpermd for 512-bit wide modes. (expand_vec_perm_1): Use correct versions of patterns. * config/i386/sse.md (avx512f_vec_dup_<mode>_1): New. (vashr<mode>3<mask_name>): Split V8HImode and V16QImode. From-SVN: r217138
Ilya Tocar committed -
2014-11-05 Christophe Lyon <christophe.lyon@linaro.org> * gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp: Skip tests if target does not support Neon. From-SVN: r217134
Christophe Lyon committed -
[AArch64,ARM] support bswap tests on aarch64_be. Skip them on ARM targets older than v6. 2014-11-05 Christophe Lyon <christophe.lyon@linaro.org> * lib/target-supports.exp (check_effective_target_bswap): Update conditions for AArch64 and ARM targets. From-SVN: r217133
Christophe Lyon committed -
* gcc.dg/torture/pr59166.c: XFAIL on AIX. * g++.dg/ext/visitibility/anon1.C: XFAIL on AIX. * g++.dg/opt/pr60002.C: XFAIL on AIX. * g++.dg/torture/pr63419.C: Ignore non-standard ABI warning. * g++.dg/ipa/ipa-icf-5.C: Require visibility support. From-SVN: r217129
David Edelsohn committed -
gcc/ 2014-11-05 Ilya Enkovich <ilya.enkovich@intel.com> * ipa-chkp.c: New. * ipa-chkp.h: New. * tree-chkp.c: New. * tree-chkp.h: New. * tree-chkp-opt.c: New. * rtl-chkp.c: New. * rtl-chkp.h: New. * Makefile.in (OBJS): Add ipa-chkp.o, rtl-chkp.o, tree-chkp.o tree-chkp-opt.o. (GTFILES): Add tree-chkp.c. * mode-classes.def (MODE_POINTER_BOUNDS): New. * tree.def (POINTER_BOUNDS_TYPE): New. * genmodes.c (complete_mode): Support MODE_POINTER_BOUNDS. (POINTER_BOUNDS_MODE): New. (make_pointer_bounds_mode): New. * machmode.h (POINTER_BOUNDS_MODE_P): New. * stor-layout.c (int_mode_for_mode): Support MODE_POINTER_BOUNDS. (layout_type): Support POINTER_BOUNDS_TYPE. * tree-pretty-print.c (dump_generic_node): Support POINTER_BOUNDS_TYPE. * tree-core.h (tree_index): Add TI_POINTER_BOUNDS_TYPE. * tree.c (build_int_cst_wide): Support POINTER_BOUNDS_TYPE. (type_contains_placeholder_1): Likewise. (build_common_tree_nodes): Initialize pointer_bounds_type_node. * tree.h (POINTER_BOUNDS_TYPE_P): New. (pointer_bounds_type_node): New. (POINTER_BOUNDS_P): New. (BOUNDED_TYPE_P): New. (BOUNDED_P): New. (CALL_WITH_BOUNDS_P): New. * gimple.h (gf_mask): Add GF_CALL_WITH_BOUNDS. (gimple_call_with_bounds_p): New. (gimple_call_set_with_bounds): New. (gimple_return_retbnd): New. (gimple_return_set_retbnd): New * gimple.c (gimple_build_return): Increase number of ops for return statement. (gimple_build_call_from_tree): Propagate CALL_WITH_BOUNDS_P flag. * gimple-pretty-print.c (dump_gimple_return): Print second op. * rtl.h (CALL_EXPR_WITH_BOUNDS_P): New. * gimplify.c (gimplify_init_constructor): Avoid infinite loop during gimplification of bounds initializer. * calls.c: Include tree-chkp.h, rtl-chkp.h, bitmap.h. (special_function_p): Use original decl name when analyzing instrumentation clone. (arg_data): Add fields special_slot, pointer_arg and pointer_offset. (store_bounds): New. (emit_call_1): Propagate instrumentation flag for CALL. (initialize_argument_information): Compute pointer_arg, pointer_offset and special_slot for pointer bounds arguments. (finalize_must_preallocate): Preallocate when storing bounds in bounds table. (compute_argument_addresses): Skip pointer bounds. (expand_call): Store bounds into tables separately. Return result joined with resulting bounds. * cfgexpand.c: Include tree-chkp.h, rtl-chkp.h. (expand_call_stmt): Propagate bounds flag for CALL_EXPR. (expand_return): Add returned bounds arg. Handle returned bounds. (expand_gimple_stmt_1): Adjust to new expand_return signature. (gimple_expand_cfg): Reset rtx bounds map. * expr.c: Include tree-chkp.h, rtl-chkp.h. (expand_assignment): Handle returned bounds. (store_expr_with_bounds): New. Replaces store_expr with new bounds target argument. Handle bounds returned by calls. (store_expr): Now wraps store_expr_with_bounds. * expr.h (store_expr_with_bounds): New. * function.c: Include tree-chkp.h, rtl-chkp.h. (bounds_parm_data): New. (use_register_for_decl): Do not registerize decls used for bounds stores and loads. (assign_parms_augmented_arg_list): Add bounds of the result structure pointer as the second argument. (assign_parm_find_entry_rtl): Mark bounds are never passed on the stack. (assign_parm_is_stack_parm): Likewise. (assign_parm_load_bounds): New. (assign_bounds): New. (assign_parms): Load bounds and determine a location for returned bounds. (diddle_return_value_1): New. (diddle_return_value): Handle returned bounds. * function.h (rtl_data): Add field for returned bounds. * varasm.c: Include tree-chkp.h. (output_constant): Support POINTER_BOUNDS_TYPE. (output_constant_pool_2): Support MODE_POINTER_BOUNDS. (ultimate_transparent_alias_target): Move up. (make_decl_rtl): For instrumented function use name of the original decl. (assemble_start_function): Mark function as global in case it is instrumentation clone of the global function. (do_assemble_alias): Follow transparent alias chain for identifier. Check if original alias is public. (maybe_assemble_visibility): Use visibility of the original function for instrumented version. (default_unique_section): Likewise. * emit-rtl.c (immed_double_const): Support MODE_POINTER_BOUNDS. (init_emit_once): Build pointer bounds zero constants. * explow.c (trunc_int_for_mode): Support MODE_POINTER_BOUNDS. * target.def (builtin_chkp_function): New. (chkp_bound_type): New. (chkp_bound_mode): New. (chkp_make_bounds_constant): New. (chkp_initialize_bounds): New. (load_bounds_for_arg): New. (store_bounds_for_arg): New. (load_returned_bounds): New. (store_returned_bounds): New. (chkp_function_value_bounds): New. (setup_incoming_vararg_bounds): New. (function_arg): Update hook description with new possible return value CONST_INT. * targhooks.h (default_load_bounds_for_arg): New. (default_store_bounds_for_arg): New. (default_load_returned_bounds): New. (default_store_returned_bounds): New. (default_chkp_bound_type): New. (default_chkp_bound_mode): New. (default_builtin_chkp_function): New. (default_chkp_function_value_bounds): New. (default_chkp_make_bounds_constant): New. (default_chkp_initialize_bounds): New. (default_setup_incoming_vararg_bounds): New. * targhooks.c (default_load_bounds_for_arg): New. (default_store_bounds_for_arg): New. (default_load_returned_bounds): New. (default_store_returned_bounds): New. (default_chkp_bound_type): New. (default_chkp_bound_mode); New. (default_builtin_chkp_function): New. (default_chkp_function_value_bounds): New. (default_chkp_make_bounds_constant): New. (default_chkp_initialize_bounds): New. (default_setup_incoming_vararg_bounds): New. * builtin-types.def (BT_BND): New. (BT_FN_PTR_CONST_PTR): New. (BT_FN_CONST_PTR_CONST_PTR): New. (BT_FN_BND_CONST_PTR): New. (BT_FN_CONST_PTR_BND): New. (BT_FN_PTR_CONST_PTR_SIZE): New. (BT_FN_PTR_CONST_PTR_CONST_PTR): New. (BT_FN_VOID_PTRPTR_CONST_PTR): New. (BT_FN_VOID_CONST_PTR_SIZE): New. (BT_FN_VOID_PTR_BND): New. (BT_FN_CONST_PTR_CONST_PTR_CONST_PTR): New. (BT_FN_BND_CONST_PTR_SIZE): New. (BT_FN_PTR_CONST_PTR_CONST_PTR_SIZE): New. (BT_FN_VOID_CONST_PTR_BND_CONST_PTR): New. * chkp-builtins.def: New. * builtins.def: include chkp-builtins.def. (DEF_CHKP_BUILTIN): New. * builtins.c: Include tree-chkp.h and rtl-chkp.h. (expand_builtin): Support BUILT_IN_CHKP_INIT_PTR_BOUNDS, BUILT_IN_CHKP_NULL_PTR_BOUNDS, BUILT_IN_CHKP_COPY_PTR_BOUNDS, BUILT_IN_CHKP_CHECK_PTR_LBOUNDS, BUILT_IN_CHKP_CHECK_PTR_UBOUNDS, BUILT_IN_CHKP_CHECK_PTR_BOUNDS, BUILT_IN_CHKP_SET_PTR_BOUNDS, BUILT_IN_CHKP_NARROW_PTR_BOUNDS, BUILT_IN_CHKP_STORE_PTR_BOUNDS, BUILT_IN_CHKP_GET_PTR_LBOUND, BUILT_IN_CHKP_GET_PTR_UBOUND, BUILT_IN_CHKP_BNDMK, BUILT_IN_CHKP_BNDSTX, BUILT_IN_CHKP_BNDCL, BUILT_IN_CHKP_BNDCU, BUILT_IN_CHKP_BNDLDX, BUILT_IN_CHKP_BNDRET, BUILT_IN_CHKP_INTERSECT, BUILT_IN_CHKP_NARROW, BUILT_IN_CHKP_EXTRACT_LOWER, BUILT_IN_CHKP_EXTRACT_UPPER. (std_expand_builtin_va_start): Init bounds for va_list. * cppbuiltin.c (define_builtin_macros_for_compilation_flags): Add __CHKP__ macro when Pointer Bounds Checker is on. * params.def (PARAM_CHKP_MAX_CTOR_SIZE): New. * passes.def (pass_ipa_chkp_versioning): New. (pass_early_local_passes): Renamed to pass_build_ssa_passes. (pass_fixup_cfg): Moved to pass_chkp_instrumentation_passes. (pass_chkp_instrumentation_passes): New. (pass_ipa_chkp_produce_thunks): New. (pass_local_optimization_passes): New. (pass_chkp_opt): New. * tree-pass.h (make_pass_ipa_chkp_versioning): New. (make_pass_ipa_chkp_produce_thunks): New. (make_pass_chkp): New. (make_pass_chkp_opt): New. (make_pass_early_local_passes): Renamed to ... (make_pass_build_ssa_passes): This. (make_pass_chkp_instrumentation_passes): New. (make_pass_local_optimization_passes): New. * passes.c (pass_manager::execute_early_local_passes): Execute early passes in three steps. (execute_all_early_local_passes): Renamed to ... (execute_build_ssa_passes): This. (pass_data_early_local_passes): Renamed to ... (pass_data_build_ssa_passes): This. (pass_early_local_passes): Renamed to ... (pass_build_ssa_passes): This. (pass_data_chkp_instrumentation_passes): New. (pass_chkp_instrumentation_passes): New. (pass_data_local_optimization_passes): New. (pass_local_optimization_passes): New. (make_pass_early_local_passes): Renamed to ... (make_pass_build_ssa_passes): This. (make_pass_chkp_instrumentation_passes): New. (make_pass_local_optimization_passes): New. * c-family/c.opt (fcheck-pointer-bounds): New. (fchkp-check-incomplete-type): New. (fchkp-zero-input-bounds-for-main): New. (fchkp-first-field-has-own-bounds): New. (fchkp-narrow-bounds): New. (fchkp-narrow-to-innermost-array): New. (fchkp-optimize): New. (fchkp-use-fast-string-functions): New. (fchkp-use-nochk-string-functions): New. (fchkp-use-static-bounds): New. (fchkp-use-static-const-bounds): New. (fchkp-treat-zero-dynamic-size-as-infinite): New. (fchkp-check-read): New. (fchkp-check-write): New. (fchkp-store-bounds): New. (fchkp-instrument-calls): New. (fchkp-instrument-marked-only): New. (Wchkp): New. * c-family/c-common.c (handle_bnd_variable_size_attribute): New. (handle_bnd_legacy): New. (handle_bnd_instrument): New. (c_common_attribute_table): Add bnd_variable_size, bnd_legacy and bnd_instrument. Fix documentation. (c_common_format_attribute_table): Likewsie. * toplev.c: include tree-chkp.h. (process_options): Check Pointer Bounds Checker is supported. (compile_file): Add chkp_finish_file call. * ipa-cp.c (initialize_node_lattices): Use cgraph_local_p to handle instrumentation clones properly. (propagate_constants_accross_call): Do not propagate through instrumentation thunks. * ipa-pure-const.c (propagate_pure_const): Support IPA_REF_CHKP. * ipa-inline.c (early_inliner): Check edge has summary allocated. * ipa-split.c: Include tree-chkp.h. (find_retbnd): New. (split_part_set_ssa_name_p): New. (consider_split): Do not split retbnd and retval producers. (insert_bndret_call_after): new. (split_function): Propagate Pointer Bounds Checker instrumentation marks and handle returned bounds. * tree-ssa-sccvn.h (vn_reference_op_struct): Transform opcode into bit field and add with_bounds field. * tree-ssa-sccvn.c (copy_reference_ops_from_call): Set with_bounds field for instrumented calls. * tree-ssa-pre.c (create_component_ref_by_pieces_1): Restore CALL_WITH_BOUNDS_P flag for calls. * tree-ssa-ccp.c: Include tree-chkp.h. (insert_clobber_before_stack_restore): Handle BUILT_IN_CHKP_BNDRET calls. * tree-ssa-dce.c: Include tree-chkp.h. (propagate_necessity): For free call fed by alloc check bounds are also provided by the same alloc. (eliminate_unnecessary_stmts): Handle BUILT_IN_CHKP_BNDRET used by free calls. * tree-inline.c: Include tree-chkp.h. (declare_return_variable): Add arg holding returned bounds slot. Create and initialize returned bounds var. (remap_gimple_stmt): Handle returned bounds. Return sequence of statements instead of a single statement. (insert_init_stmt): Add declaration. (remap_gimple_seq): Adjust to new remap_gimple_stmt signature. (copy_bb): Adjust to changed return type of remap_gimple_stmt. Properly handle bounds in va_arg_pack and va_arg_pack_len. (expand_call_inline): Handle returned bounds. Add bounds copy for generated mem to mem assignments. * tree-inline.h (copy_body_data): Add fields retbnd and assign_stmts. * value-prof.c: Include tree-chkp.h. (gimple_ic): Support returned bounds. * ipa.c (cgraph_build_static_cdtor_1): Support contructors with "chkp ctor" and "bnd_legacy" attributes. (symtab_remove_unreachable_nodes): Keep initial values for pointer bounds to be used for checks eliminations. (process_references): Handle IPA_REF_CHKP. (walk_polymorphic_call_targets): Likewise. * ipa-visibility.c (cgraph_externally_visible_p): Mark instrumented 'main' as externally visible. (function_and_variable_visibility): Filter instrumentation thunks. * cgraph.h (cgraph_thunk_info): Add add_pointer_bounds_args field. (cgraph_node): Add instrumented_version, orig_decl and instrumentation_clone fields. (symtab_node::get_alias_target): Allow IPA_REF_CHKP reference. (varpool_node): Add need_bounds_init field. (cgraph_local_p): New. * cgraph.c: Include tree-chkp.h. (cgraph_node::remove): Fix instrumented_version of the referenced node if any. (cgraph_node::dump): Dump instrumentation_clone and instrumented_version fields. (cgraph_node::verify_node): Check correctness of IPA_REF_CHKP references and instrumentation thunks. (cgraph_can_remove_if_no_direct_calls_and_refs_p): Keep all not instrumented instrumentation clones alive. (cgraph_redirect_edge_call_stmt_to_callee): Support returned bounds. * cgraphbuild.c (rebuild_cgraph_edges): Rebuild IPA_REF_CHKP reference. (cgraph_rebuild_references): Likewise. * cgraphunit.c: Include tree-chkp.h. (assemble_thunks_and_aliases): Skip thunks calling instrumneted function version. (varpool_finalize_decl): Register statically initialized decls in Pointer Bounds Checker. (walk_polymorphic_call_targets): Do not mark generated call to __builtin_unreachable as with_bounds. (output_weakrefs): If there are both instrumented and original versions, output only one of them. (cgraph_node::expand_thunk): Set with_bounds flag for created call statement. * ipa-ref.h (ipa_ref_use): Add IPA_REF_CHKP. (ipa_ref): increase size of use field. * symtab.c (ipa_ref_use_name): Add element for IPA_REF_CHKP. * varpool.c (dump_varpool_node): Dump need_bounds_init field. (ctor_for_folding): Do not fold constant bounds vars. * lto-streamer.h (LTO_minor_version): Change minor version from 0 to 1. * lto-cgraph.c (compute_ltrans_boundary): Keep initial values for pointer bounds. (lto_output_node): Output instrumentation_clone, thunk.add_pointer_bounds_args and orig_decl field. (lto_output_ref): Adjust to new ipa_ref::use field size. (input_overwrite_node): Read instrumentation_clone field. (input_node): Read thunk.add_pointer_bounds_args and orig_decl fields. (input_ref): Adjust to new ipa_ref::use field size. (input_cgraph_1): Compute instrumented_version fields and restore IDENTIFIER_TRANSPARENT_ALIAS chains. (lto_output_varpool_node): Output need_bounds_init value. (input_varpool_node): Read need_bounds_init value. * lto-partition.c (add_symbol_to_partition_1): Keep original and instrumented versions together. (privatize_symbol_name): Restore transparent alias chain if required. (add_references_to_partition): Add references to pointer bounds vars. * dbxout.c (dbxout_type): Ignore POINTER_BOUNDS_TYPE. * dwarf2out.c (gen_subprogram_die): Ignore bound args. (gen_type_die_with_usage): Skip pointer bounds. (dwarf2out_global_decl): Likewise. (is_base_type): Support POINTER_BOUNDS_TYPE. (gen_formal_types_die): Skip pointer bounds. (gen_decl_die): Likewise. * var-tracking.c (vt_add_function_parameters): Skip bounds parameters. * ipa-icf.c (sem_function::merge): Do not merge when instrumentation thunk still exists. (sem_variable::merge): Reset need_bounds_init flag. * doc/extend.texi: Document Pointer Bounds Checker built-in functions and attributes. * doc/tm.texi.in (TARGET_LOAD_BOUNDS_FOR_ARG): New. (TARGET_STORE_BOUNDS_FOR_ARG): New. (TARGET_LOAD_RETURNED_BOUNDS): New. (TARGET_STORE_RETURNED_BOUNDS): New. (TARGET_CHKP_FUNCTION_VALUE_BOUNDS): New. (TARGET_SETUP_INCOMING_VARARG_BOUNDS): New. (TARGET_BUILTIN_CHKP_FUNCTION): New. (TARGET_CHKP_BOUND_TYPE): New. (TARGET_CHKP_BOUND_MODE): New. (TARGET_CHKP_MAKE_BOUNDS_CONSTANT): New. (TARGET_CHKP_INITIALIZE_BOUNDS): New. * doc/tm.texi: Regenerated. * doc/rtl.texi (MODE_POINTER_BOUNDS): New. (BND32mode): New. (BND64mode): New. * doc/invoke.texi (-mmpx): New. (-mno-mpx): New. (chkp-max-ctor-size): New. * config/i386/constraints.md (w): New. (Ti): New. (Tb): New. * config/i386/i386-c.c (ix86_target_macros_internal): Add __MPX__. * config/i386/i386-modes.def (BND32): New. (BND64): New. * config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): New. * config/i386/i386.c: Include tree-chkp.h, rtl-chkp.h, tree-iterator.h. (regclass_map): Add bound registers. (dbx_register_map): Likewise. (dbx64_register_map): Likewise. (svr4_dbx_register_map): Likewise. (isa_opts): Add -mmpx. (PTA_MPX): New. (ix86_option_override_internal): Support MPX ISA. (ix86_conditional_register_usage): Support bound registers. (ix86_code_end): Add MPX bnd prefix. (output_set_got): Likewise. (print_reg): Avoid prefixes for bound registers. (ix86_print_operand): Add '!' (MPX bnd) print prefix support. (ix86_print_operand_punct_valid_p): Likewise. (ix86_print_operand_address): Support UNSPEC_BNDMK_ADDR and UNSPEC_BNDLDX_ADDR. (ix86_output_call_insn): Add MPX bnd prefix to branch instructions. (ix86_class_likely_spilled_p): Add bound regs support. (ix86_hard_regno_mode_ok): Likewise. (x86_order_regs_for_local_alloc): Likewise. (ix86_bnd_prefixed_insn_p): New. (ix86_builtins): Add IX86_BUILTIN_BNDMK, IX86_BUILTIN_BNDSTX, IX86_BUILTIN_BNDLDX, IX86_BUILTIN_BNDCL, IX86_BUILTIN_BNDCU, IX86_BUILTIN_BNDRET, IX86_BUILTIN_BNDNARROW, IX86_BUILTIN_BNDINT, IX86_BUILTIN_SIZEOF, IX86_BUILTIN_BNDLOWER, IX86_BUILTIN_BNDUPPER. (builtin_isa): Add leaf_p and nothrow_p fields. (def_builtin): Initialize leaf_p and nothrow_p. (ix86_add_new_builtins): Handle leaf_p and nothrow_p flags. (bdesc_mpx): New. (bdesc_mpx_const): New. (ix86_init_mpx_builtins): New. (ix86_init_builtins): Call ix86_init_mpx_builtins. (ix86_emit_cmove): New. (ix86_emit_move_max): New. (ix86_expand_builtin): Expand IX86_BUILTIN_BNDMK, IX86_BUILTIN_BNDSTX, IX86_BUILTIN_BNDLDX, IX86_BUILTIN_BNDCL, IX86_BUILTIN_BNDCU, IX86_BUILTIN_BNDRET, IX86_BUILTIN_BNDNARROW, IX86_BUILTIN_BNDINT, IX86_BUILTIN_SIZEOF, IX86_BUILTIN_BNDLOWER, IX86_BUILTIN_BNDUPPER. (ix86_function_value_bounds): New. (ix86_builtin_mpx_function): New. (ix86_get_arg_address_for_bt): New. (ix86_load_bounds): New. (ix86_store_bounds): New. (ix86_load_returned_bounds): New. (ix86_store_returned_bounds): New. (ix86_mpx_bound_mode): New. (ix86_make_bounds_constant): New. (ix86_initialize_bounds): (TARGET_LOAD_BOUNDS_FOR_ARG): New. (TARGET_STORE_BOUNDS_FOR_ARG): New. (TARGET_LOAD_RETURNED_BOUNDS): New. (TARGET_STORE_RETURNED_BOUNDS): New. (TARGET_CHKP_BOUND_MODE): New. (TARGET_BUILTIN_CHKP_FUNCTION): New. (TARGET_CHKP_FUNCTION_VALUE_BOUNDS): New. (TARGET_CHKP_MAKE_BOUNDS_CONSTANT): New. (TARGET_CHKP_INITIALIZE_BOUNDS): New. (ix86_option_override_internal): Do not support x32 with MPX. (init_cumulative_args): Init stdarg, bnd_regno, bnds_in_bt and force_bnd_pass. (function_arg_advance_32): Return number of used integer registers. (function_arg_advance_64): Likewise. (function_arg_advance_ms_64): Likewise. (ix86_function_arg_advance): Handle pointer bounds. (ix86_function_arg): Likewise. (ix86_function_value_regno_p): Mark fisrt bounds registers as possible function value. (ix86_function_value_1): Handle pointer bounds type/mode (ix86_return_in_memory): Likewise. (ix86_print_operand): Analyse insn to decide abounf "bnd" prefix. (ix86_expand_call): Generate returned bounds. (ix86_setup_incoming_vararg_bounds): New. (ix86_va_start): Initialize bounds for pointers in va_list. (TARGET_SETUP_INCOMING_VARARG_BOUNDS): New. * config/i386/i386.h (TARGET_MPX): New. (TARGET_MPX_P): New. (FIRST_PSEUDO_REGISTER): Fix to new value. (FIXED_REGISTERS): Add bound registers. (CALL_USED_REGISTERS): Likewise. (REG_ALLOC_ORDER): Likewise. (HARD_REGNO_NREGS): Likewise. (VALID_BND_REG_MODE): New. (FIRST_BND_REG): New. (LAST_BND_REG): New. (reg_class): Add BND_REGS. (REG_CLASS_NAMES): Likewise. (REG_CLASS_CONTENTS): Likewise. (BND_REGNO_P): New. (ANY_BND_REG_P): New. (BNDmode): New. (HI_REGISTER_NAMES): Add bound registers. (ix86_args): Add bnd_regno, bnds_in_bt, force_bnd_pass and stdarg fields. * config/i386/i386.md (UNSPEC_BNDMK): New. (UNSPEC_BNDMK_ADDR): New. (UNSPEC_BNDSTX): New. (UNSPEC_BNDLDX): New. (UNSPEC_BNDLDX_ADDR): New. (UNSPEC_BNDCL): New. (UNSPEC_BNDCU): New. (UNSPEC_BNDCN): New. (UNSPEC_MPX_FENCE): New. (UNSPEC_SIZEOF): New. (BND0_REG): New. (BND1_REG): New. (type): Add mpxmov, mpxmk, mpxchk, mpxld, mpxst. (length_immediate): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (prefix_rep): Check for bnd prefix. (prefix_0f): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (length_nobnd): New. (length): Use length_nobnd when specified. (memory): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (BND): New. (bnd_ptr): New. (BNDCHECK): New. (bndcheck): New. (*jcc_1): Add MPX bnd prefix. (*jcc_2): Likewise. (jump): Likewise. (*indirect_jump): Likewise. (*tablejump_1): Likewise. (simple_return_internal): Likewise. (simple_return_internal_long): Likewise. (simple_return_pop_internal): Likewise. (simple_return_indirect_internal): Likewise. (<mode>_mk): New. (*<mode>_mk): New. (mov<mode>): New. (*mov<mode>_internal_mpx): New. (<mode>_<bndcheck>): New. (*<mode>_<bndcheck>): New. (<mode>_ldx): New. (*<mode>_ldx): New. (<mode>_stx): New. (*<mode>_stx): New. move_size_reloc_<mode>): New. * config/i386/predicates.md (address_mpx_no_base_operand): New. (address_mpx_no_index_operand): New. (bnd_mem_operator): New. (symbol_operand): New. (x86_64_immediate_size_operand): New. * config/i386/i386.opt (mmpx): New. * config/i386/i386-builtin-types.def (BND): New. (ULONG): New. (BND_FTYPE_PCVOID_ULONG): New. (VOID_FTYPE_BND_PCVOID): New. (VOID_FTYPE_PCVOID_PCVOID_BND): New. (BND_FTYPE_PCVOID_PCVOID): New. (BND_FTYPE_PCVOID): New. (BND_FTYPE_BND_BND): New. (PVOID_FTYPE_PVOID_PVOID_ULONG): New. (PVOID_FTYPE_PCVOID_BND_ULONG): New. (ULONG_FTYPE_VOID): New. (PVOID_FTYPE_BND): New. gcc/testsuite/ 2014-11-05 Ilya Enkovich <ilya.enkovich@intel.com> * gcc.target/i386/chkp-builtins-1.c: New. * gcc.target/i386/chkp-builtins-2.c: New. * gcc.target/i386/chkp-builtins-3.c: New. * gcc.target/i386/chkp-builtins-4.c: New. * gcc.target/i386/chkp-remove-bndint-1.c: New. * gcc.target/i386/chkp-remove-bndint-2.c: New. * gcc.target/i386/chkp-const-check-1.c: New. * gcc.target/i386/chkp-const-check-2.c: New. * gcc.target/i386/chkp-lifetime-1.c: New. * gcc.dg/pr37858.c: Replace early_local_cleanups pass name with build_ssa_passes. From-SVN: r217125
Ilya Enkovich committed -
* passes.def (pass_compute_alignments, pass_duplicate_computed_gotos, pass_variable_tracking, pass_free_cfg, pass_machine_reorg, pass_cleanup_barriers, pass_delay_slots, pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges, pass_shorten_branches, pass_est_nothrow_function_flags, pass_dwarf2_frame, pass_final): Move outside of pass_postreload and into pass_late_compilation. (pass_late_compilation): Add. * passes.c (pass_data_late_compilation, pass_late_compilation, make_pass_late_compilation): New. * timevar.def (TV_LATE_COMPILATION): New. From-SVN: r217124
Bernd Schmidt committed -
* target.def (omit_struct_return_reg): New data hook. * doc/tm.texi.in: Add @hook TARGET_OMIT_STRUCT_RETURN_REG. * doc/tm.texi: Regenerate. * function.c (expand_function_end): Use it. From-SVN: r217123
Bernd Schmidt committed
-