PR# 17004 Compiler warning when using obsolete "is" in a feature declaration is not verbose enough

Problem Report Summary
Submitter: mpilman
Category: Compiler
Priority: Medium
Date: 2010/07/29
Class: Feature Request
Severity: Serious
Number: 17004
Release: 6.6.8.2636 GPL Edition - macosx-x86-64
Confidential: No
Status: Open
Responsible:
Environment: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; de-de) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
Synopsis: Compiler warning when using obsolete "is" in a feature declaration is not verbose enough

Description
Since I didn't use Eiffel for quite a long time, I am used to declare constant attributes with the "is" keyword. But this keyword is now deprecated. When I compile a file which uses it (for example the one class in the "To Reproduce" part) I get warnings like this from the compiler:

-------------------------------------------------------------------------------

Obsolete syntax used at line 18 in class FUNCTION_ATTRIBUTES
Usage of `is' has now been deprecated.


    SIGNEXT: INTEGER is 2
---------------------^
            -- This indicates to the code generator that

-------------------------------------------------------------------------------

The problem with this warning is:it is unnecessary hard to figure out, what I should do instead. I had to open the ECMA standard and read some parts of the grammar to get it.

For convenience it would be much much better, to have this information inside of the warning. I would suggest something like: 

Obsolete syntax used at line 18 in class FUNCTION_ATTRIBUTES
Usage of `is' has now been deprecated. Use "=" instead or see ECMA Standard 8.5.4
To Reproduce
note
	description: "This class defines all function attributes defines by llvm"
	author: "Markus Pilman"
	date: "07.29.2010"

class
	FUNCTION_ATTRIBUTES

feature -- Attributes

	ZEROTEXT: INTEGER is 1
			-- This indicates to the code generator
			-- that the parameter or return value should
			-- be zero-extended to a 32-bit value by the
			-- caller (for a parameter) or the callee
			-- (for a return value).

	SIGNEXT: INTEGER is 2
			-- This indicates to the code generator that
			-- the parameter or return value should be
			-- sign-extended to a 32-bit value by the caller
			-- (for a parameter) or the callee (for a return
			-- value).

	INREG: INTEGER is 3
			-- This indicates that this parameter or return
			-- value should be treated in a special target-
			-- dependent fashion during while emitting code
			-- for a function call or return (usually, by
			-- putting it in a register as opposed to memory,
			-- though some targets use it to distinguish between
			-- two different kinds of registers). Use of this
			-- attribute is target-specific.

	BYVAL: INTEGER is 4
			-- This indicates that the pointer parameter should
			-- really be passed by value to the function. The
			-- attribute implies that a hidden copy of the pointee
			-- is made between the caller and the callee, so
			-- the callee is unable to modify the value in the
			-- callee. This attribute is only valid on LLVM
			-- pointer arguments. It is generally used to pass
			-- structs and arrays by value, but is also valid
			-- on pointers to scalars. The copy is considered
			-- to belong to the caller not the callee (for exampl
			-- , readonly functions should not write to byval
			-- parameters). This is not a valid attribute for
			-- return values. The byval attribute also supports
			-- specifying an alignment with the align attribut
			-- . This has a target-specific effect on the code
			-- generator that usually indicates a desired alignment
			-- for the synthesized stack slot.

end
Problem Report Interactions