Re: "Ada Gems": Constructor functions




Yes, you did find a GNAT BUG!

To find the line numbers and errors try

gnat1 t.adb -gnatl 2>t.lst
gnat1 test_t.adb -gnatl 2>test_t.lst

But to make a report to Adacore:
First compile using

gnatmake test_t.adb 1>1 2>2

-- Note: File '2' should have the error info that Adacore is
-- asking about.


Then send Adacore the following list of files

attach file => t.ads

attach file => t.adb

attach file => test_t.adb

attach file => 1

-- Note: Send File 1 only if it has any special info else skip
--

attach file => 2


I use Ada 95 to compile and did not receive the BUG ERROR
only a few normal compiling errors.

Now, for a compilable corrected version in GNAT Ada 95.
Did not use GNAT Ada 2005 compiler.

changes to code:
--- removed => denote the line is commented out
--- Added => denote the line is added to source
other comments added for info only


-----------
-- t.ads --
-----------
with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;

package T is
-- type Object (<>) is tagged limited private; --------- removed
-------- because can not initial
-------- a limited type in Ada 95

type Object (<>) is private; --------- Added

function Create_Object (Name : in String) return Object;
function Construct return Object;
function Name (This : in Object) return String;

private ------------------------------ Added
-- type Object is tagged limited -------- removed
-------- because can not initial
-------- a limited type in Ada 95

type Object is ------------------------ Added
record
Name : Unbounded_String;
end record;
end T;

-----------
-- t.adb --
-----------
package body T is
function Create_Object (Name : in String) return Object is
begin --------- Added
return (Name => To_Unbounded_String (Name));
end Create_Object;

function Construct return Object is
begin --------- Added
return Create_Object (Name => "Object without a name!");
end Construct;

function Name (This : in Object) return String is
begin
return To_String (This.Name);
end Name;

---------------------------------------- removed
-- ----- because it conflicts
-- ----- with t.ads version
-- type Object is tagged limited
-- record
-- Name : Unbounded_String;
-- end record;
end T;

----------------
-- test_t.ads --
----------------
with T;
use T; ------ Added
------ could of added "T." to Construct instead

procedure Test_T is
Some_Object : constant T.Object := Construct;
begin
null;
end Test_T;




In <1189015827.384331.17490@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>, =?iso-8859-2?q?Tomek_Wa=B3kuski?= <tomek.walkuski@xxxxxxxxx> writes:
Hi,

motivated by this article posted at adacore.com I have written some
code:

---------
t.ads
---------
with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;

package T is
type Object (<>) is tagged limited private;

function Create_Object (Name : in String) return Object;
function Construct return Object;
function Name (This : in Object) return String;

type Object is tagged limited
record
Name : Unbounded_String;
end record;
end T;


---------
t.adb
---------
package body T is
function Create_Object (Name : in String) return Object is
return (Name => To_Unbounded_String (Name));
end Create_Object;

function Construct return Object is
return Create_Object (Name => "Object without a name!");
end Construct;

function Name (This : in Object) return String is
begin
return To_String (This.Name);
end Name;

type Object is tagged limited
record
Name : Unbounded_String;
end record;
end T;


---------
test_t.adb
---------
with T;

procedure Test_T is
Some_Object : constant T.Object := Construct;
begin
null;
end Test_T;

------------------------------
.... and tried to compile it.

(Gentoo Linux, gnat-gpl-4.1.3.2007)

Compiler said:
"
+================GNAT BUG DETECTED==================+
| GPL 2007 (20070402-41) (i686-pc-linux-gnu) Assert_Failure namet.adb:
687 |
(...)
compilation abandoned
gnatmake: "test_t.adb" compilation error
"

Is it REALLY a compiler bug? Or am I only dumb? :) Maybe I'm doing
something, somewhere wrong?


.



Relevant Pages

  • Re: PRODUCT calculation in queries
    ... The Microsoft Jet database engine could not find the input table or query ... After pasting it into the code window, choose Compile on the Debug menu. ... Function Product(strField As String, strTable As String, _ ... Dim dblResult As Double ...
    (microsoft.public.access.queries)
  • Re: Help a beginner - simple lowercase to uppercase and so on function
    ... can understand everything but it should take shape with more practice ... it compiles and returns uppercase letters ... in this string!" ... to compile on both. ...
    (comp.lang.c)
  • Re: Compile time string literal substitution to external data file
    ... and these string literals may expose sensitive information ... > I want to use the compile time macros for file name, line number, and ... I'd put a macro and a function like: ...
    (microsoft.public.vc.language)
  • Re: Error when WebMethod returns a jagged array
    ... compiled the project, and the compile failed. ... assign string[] to a string, ... and see that their code generates Collections instead of jagged arrays. ...
    (microsoft.public.dotnet.framework.aspnet.webservices)