]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Remove discriminant checks in gigi
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 21 May 2021 09:25:53 +0000 (11:25 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Fri, 21 May 2021 09:27:28 +0000 (11:27 +0200)
gcc/ada/
* gcc-interface/utils.c (gnat_pushdecl): Fix typo in comment.
* gcc-interface/utils2.c (build_simple_component_ref): Build NULL_EXPR
if the offset of the field has overflowed.
(build_component_ref): Add gigi checking assertion that the reference
has been built and replace the discriminant check by a Program_Error.

gcc/ada/gcc-interface/utils.c
gcc/ada/gcc-interface/utils2.c

index 8d1040b2ae7182f9aab190b559c19a140baf65c4..1786fbf81867569037c29a47230d3083a005cf23 100644 (file)
@@ -784,7 +784,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
   tree context = NULL_TREE;
   struct deferred_decl_context_node *deferred_decl_context = NULL;
 
-  /* If explicitely asked to make DECL global or if it's an imported nested
+  /* If explicitly asked to make DECL global or if it's an imported nested
      object, short-circuit the regular Scope-based context computation.  */
   if (!((TREE_PUBLIC (decl) && DECL_EXTERNAL (decl)) || force_global == 1))
     {
index acb308c740070f8497a73de44d7012c8ddaac1ae..e8ed4b292a59e97b651986ec89f7490832ab2153 100644 (file)
@@ -2071,7 +2071,9 @@ build_simple_component_ref (tree record, tree field, bool no_fold)
      need to warn since this will be done on trying to declare the object.  */
   if (TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST
       && TREE_OVERFLOW (DECL_FIELD_OFFSET (field)))
-    return NULL_TREE;
+    return build1 (NULL_EXPR, TREE_TYPE (field),
+                  build_call_raise (SE_Object_Too_Large, Empty,
+                                    N_Raise_Storage_Error));
 
   ref = build3 (COMPONENT_REF, TREE_TYPE (field), record, field, NULL_TREE);
 
@@ -2105,7 +2107,7 @@ build_simple_component_ref (tree record, tree field, bool no_fold)
   return fold (ref);
 }
 
-/* Likewise, but return NULL_EXPR and generate a Constraint_Error if the
+/* Likewise, but return NULL_EXPR and generate a Program_Error if the
    field is not found in the record.  */
 
 tree
@@ -2115,10 +2117,13 @@ build_component_ref (tree record, tree field, bool no_fold)
   if (ref)
     return ref;
 
-  /* Assume this is an invalid user field so raise Constraint_Error.  */
+  /* The missing field should have been detected in the front-end.  */
+  gigi_checking_assert (false);
+
+  /* Assume this is an invalid user field so raise Program_Error.  */
   return build1 (NULL_EXPR, TREE_TYPE (field),
-                build_call_raise (CE_Discriminant_Check_Failed, Empty,
-                                  N_Raise_Constraint_Error));
+                build_call_raise (PE_Explicit_Raise, Empty,
+                                  N_Raise_Program_Error));
 }
 
 /* Helper for build_call_alloc_dealloc, with arguments to be interpreted