This is the mail archive of the gcc-patches@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] |
Tested on i686-linux, committed on trunk. Various fixes in the handling and generation of run-time checks: Range checks are not applied to a discriminant that appears by itself in range constraint: the check will be applied when an object of the type is created, within the corresponding initialization procedure. This rule was not being applied to synchronized types, leading to out-of-scope reference to a discriminant used to constrain a task entry family. gnat.dg/discr_range_check.adb should compile quietly. The code that inserts alignment checks on the expression in address clauses used to copy the expression into the checking code, resulting in unwanted side effects if e.g. the expression contains function calls. This patch removes the side effects from the expression before applying the alignment check. gnat.dg/align_check.adb must compile and execute quietly. This patch also corrects some cases where dynamic range checks were still generated even though index or range checks were suppressed for some relevant entities. In particular there were cases of range checks not suppressed for subscript checking when index checks had been suppressed for the array object or its type. gnat.dg/range_check.adb used to raise Constraint_Error, it now executes quietly. Note: theoretically the above test program is erroneous and could blow up. In practice it is unlikely to do so. This set of patches also provide a number of enhancements in front end handling of address clauses as follows: - Removal of many cases of unneeded dynamic alignment checks - More warnings at compile time of possible wrong alignments - Warnings on overlaying a smaller variable with a larger one - New check Alignment_Check to suppress these warnings Finally, this patch improves validity checking in two ways. First it removes some silly checks on the result of membership tests. Second it ensures that operands in ranges are validity checked (including the cases of loop bounds, array bounds, and subtype bounds). These are now included as operands (they are not technically operands, but informally .. acts as an operator for this kind of purpose). A related clean up in this patch is to introduce a new subtype in sinfo.ads N_Membership_Test and use it where appropriate. 2006-10-31 Robert Dewar <dewar@adacore.com> Ed Schonberg <schonberg@adacore.com> * treepr.adb: Use new subtype N_Membership_Test * checks.ads, checks.adb: Add definition for Validity_Check (Range_Or_Validity_Checks_Suppressed): New function (Ensure_Valid): Test Validity_Check suppressed (Insert_Valid_Check): Test Validity_Check suppressed (Insert_Valid_Check): Preserve Do_Range_Check flag (Validity_Check_Range): New procedure (Expr_Known_Valid): Result of membership test is always valid (Selected_Range_Checks): Range checks cannot be applied to discriminants by themselves. Disabling those checks must also be done for task types, where discriminants may be used for the bounds of entry families. (Apply_Address_Clause_Check): Remove side-effects if address expression is non-static and is not the name of a declared constant. (Null_Exclusion_Static_Checks): Extend to handle Function_Specification. Code cleanup and new error messages. (Enable_Range_Check): Test for some cases of suppressed checks (Generate_Index_Checks): Suppress index checks if index checks are suppressed for array object or array type. (Apply_Selected_Length_Checks): Give warning for compile-time detected length check failure, even if checks are off. (Ensure_Valid): Do not generate a check on an indexed component whose prefix is a packed boolean array. * checks.adb: (Alignment_Checks_Suppressed): New function (Apply_Address_Clause_Check): New procedure, this is a completely rewritten replacement for Apply_Alignment_Check (Get_E_Length/Get_E_First_Or_Last): Add missing barrier to ensure that we request a discriminal value only in case of discriminants. (Apply_Discriminant_Check): For Ada_05, only call Get_Actual_Subtype for assignments where the target subtype is unconstrained and the target object is a parameter or dereference (other aliased cases are known to be unconstrained).
Attachment:
difs
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |