PR# 19441 [er] Typing issue with empty manifest array
Problem Report Summary
Submitter: axarosenberg
Category: Compiler
Priority: High
Date: 2018/05/31
Class: Bug
Severity: Critical
Number: 19441
Release: 18.01
Confidential: No
Status: Open
Responsible:
Environment: win
Synopsis: [er] Typing issue with empty manifest array
Description
When I write code like that:
~~~~
local
a: ARRAY [INTEGER]
do
a := <<{INTEGER_8} 1>>
~~~~
the compiler will create an ARRAY [INTEGER] (not an ARRAY [INTEGER_8] as per the new types for manifest arrays) so that existing code still works.
However, when I write:
~~~~
local
a: ARRAY [INTEGER]
do
a := <<>>
~~~~
the compiler does not create an ARRAY [INTEGER] but an ARRAY [NONE]. This is plain wrong because ARRAY [NONE] does not conform to ARRAY [INTEGER]. When I write:
~~~~
local
a: ARRAY [INTEGER]
n: ARRAY [NONE]
do
create n.make_empty
a := n
~~~~
I get a compilation error as expected. So ARRAY [NONE} definitely does not conform to ARRAY [INTEGER]. But here:
~~~~
local
a: ARRAY [INTEGER]
do
a := <<>>
if not attached {ARRAY [INTEGER]} a then
print ("Dynamic type does not conform to static type")
end
~~~~
the message gets printed!
The solutions are either to let the compiler create an empty ARRAY [INTEGER] instead of an ARRAY [NONE] (preferred solution), or emit a compilation error.
--
Eric Bezault
To Reproduce
Problem Report Interactions