diff --git a/TestSuite/errors/err0293.pas b/TestSuite/errors/err0293.pas new file mode 100644 index 000000000..1c35912b4 --- /dev/null +++ b/TestSuite/errors/err0293.pas @@ -0,0 +1,6 @@ +type + T1 = array [0..integer.MaxValue] of byte; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/errors/err0294.pas b/TestSuite/errors/err0294.pas new file mode 100644 index 000000000..1e2618cd7 --- /dev/null +++ b/TestSuite/errors/err0294.pas @@ -0,0 +1,6 @@ +type + T1 = array [integer] of byte; + +begin + +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index dc4967137..cc850531f 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -13867,10 +13867,17 @@ namespace PascalABCCompiler.TreeConverter if (tn.base_type == SystemLibrary.SystemLibrary.uint_type || tn.base_type == SystemLibrary.SystemLibrary.int64_type || tn.base_type == SystemLibrary.SystemLibrary.uint64_type) //ordinal_type_interface oti = tn.get_internal_interface(internal_interface_kind.ordinal_interface) as ordinal_type_interface; - AddError(get_location(td), "RANGE_TOO_LARGE"); + AddError(get_location(td), "RANGE_TOO_LARGE"); + if (tn.base_type == SystemLibrary.SystemLibrary.integer_type) + { + Int64 low = ((tn as SemanticTree.ICommonTypeNode).lower_value as int_const_node).constant_value; + Int64 high = ((tn as SemanticTree.ICommonTypeNode).upper_value as int_const_node).constant_value; + if (high-low >= int.MaxValue) + AddError(get_location(td), "RANGE_TOO_LARGE"); + } } else if (tn == SystemLibrary.SystemLibrary.uint_type || tn == SystemLibrary.SystemLibrary.int64_type || - tn == SystemLibrary.SystemLibrary.uint64_type) + tn == SystemLibrary.SystemLibrary.uint64_type || tn == SystemLibrary.SystemLibrary.integer_type) AddError(get_location(td), "RANGE_TOO_LARGE"); ind_types.AddElement(tn); }