PR c++/70498
* cp-demangle.c: Parse numbers as integer instead of long to avoid
overflow after sanity checks. Include <limits.h> if available.
(INT_MAX): Define if necessary.
(d_make_template_param): Takes integer argument instead of long.
(d_make_function_param): Likewise.
(d_append_num): Likewise.
(d_identifier): Likewise.
(d_number): Parse as and return integer.
(d_compact_number): Handle overflow.
(d_source_name): Change variable type to integer for parsed number.
(d_java_resource): Likewise.
(d_special_name): Likewise.
(d_discriminator): Likewise.
(d_unnamed_type): Likewise.
* testsuite/demangle-expected: Add regression test cases.
From-SVN: r235767
* ipa-inline-analysis.c (reset_inline_summary): Clear fp_expressions
(dump_inline_summary): Dump it.
(fp_expression_p): New predicate.
(estimate_function_body_sizes): Use it.
(inline_merge_summary): Merge fp_expressions.
(inline_read_section): Read fp_expressions.
(inline_write_summary): Write fp_expressions.
* ipa-inline.c (can_inline_edge_p): Permit inlining across fp math
codegen boundary if either caller or callee is !fp_expressions.
* ipa-inline.h (inline_summary): Add fp_expressions.
* ipa-inline-transform.c (inline_call): When inlining !fp_expressions
to fp_expressions be sure the fp generation flags are updated.
* gcc.dg/ipa/inline-8.c: New testcase.
From-SVN: r235766
2016-05-02 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gcc.dg/spec-options.c: Run the test on all targets.
* gcc.dg/foo.specs: Use cpp_unique_options.
From-SVN: r235762
2016-05-02 Tristan Gingold <gingold@adacore.com>
* fname.adb (Is_Predefined_File_Name): Also consider non-krunched
i-* names.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Aggregate_Constraint_Checks): Separate
accessibility checks and non-null checks for aggregate components,
to prevent spurious accessibility errors.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (OK_For_Limited_Init): A type conversion is not
always legal in the in-place initialization of a limited entity
(e.g. an allocator).
* sem_res.adb (Resolve_Allocator): Improve error message with RM
reference when allocator expression is illegal.
From-SVN: r235746
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Expand_Call): When inlining a call to a function
declared in a package instance, locate the instance node of the
package after the actual package declaration. skipping over
pragmas that may have been introduced when the generic unit
carries aspects that are transformed into pragmas.
2016-05-02 Bob Duff <duff@adacore.com>
* s-memory.adb (Alloc, Realloc): Move checks
for Size = 0 or size_t'Last into the Result = System.Null_Address
path for efficiency. Improve comments (based on actual C language
requirements for malloc).
* exp_util.adb (Build_Allocate_Deallocate_Proc): Optimize the
case where we are using the default Global_Pool_Object, and we
don't need the heavy finalization machinery.
From-SVN: r235745
2016-05-02 Javier Miranda <miranda@adacore.com>
* exp_util.ads, exp_util.adb (Force_Evaluation): Adding new formal.
(Remove_Side_Effects): Adding a new formal.
* exp_ch6.adb (Expand_Simple_Function_Return): Generating the
call to the _Postconditions procedure ensure that side-effects
are unconditionally removed.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Check_Formal_Package_Instance, Check_Mismatch):
Use original node to determine whether the declaration is for
a formal type declaration, to take into account that formwl
private types are rewritten as private extension declarations
to simplify semantic analysis.
From-SVN: r235742
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch3.adb, exp_ch9.adb, einfo.adb, sem_ch4.adb, sem_ch6.adb: Minor
reformatting.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* exp_ch4.adb (Expand_N_Allocator): If the designated type
is a private derived type with no discriminants, examine its
underlying_full_view to determine whether the full view has
defaulted discriminants, so their defaults can be used in the
call to the initialization procedure for the designated object.
From-SVN: r235740
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* exp_prag.adb, comperr.adb: Minor reformatting.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* exp_pakd.adb (Rj_Unchecked_Convert_To): Do not perform an
unchecked conversion if the source size is 0 (indicating that
its RM size is unknown). This will happen with packed arrays of
non-discrete types, in which case the component type is known
to match.
2016-05-02 Arnaud Charlet <charlet@adacore.com>
* debug.adb: Reserve -gnatd.V.
2016-05-02 Javier Miranda <miranda@adacore.com>
* sem_ch3.adb (Process_Full_View): Remove from visibility
wrappers of synchronized types to avoid spurious errors with
their wrapped entity.
* exp_ch9.adb (Build_Wrapper_Spec): Do not generate the wrapper
if no interface primitive is covered by the subprogram and this is
not a primitive declared between two views; see Process_Full_View.
(Build_Protected_Sub_Specification): Link the dispatching
subprogram with its original non-dispatching protected subprogram
since their names differ.
(Expand_N_Protected_Type_Declaration):
If a protected subprogram overrides an interface primitive then
do not build a wrapper if it was already built.
* einfo.ads, einfo.adb (Original_Protected_Subprogram): New attribute.
* sem_ch4.adb (Names_Match): New subprogram.
* sem_ch6.adb (Check_Synchronized_Overriding): Moved
to library level and defined in the public part of the
package to invoke it from Exp_Ch9.Build_Wrapper_Spec
(Has_Matching_Entry_Or_Subprogram): New subprogram.
(Report_Conflict): New subprogram.
From-SVN: r235739
2016-05-02 Jerome Lambourg <lambourg@adacore.com>
* s-unstyp.ads: Code cleanups.
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch13.adb (Size_Too_Small_Error): Fix the error message format.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* exp_prag.adb (Expand_attributes_In_Consequence,
Expand_Attributes): If the prefix of'Old is an unconstrained type,
for example an unconstrained formal of the enclosing subprogram,
create an object declaration with an expression to obtain the
actual subtype of the temporary.
2016-05-02 Arnaud Charlet <charlet@adacore.com>
* comperr.adb (Delete_SCIL_Files): Add missing handling of
N_Subprogram_Declaration.
From-SVN: r235738
2016-05-02 Gary Dismukes <dismukes@adacore.com>
* exp_ch5.adb, exp_ch7.adb, exp_ch7.ads, checks.adb, sem_attr.adb,
gnat1drv.adb, sem_ch4.adb, sem_ch13.adb: Minor reformatting and typo
fixes.
* sem_prag.adb, sem_ch12.adb: Minor typo fixes.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): The
function call may be wrapped in an explicit type conversion.
2016-05-02 Jerome Lambourg <lambourg@adacore.com>
* interfac.ads: use pragma No_Elaboration_Code_All.
* s-unstyp.ads: s-unstyp.ads: use pragma No_Elaboration_Code_All.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem.adb (Analyze: If node is an error node previously created
by the parser, disable expansion to prevent subsequent glitches
in error recovery.
From-SVN: r235736
2016-05-02 Tristan Gingold <gingold@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration): Use Has_Protected
to check for the no local protected objects restriction.
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* einfo.adb Anonymous_Master now uses Node35.
(Anonymous_Master): Update the assertion and node reference.
(Set_Anonymous_Master): Update the assertion and node reference.
(Write_Field35_Name): Add output for Anonymous_Master.
(Write_Field36_Name): The output is now undefined.
* einfo.ads Update the node and description of attribute
Anonymous_Master. Remove prior occurrences in entities as this
is now a type attribute.
* exp_ch3.adb (Expand_Freeze_Array_Type): Remove local variable
Ins_Node. Anonymous access- to-controlled component types no
longer need finalization masters. The master is now built when
a related allocator is expanded.
(Expand_Freeze_Record_Type): Remove local variable Has_AACC. Do not
detect whether the record type has at least one component of anonymous
access-to- controlled type. These types no longer need finalization
masters. The master is now built when a related allocator is expanded.
* exp_ch4.adb Remove with and use clauses for Lib and Sem_Ch8.
(Current_Anonymous_Master): Removed.
(Expand_N_Allocator): Call Build_Anonymous_Master to create a
finalization master for an anonymous access-to-controlled type.
* exp_ch6.adb (Add_Finalization_Master_Actual_To_Build_In_Place_Call):
Call routine Build_Anonymous_Master to create a finalization master
for an anonymous access-to-controlled type.
* exp_ch7.adb (Allows_Finalization_Master): New routine.
(Build_Anonymous_Master): New routine.
(Build_Finalization_Master): Remove formal parameter
For_Anonymous. Use Allows_Finalization_Master to determine whether
circumstances warrant a finalization master. This routine no
longer creates masters for anonymous access-to-controlled types.
(In_Deallocation_Instance): Removed.
* exp_ch7.ads (Build_Anonymous_Master): New routine.
(Build_Finalization_Master): Remove formal parameter For_Anonymous
and update the comment on usage.
* sem_util.adb (Get_Qualified_Name): New routines.
(Output_Name): Reimplemented.
(Output_Scope): Removed.
* sem_util.ads (Get_Qualified_Name): New routines.
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* debug.adb: Document the use of switch -gnatd.H.
* gnat1drv.adb (Adjust_Global_Switches): Set ASIS_GNSA mode when
-gnatd.H is present.
(Gnat1drv): Suppress the call to gigi when ASIS_GNSA mode is active.
* opt.ads: Add new option ASIS_GNSA_Mode.
* sem_ch13.adb (Alignment_Error): New routine.
(Analyze_Attribute_Definition_Clause): Suppress certain errors in
ASIS mode for attribute clause Alignment, Machine_Radix, Size, and
Stream_Size.
(Check_Size): Use routine Size_Too_Small_Error to
suppress certain errors in ASIS mode.
(Get_Alignment_Value): Use routine Alignment_Error to suppress certain
errors in ASIS mode.
(Size_Too_Small_Error): New routine.
From-SVN: r235732
* spark_xrefs.ads Description of the spark cross-references
clarified; small style fixes.
* lib-xref-spark_specific.adb (Add_SPARK_Scope,
Detect_And_Add_SPARK_Scope): consider protected types and bodies
as yet another scopes.
(Enclosing_Subprogram_Or_Library_Package): refactored using
Hristian's suggestions; added support for scopes of protected
types and bodies; fix for entries to return the scope of the
enclosing concurrent type, which is consistent with what is
returned for protected subprograms.
* sem_intr.adb: Minor style fix in comment.
From-SVN: r235731
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* lib-xref.ads, lib-xref-spark_specific.adb, get_spark_xrefs.adb,
put_spark_xrefs.adb: Minor reformatting.
2016-05-02 Doug Rupp <rupp@adacore.com>
* g-traceb.ads: Document traceback for ARM.
2016-05-02 Javier Miranda <miranda@adacore.com>
* exp_disp.adb (Make_Tags): Do not generate the
external name of interface tags adding the suffix counter since
it causes problems at link time when the IP routines are inlined
across units with optimization.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* einfo.ads, einfo.adb (Predicates_Ignared): new flag to indicate
that predicate checking is disabled for predicated subtypes in
the context of an Assertion_Policy pragma.
* checks.adb (Apply_Predicate_Check): Do nothing if
Predicates_Ignored is true.
* exp_ch3.adb (Expand_Freeze_Enumeration_Type): If
Predicates_Ignores is true, the function Rep_To_Pos does raise
an exception for invalid data.
* exp_ch4.adb (Expand_N_Type_Conversion): IF target is a predicated
type do not apply check if Predicates_Ignored is true.
* exp_ch5.adb (Expand_N_Case_Statement): If Predicates_Ignored
is true, sem_prag.adb:
* sem_ch3.adb (Analyze_Object_Declaration): If Predicates_Ignored
is true do not emit predicate check on initializing expression.
From-SVN: r235730
2016-05-02 Arnaud Charlet <charlet@adacore.com>
* get_spark_xrefs.adb (Get_Nat, Get_Name): Initialize variables when
they are declared; refine type of a counter from Integer to Natural.
* sem_ch5.adb, gnatcmd.adb, s-intman-posix.adb, eval_fat.adb,
prj.adb, sem_util.adb, s-intman-android.adb, prj-nmsc.adb, sem_ch8.adb,
exp_ch3.adb: Minor editing.
From-SVN: r235729
2016-05-02 Yannick Moy <moy@adacore.com>
* a-tigeli.adb (Get_Line): Always set Last prior to returning.
2016-05-02 Yannick Moy <moy@adacore.com>
* lib-xref.adb: Minor style fix in whitespace of declarations.
* put_spark_xrefs.adb (Put_SPARK_Xrefs): printing of strings
refactored without loops.
* put_spark_xrefs.ads (Write_Info_Str): new formal argument of
generic procedure.
* spark_xrefs.adb (Write_Info_Str): new actual in instantiation
of generic procedure.
From-SVN: r235728
* config/i386/predicates.md (nonimm_ssenomem_operand): New predicate.
(register_mixssei387nonimm_operand): Remove predicate.
* config/i386/i386.md (*fop_<mode>_comm): Merge from
*fop_<mode>_comm_mixed and *fop_<mode>_comm_i387. Disable unsupported
alternatives using "enabled" attribute. Also check X87_ENABLE_ARITH
for TARGET_MIX_SSE_I387 alternatives.
(*fop_<mode>_1): Merge from *fop_<mode>_1_mixed and *fop_<mode>_1_i387.
Disable unsupported alternatives using "enabled" attribute. Use
nonimm_ssenomem_operand as operand 1 predicate. Also check
X87_ENABLE_ARITH for TARGET_MIX_SSE_I387 alternatives.
* config/i386/predicates.md (nonimm_ssenomem_operand): New predicate.
(register_mixssei387nonimm_operand): Remove predicate.
From-SVN: r235727
2016-05-02 Arnaud Charlet <charlet@adacore.com>
* lib-xref-spark_specific.adb (Add_SPARK_Scope): add task type scope.
(Detect_And_Add_SPARK_Scope): detect and add task type scope.
(Enclosing_Subprogram_Or_Package): Respect boundaries of task
and entry declarations.
* spark_xrefs.ads: minor typo in comment.
From-SVN: r235726
2016-05-02 Arnaud Charlet <charlet@adacore.com>
* make.adb: Minor: avoid an exception when calling gnatmake with
no argument and gnatmake is built with checks on.
* lib-xref-spark_specific.adb: Minor code cleanup.
From-SVN: r235725
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Normalize_Actuals): Take into account extra
actuals that may have been introduced previously. Normally extra
actuals are introduced when a call is expanded, but a validity
check may copy and reanalyze a call that carries an extra actual
(e.g. an accessibility parameter) before the call itself is
marked Analzyed, and the analysis of the copy has to be able to
cope with the added actual.
From-SVN: r235723
While looking at the use of cst_and_fits_in_hwi in tree-ssa-loop-ivopts.c,
I had difficulty working out what the function actually tests. The
final NUNITS check seems redundant, since it asks about the number of
HWIs in the _unextended_ constant. We've already checked that the
unextended constant has no more than HOST_BITS_PER_WIDE_INT bits, so the
length must be 1.
I think this was my fault, sorry.
Tested on x86_64-linux-gnu and aarch64-linux-gnu.
gcc/
* tree.c (cst_and_fits_in_hwi): Simplify.
From-SVN: r235722
As Richard says, we ought to have a convenient way of converting
an INTEGER_CST to a wide_int of a particular precision without
having to extract the sign of the INTEGER_CST's type each time.
This patch adds a wi::to_wide helper for that, alongside the
existing wi::to_offset and wi::to_widest.
Tested on x86_64-linux-gnu and aarch64-linux-gnu.
gcc/
* tree.h (wi::to_wide): New function.
* expr.c (expand_expr_real_1): Use wi::to_wide.
* fold-const.c (int_const_binop_1): Likewise.
(extract_muldiv_1): Likewise.
gcc/c-family/
* c-common.c (shorten_compare): Use wi::to_wide.
From-SVN: r235721
Following on from the comparison patch, I think it makes sense to
support << and >> for offset_int (int128_t) and widest_int (intNNN_t),
with >> being arithmetic shift. It doesn't make sense to use
logical right shift on a potentially negative offset_int, since
the precision of 128 bits has no meaning on the target.
Tested on x86_64-linux-gnu and aarch64-linux-gnu.
gcc/
* wide-int.h: Update offset_int and widest_int documentation.
(WI_SIGNED_SHIFT_RESULT): New macro.
(wi::binary_shift): Define signed_shift_result_type for
shifts on offset_int- and widest_int-like types.
(generic_wide_int): Support <<= and >>= if << and >> are supported.
* tree.h (int_bit_position): Use shift operators instead of wi::
shifts.
* alias.c (adjust_offset_for_component_ref): Likewise.
* expr.c (get_inner_reference): Likewise.
* fold-const.c (fold_comparison): Likewise.
* gimple-fold.c (fold_nonarray_ctor_reference): Likewise.
* gimple-ssa-strength-reduction.c (restructure_reference): Likewise.
* tree-dfa.c (get_ref_base_and_extent): Likewise.
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Likewise.
(stmt_kills_ref_p): Likewise.
* tree-ssa-ccp.c (bit_value_binop_1): Likewise.
* tree-ssa-math-opts.c (find_bswap_or_nop_load): Likewise.
* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
(ao_ref_init_from_vn_reference): Likewise.
gcc/cp/
* init.c (build_new_1): Use shift operators instead of wi:: shifts.
From-SVN: r235720
offset_int and widest_int are supposed to be at least one bit wider
than all the values they need to represent, with the extra bits
being signs. Thus offset_int is effectively int128_t and widest_int
is effectively intNNN_t, for target-dependent NNN.
Because the types are signed, there's not really any need to specify
a sign for operations like comparison. I think things would be clearer
if we supported <, <=, > and >= for them (but not for wide_int, which
doesn't have a sign).
Tested on x86_64-linux-gnu and aarch64-linux-gnu.
gcc/
* wide-int.h: Update offset_int and widest_int documentation.
(WI_SIGNED_BINARY_PREDICATE_RESULT): New macro.
(wi::binary_traits): Allow ordered comparisons between offset_int and
offset_int, between widest_int and widest_int, and between either
of these types and basic C types.
(operator <, <=, >, >=): Define for the same combinations.
* tree.h (tree_int_cst_lt): Use comparison operators instead
of wi:: comparisons.
(tree_int_cst_le): Likewise.
* gimple-fold.c (fold_array_ctor_reference): Likewise.
(fold_nonarray_ctor_reference): Likewise.
* gimple-ssa-strength-reduction.c (record_increment): Likewise.
* tree-affine.c (aff_comb_cannot_overlap_p): Likewise.
* tree-parloops.c (try_transform_to_exit_first_loop_alt): Likewise.
* tree-sra.c (completely_scalarize): Likewise.
* tree-ssa-alias.c (stmt_kills_ref_p): Likewise.
* tree-ssa-reassoc.c (extract_bit_test_mask): Likewise.
* tree-vrp.c (extract_range_from_binary_expr_1): Likewise.
(check_for_binary_op_overflow): Likewise.
(search_for_addr_array): Likewise.
* ubsan.c (ubsan_expand_objsize_ifn): Likewise.
From-SVN: r235719
2016-05-02 Bob Duff <duff@adacore.com>
* sem_ch10.adb (Analyze_Compilation_Unit): Preserve
treeishness. Previous version had Context_Items shared between
the spec and body.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_aggr.adb (Resolve_Aggr_Expression): For both array and
record cases, apply predicate check on component for expression
only if expression has been analyzed already. For expressions
that need to be duplicated when they cover multiple components,
resolution and predicate checking take place later.
2016-05-02 Olivier Hainque <hainque@adacore.com>
* a-direct.adb (Delete_Tree): Use full names to designate subdirs
and files therein, instead of local names after a change of
current directory.
From-SVN: r235717
2016-05-02 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch4.adb (Find_Indexing_Operations): Use the underlying type
of the container base type in case the container is a subtype.
* sem_ch5.adb (Analyze_Iterator_Specification): Ensure that
the selector has an entity when checking for a component of a
mutable object.
2016-05-02 Arnaud Charlet <charlet@adacore.com>
Remove dead code.
* opt.ads (Latest_Ada_Only): New flag.
* sem_prag.adb, par-prag.adb: Ignore pragma Ada_xx under this flag.
* usage.adb, switch-c.adb: Disable support for -gnatxx under this flag.
* einfo.ads (Has_Predicates, Predicate_Function):
Clarify that Has_Predicates does not imply that Predicate_Function
will return a non-empty entity.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_res.adb (Resolve_Qualified_Expression): Generate a predicate
check if type requires it.
* checks.adb (Apply_Predicate_Check): Disable checks in the
object declaration created for an expression with side-effects
that requires a predicate check to prevent infinite recursion
during expansion.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Process_Formals): Check properly the type of a
formal to determine whether a given convention applies to it.
2016-05-02 Doug Rupp <rupp@adacore.com>
* tracebak.c: Add incantations for arm-vxworks[67] traceback.
2016-05-02 Thomas Quinot <quinot@adacore.com>
* freeze.adb (Check_Component_Storage_Order): Make it a warning, not an
error, to have a component with implicit SSO within a composite type
that has explicit SSO.
2016-05-02 Bob Duff <duff@adacore.com>
* s-stposu.adb (Allocate_Any_Controlled): Don't lock/unlock twice.
2016-05-02 Ed Schonberg <schonberg@adacore.com>
* repinfo.adb (List_Entities): Make procedure recursive, to
provide representation information for subprograms declared
within subprogram bodies.
From-SVN: r235713