summaryrefslogtreecommitdiff
path: root/lang/gpc/files/patch-am
diff options
context:
space:
mode:
authorKris Kennaway <kris@FreeBSD.org>2003-05-06 03:49:05 +0000
committerKris Kennaway <kris@FreeBSD.org>2003-05-06 03:49:05 +0000
commit28e7382123cbc7ef132190c6b3c29b101db38cfc (patch)
treea9d50288bd0e48228abd908a6f7bd8be06c4e7bd /lang/gpc/files/patch-am
parentPR: 51521 (diff)
As announced on 27 March 2003 in <20030328052350.GA18971@rot13.obsecurity.org>,
remove these ports that have been broken for >4 months (in many cases much longer) with no sign of a fix.
Notes
Notes: svn path=/head/; revision=80201
Diffstat (limited to 'lang/gpc/files/patch-am')
-rw-r--r--lang/gpc/files/patch-am233
1 files changed, 0 insertions, 233 deletions
diff --git a/lang/gpc/files/patch-am b/lang/gpc/files/patch-am
deleted file mode 100644
index b6553c3474d1..000000000000
--- a/lang/gpc/files/patch-am
+++ /dev/null
@@ -1,233 +0,0 @@
-*** stor-layout.c.orig Sat Nov 8 16:12:07 1997
---- stor-layout.c Thu Mar 23 15:48:05 2000
-***************
-*** 65,70 ****
---- 65,79 ----
-
- int immediate_size_expand;
-
-+ #ifdef GPC
-+
-+ /* Nonzero means that the size of a type may vary
-+ within one function context. */
-+
-+ int size_volatile = 0;
-+
-+ #endif /* GPC */
-+
- tree
- get_pending_sizes ()
- {
-***************
-*** 102,109 ****
- || global_bindings_p () < 0 || contains_placeholder_p (size))
- return size;
-
-! size = save_expr (size);
-!
- if (global_bindings_p ())
- {
- if (TREE_CONSTANT (size))
---- 111,123 ----
- || global_bindings_p () < 0 || contains_placeholder_p (size))
- return size;
-
-! #ifdef GPC
-! if (! size_volatile)
-! size = save_expr (size);
-! #else /* not GPC */
-! size = save_expr (size);
-! #endif /* not GPC */
-!
- if (global_bindings_p ())
- {
- if (TREE_CONSTANT (size))
-***************
-*** 119,125 ****
---- 133,143 ----
- Also, we would like to pass const0_rtx here, but don't have it. */
- expand_expr (size, expand_expr (integer_zero_node, NULL_PTR, VOIDmode, 0),
- VOIDmode, 0);
-+ #ifdef GPC
-+ else if (! size_volatile)
-+ #else /* not GPC */
- else
-+ #endif /* not GPC */
- pending_sizes = tree_cons (NULL_TREE, size, pending_sizes);
-
- return size;
-***************
-*** 953,958 ****
---- 971,1117 ----
- }
- break;
-
-+ #ifdef GPC
-+ /* Unfortunately the code for SET_TYPE in standard gcc 2.6.3 will
-+ not work for pascal sets. The problem is that the code aligns
-+ the set so that it always starts from the first bit of the
-+ aligned set. (i.e it shifts bit 0 to the firt bit of the
-+ aligned first word of the set). This is ok, if the set low
-+ bound is zero (as in powersets) or any multiple of
-+ "set_alignment". But this is not always the case in Pascal.
-+
-+ It causes problems when using set types with set constructors
-+ in an expression, possibly the expression having ranges whose
-+ both bounds are variable.
-+
-+ The method used in GPC is to adjust the sets so that the bits
-+ are never shifted to the beginning of the aligned entity (in
-+ gpc, it is a word), but rather more room is allocated in
-+ front and behind of the actual set, so that both bounds are aligned
-+ and then the size used by the set is counted.
-+
-+ The code below works as the original code for the special
-+ cases when set low bound is 0 or a multiple of alignement,
-+ but it also works for GPC.
-+
-+ Also, the code in the case when the bounds are variable
-+ should work, and the algorithm is the same as in the
-+ constant case, but the calculation is done in tree nodes
-+ (so it can be folded wherever possible).
-+
-+ In this case, the original code called abort(). */
-+
-+ #ifndef SET_WORD_SIZE
-+ #define SET_WORD_SIZE BITS_PER_WORD
-+ #endif
-+
-+ case SET_TYPE:
-+ if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-+ && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST)
-+ {
-+ int alignment = set_alignment ? set_alignment : SET_WORD_SIZE;
-+ int aligned_size_in_bits;
-+ int low_bound, high_bound;
-+
-+ int l_index = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
-+ int h_index = TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
-+
-+ if (l_index == 0 && h_index == -1)
-+ {
-+ /* Special empty set node */
-+ TYPE_SIZE (type) = size_zero_node;
-+ TYPE_MODE (type) = VOIDmode;
-+ TYPE_ALIGN (type) = 1;
-+ break;
-+ }
-+
-+ /* Calculate an aligned low bound from the set low bound */
-+ low_bound = l_index - (l_index % alignment);
-+
-+ /* Calculate an aligned high bound from the set high bound */
-+ high_bound = (alignment-1) + (alignment * (h_index / alignment));
-+
-+ /* This is the aligned size (both low and high aligned) */
-+ aligned_size_in_bits = high_bound - low_bound + 1;
-+
-+ if (aligned_size_in_bits > alignment)
-+ TYPE_MODE (type) = BLKmode;
-+ else
-+ TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
-+
-+ TYPE_SIZE (type) = size_int (aligned_size_in_bits);
-+ TYPE_ALIGN (type) = alignment;
-+ TYPE_PRECISION (type) = h_index - l_index + 1;
-+ }
-+ else
-+ {
-+ tree domain = TYPE_DOMAIN (type);
-+ int alignment = set_alignment ? set_alignment : SET_WORD_SIZE;
-+ tree align = build_int_2 (alignment, 0);
-+
-+ /* @@@@@ Negative bounds do not work here.
-+
-+ @@@ Although this should work, variable bound sets are
-+ not supported in setop.c. */
-+
-+ extern tree build_binary_op (enum tree_code, tree, tree, int);
-+
-+ /* low_bound = low_index - (low_index % align); */
-+ tree low_bound =
-+ build_binary_op (MINUS_EXPR,
-+ convert (integer_type_node,
-+ TYPE_MIN_VALUE (domain)),
-+ build_binary_op (TRUNC_MOD_EXPR,
-+ convert (integer_type_node,
-+ TYPE_MIN_VALUE (domain)),
-+ align,
-+ 0),
-+ 0);
-+
-+ /* Upper bit number. Avoid overflow. */
-+ /* upper_bound = (align-1) + (align * (high_index / align)); */
-+ tree high_bound =
-+ build_binary_op
-+ (PLUS_EXPR,
-+ build_int_2 (alignment - 1, 0),
-+ build_binary_op (MULT_EXPR,
-+ align,
-+ build_binary_op (TRUNC_DIV_EXPR,
-+ convert (integer_type_node,
-+ TYPE_MAX_VALUE (domain)),
-+ align,
-+ 0),
-+ 0),
-+ 0);
-+
-+ /* Allocated TYPE_SIZE in bits, including possible aligning */
-+ /* set_size_in_bits = high_bound - low_bound + 1; */
-+ TYPE_SIZE (type) =
-+ build_binary_op (PLUS_EXPR,
-+ integer_one_node,
-+ build_binary_op (MINUS_EXPR,
-+ high_bound,
-+ low_bound,
-+ 0),
-+ 0);
-+
-+ TYPE_ALIGN (type) = alignment;
-+
-+ /* Find out if the set fits in word_mode. If not, use BLKmode.
-+ @@@ But it requires knowing the size, which is variable
-+ in this case ... */
-+
-+ if (TYPE_SIZE (type)
-+ && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-+ && TREE_INT_CST_LOW (TYPE_SIZE (type)) <= alignment)
-+ TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
-+ else
-+ TYPE_MODE (type) = BLKmode;
-+ }
-+ break;
-+ #else /* not GPC */
-+
-+
- case SET_TYPE: /* Used by Chill and Pascal. */
- if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
- || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
-***************
-*** 977,982 ****
---- 1136,1142 ----
- TYPE_PRECISION (type) = size_in_bits;
- }
- break;
-+ #endif /* not GPC */
-
- case FILE_TYPE:
- /* The size may vary in different languages, so the language front end
-***************
-*** 1152,1157 ****
---- 1312,1323 ----
- >> (HOST_BITS_PER_WIDE_INT
- - (precision - HOST_BITS_PER_WIDE_INT)))
- : 0);
-+ #ifdef GPC
-+ /* Not only for Pascal, but other languages don't seem to care
-+ about this. */
-+ TREE_UNSIGNED (TYPE_MIN_VALUE (type)) = 1;
-+ TREE_UNSIGNED (TYPE_MAX_VALUE (type)) = 1;
-+ #endif /* GPC */
- TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
- TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
-