Drop the size arguments for the hash/equal functions stored in type
descriptors. Types know what size they are. To make this work,
generate hash/equal functions for types that can use an identity
comparison but are not a standard size and alignment.
Drop the multiplications by 33 in the generated hash code and the
reflect package hash code. They are not necessary since we started
passing a seed value around, as the seed includes the hash of the
earlier values.
Copy the algorithms for standard types from the Go 1.7 runtime,
replacing the C functions.
Reviewed-on: https://go-review.googlesource.com/34983
From-SVN: r244256
* expr.c (store_field): In the bitfield case, if the value comes from
a function call and is of an aggregate type returned in registers, do
not modify the field mode; extract the value in all cases if the mode
is BLKmode and the size is not larger than a word.
From-SVN: r244249
PR tree-optimization/79007
PR tree-optimization/67955
* tree-ssa-alias.c (same_addr_size_stores_p): Only need to be
conservative for pt.null when flag_non_call_exceptions is on.
From-SVN: r244247
PR tree-optimization/78899
* tree-if-conv.c (version_loop_for_if_conversion): Instead of
returning bool return struct loop *, NULL for failure and the new
loop on success.
(versionable_outer_loop_p): Don't version outer loop if it has
dont_vectorized bit set.
(tree_if_conversion): When versioning outer loop, ensure
tree_if_conversion is performed also on the inner loop of the
non-vectorizable outer loop copy.
* tree-vectorizer.c (set_uid_loop_bbs): Formatting fix. Fold
LOOP_VECTORIZED in inner loop of the scalar outer loop and
prevent vectorization of it.
(vectorize_loops): For outer + inner LOOP_VECTORIZED, ensure
the outer loop vectorization of the non-scalar version is attempted
before vectorization of the inner loop in scalar version. If
outer LOOP_VECTORIZED guarded loop is not vectorized, prevent
vectorization of its inner loop.
* tree-vect-loop-manip.c (rename_variables_in_bb): If outer_loop
has 2 inner loops, rename also on edges from bb whose single pred
is outer_loop->header. Fix typo in function comment.
* gcc.target/i386/pr78899.c: New test.
* gcc.dg/pr71077.c: New test.
From-SVN: r244238
This started by moving procresize from C to Go so that we can pass the
right type to the memory allocator when allocating a p, which forced
the gomaxprocs variable to move from C to Go, and everything else
followed from that.
Reviewed-on: https://go-review.googlesource.com/34916
From-SVN: r244236
2017-01-09 Martin Jambor <mjambor@suse.cz>
PR ipa/78365
PR ipa/78599
* ipa-prop.h (ipa_jump_func): Swap positions of vr_known and m_vr.
* ipa-cp.c (ipa_vr_operation_and_type_effects): New function.
(propagate_vr_accross_jump_function): Use the above function for all
value range computations for pass-through jump functions and type
converasion from explicit value range values.
(ipcp_propagate_stage): Do not attempt to deduce types of formal
parameters from TYPE_ARG_TYPES.
* ipa-prop.c (ipa_write_jump_function): Remove trailing whitespace.
(ipa_write_node_info): Stream type of the actual argument.
(ipa_read_node_info): Likewise. Also remove trailing whitespace.
testsuite/
* gcc.dg/torture/pr78365.c: New test.
From-SVN: r244232
PR libstdc++/79017
* acinclude.m4 (GLIBCXX_CHECK_C99_TR1): Check for llrint and llround
functions separately on darwin and if they're missing define
_GLIBCXX_NO_C99_ROUNDING_FUNCS.
* config.h.in: Regenerate.
* configure: Regenerate.
* include/c_global/cmath [_GLIBCXX_NO_C99_ROUNDING_FUNCS] (llrint)
(llrintf, llrintl, llround, llroundf, llroundl): Do not define.
From-SVN: r244231
2017-01-09 Martin Liska <mliska@suse.cz>
PR pch/78970
* gcc.c (driver_handle_option): Handle OPT_E and set
have_E.
(lookup_compiler): Do not show error message with have_E.
From-SVN: r244227
2017-01-09 Hristian Kirtchev <kirtchev@adacore.com>
* einfo.ads, einfo.adb: Remove uses of flags Has_Default_Init_Cond,
Is_Default_Init_Cond_Procedure, and
Has_Inherited_Default_Init_Cond. Add uses of flags
Has_Own_DIC, Is_DIC_Procedure, and Has_Inherited_DIC.
(Default_Init_Cond_Procedure): Removed.
(DIC_Procedure): New routine.
(Has_Default_Init_Cond): Removed.
(Has_DIC): New routine.
(Has_Inheritable_Invariants): The attribute applies to the base type.
(Has_Inherited_Default_Init_Cond): Removed.
(Has_Inherited_DIC): New routine.
(Has_Inherited_Invariants): The attribute applies to the base type.
(Has_Own_DIC): New routine.
(Has_Own_Invariants): The attribute applies to the base type.
(Is_Default_Init_Cond_Procedure): Removed.
(Is_DIC_Procedure): New routine.
(Set_Default_Init_Cond_Procedure): Removed.
(Set_DIC_Procedure): New routine.
(Set_Has_Default_Init_Cond): Removed.
(Set_Has_Inheritable_Invariants): The attribute applies
to the base type.
(Set_Has_Inherited_Default_Init_Cond): Removed.
(Set_Has_Inherited_DIC): New routine.
(Set_Has_Inherited_Invariants): The attribute applies to the base type.
(Set_Has_Own_DIC): New routine.
(Set_Has_Own_Invariants): The attribute applies to the base type.
(Set_Is_Default_Init_Cond_Procedure): Removed.
(Set_Is_DIC_Procedure): New routine.
(Write_Entity_Flags): Update the output of all flags related to
default initial condition.
* exp_ch3.adb (Expand_N_Object_Declaration): Update the generation
of the call to the DIC procedure.
(Freeze_Type): Generate the body of the DIC procedure.
* exp_ch7.adb (Build_Invariant_Procedure_Body): Replace
all occurrences of Create_Append with Append_New_To. Do
not generate an invariant procedure for a class-wide type.
The generated body acts as a freeze action of the working type.
(Build_Invariant_Procedure_Declaration): Do not generate an
invariant procedure for a class-wide type.
(Create_Append): Removed.
* exp_util.adb: Add with and use clauses for Sem_Ch3, sem_ch6,
sem_Ch12, Sem_Disp, and GNAT.HTable. Move the handling of
class-wide pre/postcondition description and data structures from
Sem_Prag.
(Build_Class_Wide_Expression): Moved from Sem_Prag.
(Build_DIC_Call): New routine.
(Build_DIC_Procedure_Body): New routine.
(Build_DIC_Procedure_Declaration): New routine.
(Entity_Hash): Moved from Sem_Prag.
(Find_DIC_Type): New routine.
(Update_Primitives_Mapping): Reimplemented.
(Update_Primitives_Mapping_Of_Types): New routine.
* exp_util.ads (Build_Class_Wide_Expression): Moved from Sem_Prag.
(Build_DIC_Call): New routine.
(Build_DIC_Procedure_Body): New routine.
(Build_DIC_Procedure_Declaration): New routine.
(Update_Primitives_Mapping): Moved from Sem_Prag.
(Update_Primitives_Mapping_Of_Types): New routine.
* nlists.adb (Append_New): New routine.
(Append_New_To): New routine.
* nlists.ads (Append_New): New routine.
(Append_New_To): New routine.
* sem_ch3.adb (Analyze_Declarations): Do not generate the bodies
of DIC procedures here. This is now done at the end of the
visible declarations, private declarations, and at the freeze
point of a type.
(Analyze_Private_Extension_Declaration):
A private extension inherits the DIC pragma of a parent type.
(Analyze_Subtype_Declaration): No need to propagate invariant
attributes to a subtype as those apply to the base type.
(Build_Derived_Record_Type): No need to inherit invariants here
as this is now done in Build_Derived_Type.
(Build_Derived_Type): Inherit both the DIC pragma and invariants from
a parent type.
(Process_Full_View): Update the propagation of DIC attributes.
(Propagate_Default_Init_Cond_Attributes): Removed.
* sem_ch7.adb Add with and use clauses for Exp_Util.
(Analyze_Package_Specification): Create the body of the DIC
procedure at the end of the visible and private declarations.
(Preserve_Full_Attributes): Propagate DIC attributes.
* sem_ch9.adb (Analyze_Protected_Type_Declaration): Propagate
DIC attributes.
(Analyze_Task_Type_Declaration): Propagate DIC attributes.
* sem_elab.adb (Check_A_Call): Update the call to
Is_Nontrivial_Default_Init_Cond_Procedure.
* sem_prag.adb Remove the with and use clauses for
GNAT.HTable. Move the handling of class- wide pre/postcondition
description and data structures to Exp_Util.
(Analyze_Pragma): Create the declaration of the DIC procedure. There
is no need to propagate invariant-related attributes at this point
as this is done in Build_Invariant_Procedure_Declaration.
(Build_Class_Wide_Expression): Moved to Exp_Util.
(Entity_Hash): Moved to Exp_Util.
(Update_Primitives_Mapping): Moved to Exp_Util.
* sem_prag.ads (Build_Class_Wide_Expression): Moved to Exp_Util.
(Update_Primitives_Mapping): Moved to Exp_Util.
* sem_util.adb: Remove with and use clauses for Ghost
and Sem_Ch13.
(Build_Default_Init_Cond_Call): Removed.
(Build_Default_Init_Cond_Procedure_Bodies): Removed.
(Build_Default_Init_Cond_Procedure_Declaration): Removed.
(Get_Views): Reimplemented.
(Has_Full_Default_Initialization): Reimplement the section on DIC.
(Inherit_Default_Init_Cond_Procedure): Removed.
(Is_Nontrivial_Default_Init_Cond_Procedure): Removed.
(Is_Nontrivial_DIC_Procedure): New routine.
(Is_Verifiable_DIC_Pragma): New routine.
(Propagate_DIC_Attributes): New routine.
* sem_util.ads (Build_Default_Init_Cond_Call): Removed.
(Build_Default_Init_Cond_Procedure_Bodies): Removed.
(Build_Default_Init_Cond_Procedure_Declaration): Removed.
(Inherit_Default_Init_Cond_Procedure): Removed.
(Is_Nontrivial_Default_Init_Cond_Procedure): Removed.
(Is_Nontrivial_DIC_Procedure): New routine.
(Is_Verifiable_DIC_Pragma): New routine.
(Propagate_DIC_Attributes): New routine.
* sem_warn.adb (Is_OK_Fully_Initialized): Reimplement the section
on DIC.
* sinfo.ads, sinfo.adb: Add new attribute Expression_Copy along with
usage in nodes.
(Expression_Copy): New routine along with pragma Inline.
(Set_Expression_Copy): New routine along with pragma Inline.
From-SVN: r244224
PR tree-optimization/78938
* tree-vect-stmts.c (vectorizable_condition): For non-masked COND_EXPR
where comp_vectype is VECTOR_BOOLEAN_TYPE_P, use
BIT_{NOT,XOR,AND,IOR}_EXPR on the comparison operands instead of
{EQ,NE,GE,GT,LE,LT}_EXPR directly inside of VEC_COND_EXPR. Formatting
fixes.
* gcc.dg/vect/pr78938.c: New test.
From-SVN: r244223
2017-01-09 Richard Biener <rguenther@suse.de>
PR debug/79000
* dwarf2out.c (is_cxx): New overload with context.
(is_naming_typedef_decl): Use it.
* g++.dg/lto/pr79000_0.C: New testcase.
* g++.dg/lto/pr79000_1.c: Likewise.
From-SVN: r244217
2017-01-07 Sandra Loosemore <sandra@codesourcery.com>
PR preprocessor/54124
gcc/
* doc/cppopts.texi: Reformat -d subtable to list the full name
of the options. Add cross-reference to the docs for the general
compiler -d options.
* doc/invoke.texi (Developer Options): Add cross-reference to the
preprocessor-specific -d option documentation.
From-SVN: r244205
PR c++/72803 describes an issue where a fix-it hint is to be emitted at
column 512 of a 511-column source line, leading to an ICE.
The root cause is a bug in linemap_line_start, when transitioning from
lines >= 512 in width to narrow lines.
The wide line in the reproducer has a line map with:
m_column_and_range_bits = 15, m_range_bits = 5
giving 10 effective bits for representing columns, so that columns <= 1023
can be represented.
When parsing the following line,
linemap_line_start (..., ..., max_column_hint=0);
is called. This leads to the "add_map" logic, due to this condition:
|| (max_column_hint <= 80 && effective_column_bits >= 10)
i.e. the new line is sufficiently narrower than the old one to
potentially use a new linemap (so as to conserve values within the
location_t space).
It then attempts to avoid allocating a new line map. Part of the logic
to determine if we really need a new line map is this condition:
SOURCE_COLUMN (map, highest) >= (1U << column_bits)
The above condition is incorrect: we need to determine if the highest
column we've handed out will fit within the proposed *effective* column
bits, but "column_bits" here is the column plus the range bits, rather
than just the column bits.
Hence in this case linemap_line_start erroneously decides that we don't
need a new line map, and updates the column bits within the existing
line map, so any location_t values we've already handed out within it
that are offset from the start by
>= (1<<new_column_and_range_bits)
effectively change meaning, leading to incorrect line&column information
when decoding them, and various "interesting" ways for the linemap
code to fail.
The fix is to use the effective column bits in the above conditional.
gcc/ChangeLog:
PR c++/72803
* input.c (selftest::test_accessing_ordinary_linemaps): Verify
that the transition from a max line width >= 1<<10 to narrower
lines works correctly.
gcc/testsuite/ChangeLog:
PR c++/72803
* g++.dg/diagnostic/pr72803.C: New test case.
libcpp/ChangeLog:
PR c++/72803
* line-map.c (linemap_line_start): When determining if the highest
column given out so far will fit into a proposed change to the
current map, use the effective number of column bits, rather than
the total number of column + range bits.
From-SVN: r244199
If we include them in the ICF hash, they may cause congruence_groups to
be processed in a different order due to different hashes, which in turn
causes different funcdef_nos to be assigned to functions. Since these
numbers are included in -fcompare-debug dumps, they cause failures.
Since these options are not optimization options, in that they do not
(or should not, save for bugs like this) affect the executable code
output by the compiler, they should not be marked as such.
This patch replaces the Optimization flag in the var-tracking options
with the newly-introduced PerFunction flag, so that it can still be
controlled on a per-function basis, but that disregards it in the hash
computation used by ICF.
This fixes -fcompare-debug failures in numerous LTO testcases.
for gcc/ChangeLog
* doc/options.texi (PerFunction): New.
* opt-functions.awk (switch_flags): Map both Optimization and
PerFunction to CL_OPTIMIZATION.
* opth-gen.awk: Test for PerFunction flag along with
Optimization.
* optc-save-gen.awk: Likewise. Introduce var_opt_hash and set
it only when the latter is present. Skip those that don't in
the hash function generator.
* common.opt (fvar-tracking): Mark as PerFunction instead of
Optimization.
(fvar-tracking-assignments): Likewise.
(fvar-tracking-assignments-toggle): Likewise.
(fvar-tracking-uninit): Likewise.
From-SVN: r244198
gcc/fortran/ChangeLog:
2017-01-07 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/78781
PR fortran/78935
* expr.c (gfc_check_pointer_assign): Return the same error message for
rewritten coarray pointer assignments like for plain ones.
* gfortran.h: Change prototype.
* primary.c (caf_variable_attr): Set attributes used ones only only
ones. Add setting of pointer_comp attribute.
(gfc_caf_attr): Add setting of pointer_comp attribute.
* trans-array.c (gfc_array_allocate): Add flag that the component to
allocate is not an ultimate coarray component. Add allocation of
pointer arrays.
(structure_alloc_comps): Extend nullify to treat pointer components in
coarrays correctly. Restructure nullify to remove redundant code.
(gfc_nullify_alloc_comp): Allow setting caf_mode flags.
* trans-array.h: Change prototype of gfc_nullify_alloc_comp ().
* trans-decl.c (generate_coarray_sym_init): Call nullify_alloc_comp for
derived type coarrays with pointer components.
* trans-expr.c (gfc_trans_structure_assign): Also treat pointer
components.
(trans_caf_token_assign): Handle assignment of token of scalar pointer
components.
(gfc_trans_pointer_assignment): Call above routine.
* trans-intrinsic.c (conv_expr_ref_to_caf_ref): Add treating pointer
components.
(gfc_conv_intrinsic_caf_get): Likewise.
(conv_caf_send): Likewise.
* trans-stmt.c (gfc_trans_allocate): After allocating a derived type in
a coarray pre-register the tokens.
(gfc_trans_deallocate): Simply determining the coarray type (scalar or
array) and deregistering it correctly.
* trans-types.c (gfc_typenode_for_spec): Replace in_coarray flag by the
actual codim to allow lookup of array types in the cache.
(gfc_build_array_type): Likewise.
(gfc_get_array_descriptor_base): Likewise.
(gfc_get_array_type_bounds): Likewise.
(gfc_get_derived_type): Likewise.
* trans-types.h: Likewise.
* trans.c (gfc_deallocate_with_status): Enable deregistering of all kind
of coarray components.
(gfc_deallocate_scalar_with_status): Use free() in fcoarray_single mode
instead of caf_deregister.
libgfortran/ChangeLog:
2017-01-07 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/78781
PR fortran/78935
* caf/single.c (send_by_ref): Fix addressing of non-allocatable scalar
destination components.
gcc/testsuite/ChangeLog:
2017-01-07 Andre Vehreschild <vehre@gcc.gnu.org>
* gfortran.dg/coarray/ptr_comp_1.f08: New test.
* gfortran.dg/coarray/ptr_comp_2.f08: New test.
* gfortran.dg/coarray/ptr_comp_3.f08: New test.
* gfortran.dg/coarray/ptr_comp_4.f08: New test.
* gfortran.dg/coarray_ptr_comp_1.f08: New test.
* gfortran.dg/coarray_ptr_comp_2.f08: New test.
* gfortran.dg/coarray_ptr_comp_3.f08: New test.
From-SVN: r244196