aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--canon.adb2
-rw-r--r--disp_vhdl.adb5
-rw-r--r--doc/ghdl.texi6
-rw-r--r--evaluation.adb12
-rw-r--r--evaluation.ads6
-rw-r--r--iirs.adb1
-rw-r--r--iirs.ads6
-rw-r--r--sem.adb12
-rw-r--r--sem_assocs.adb8
-rw-r--r--sem_expr.adb27
-rw-r--r--sem_expr.ads6
-rw-r--r--sem_names.adb11
-rw-r--r--sem_stmts.adb18
-rw-r--r--sem_types.adb33
-rw-r--r--translate/gcc/INSTALL2
-rw-r--r--translate/gcc/README2
-rwxr-xr-xtranslate/gcc/dist.sh2
-rw-r--r--translate/ghdldrv/ghdlmain.adb4
-rw-r--r--translate/grt/grt-processes.adb4
-rw-r--r--version.ads4
20 files changed, 101 insertions, 70 deletions
diff --git a/canon.adb b/canon.adb
index bd4859d7a..5b2df9cbf 100644
--- a/canon.adb
+++ b/canon.adb
@@ -930,7 +930,7 @@ package body Canon is
-- LRM93 9.1
-- Finally, if the concurrent signal assignment statement is not a
-- guarded assignment, and the traget of the concurrent signal
- -- assignment is not a guarded target,t hen the statement transform
+ -- assignment is not a guarded target, then the statement transform
-- is as follows:
-- signal_transform
Chain := Proc;
diff --git a/disp_vhdl.adb b/disp_vhdl.adb
index e87013674..9a9545318 100644
--- a/disp_vhdl.adb
+++ b/disp_vhdl.adb
@@ -1952,10 +1952,7 @@ package body Disp_Vhdl is
Put ("");
return;
when Iir_Kind_Selected_Name =>
- Disp_Expression (Get_Prefix (Expr));
- Put ('.');
- Disp_Expression (Get_Suffix (Expr));
- return;
+ Disp_Name (Expr);
when Iir_Kinds_Type_And_Subtype_Definition =>
Disp_Type (Expr);
diff --git a/doc/ghdl.texi b/doc/ghdl.texi
index b0a87c03d..8d0915515 100644
--- a/doc/ghdl.texi
+++ b/doc/ghdl.texi
@@ -11,12 +11,12 @@
@titlepage
@title GHDL guide
@subtitle GHDL, a VHDL compiler
-@subtitle For GHDL version 0.25 (Sokcho edition)
+@subtitle For GHDL version 0.26 (Sokcho edition)
@author Tristan Gingold
@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 2002, 2003, 2004, 2005, 2006 Tristan Gingold.
+Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007 Tristan Gingold.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
@@ -78,7 +78,7 @@ Internal overview
@top GHDL guide
GHDL, a VHDL compiler.
-Copyright @copyright{} 2002, 2003, 2004, 2005, 2006 Tristan Gingold.
+Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007 Tristan Gingold.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
diff --git a/evaluation.adb b/evaluation.adb
index 77183cce7..44d7b4f3b 100644
--- a/evaluation.adb
+++ b/evaluation.adb
@@ -1956,13 +1956,16 @@ package body Evaluation is
end if;
end Eval_Check_Bound;
- function Eval_Is_Range_In_Bound (A_Range : Iir; Sub_Type : Iir)
+ function Eval_Is_Range_In_Bound
+ (A_Range : Iir; Sub_Type : Iir; Any_Dir : Boolean)
return Boolean
is
Type_Range : Iir;
begin
Type_Range := Get_Range_Constraint (Sub_Type);
- if Get_Direction (Type_Range) /= Get_Direction (A_Range) then
+ if not Any_Dir
+ and then Get_Direction (Type_Range) /= Get_Direction (A_Range)
+ then
return True;
end if;
@@ -2019,10 +2022,11 @@ package body Evaluation is
-- and then Eval_Is_In_Bound (Get_Right_Limit (A_Range), Sub_Type);
end Eval_Is_Range_In_Bound;
- procedure Eval_Check_Range (A_Range : Iir; Sub_Type : Iir)
+ procedure Eval_Check_Range
+ (A_Range : Iir; Sub_Type : Iir; Any_Dir : Boolean)
is
begin
- if not Eval_Is_Range_In_Bound (A_Range, Sub_Type) then
+ if not Eval_Is_Range_In_Bound (A_Range, Sub_Type, Any_Dir) then
Error_Msg_Sem ("static range violates bounds", A_Range);
end if;
end Eval_Check_Range;
diff --git a/evaluation.ads b/evaluation.ads
index a36286372..a9ae748f0 100644
--- a/evaluation.ads
+++ b/evaluation.ads
@@ -47,11 +47,13 @@ package Evaluation is
procedure Eval_Check_Bound (Expr : Iir; Sub_Type : Iir);
-- Return TRUE if range expression A_RANGE is not included in SUB_TYPE.
- function Eval_Is_Range_In_Bound (A_Range : Iir; Sub_Type : Iir)
+ function Eval_Is_Range_In_Bound
+ (A_Range : Iir; Sub_Type : Iir; Any_Dir : Boolean)
return Boolean;
-- Emit an error if A_RANGE is not included in SUB_TYPE.
- procedure Eval_Check_Range (A_Range : Iir; Sub_Type : Iir);
+ procedure Eval_Check_Range (A_Range : Iir; Sub_Type : Iir;
+ Any_Dir : Boolean);
-- Same as Eval_Expr, but a range check with SUB_TYPE is performed after
-- computation.
diff --git a/iirs.adb b/iirs.adb
index 51f726669..0cb9b6e21 100644
--- a/iirs.adb
+++ b/iirs.adb
@@ -2420,6 +2420,7 @@ package body Iirs is
begin
case Get_Kind (Target) is
when Iir_Kind_Attribute_Value
+ | Iir_Kind_Operator_Symbol
| Iir_Kind_Enumeration_Literal
| Iir_Kind_Object_Alias_Declaration
| Iir_Kind_File_Declaration
diff --git a/iirs.ads b/iirs.ads
index 456c973ea..9e52b5a61 100644
--- a/iirs.ads
+++ b/iirs.ads
@@ -2225,10 +2225,10 @@ package Iirs is
--
-- Get/Set_Prefix (Field3)
--
- -- Get/Set_Base_Name (Field5)
- --
-- Get/Set_Named_Entity (Field4)
--
+ -- Get/Set_Base_Name (Field5)
+ --
-- Get/Set_Expr_Staticness (State1)
-- Iir_Kind_Operator_Symbol (Short)
@@ -2236,6 +2236,8 @@ package Iirs is
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Named_Entity (Field4)
+ --
+ -- Get/Set_Base_Name (Field5)
-- Iir_Kind_Indexed_Name (Short)
-- Select the element designed with the INDEX_LIST from array PREFIX.
diff --git a/sem.adb b/sem.adb
index a55d9e9df..9bcaa6859 100644
--- a/sem.adb
+++ b/sem.adb
@@ -1224,7 +1224,14 @@ package body Sem is
| Iir_Kind_Ascending_Type_Attribute =>
return Are_Trees_Equal (Get_Prefix (Left), Get_Prefix (Right));
- when Iir_Kind_String_Literal =>
+ when Iir_Kind_String_Literal
+ | Iir_Kind_Bit_String_Literal =>
+ if Get_Kind (Left) = Iir_Kind_Bit_String_Literal
+ and then Get_Bit_String_Base (Left)
+ /= Get_Bit_String_Base (Right)
+ then
+ return False;
+ end if;
declare
use Str_Table;
Len : Nat32;
@@ -1265,7 +1272,8 @@ package body Sem is
return True;
end;
- when Iir_Kind_Choice_By_None =>
+ when Iir_Kind_Choice_By_None
+ | Iir_Kind_Choice_By_Others =>
return Are_Trees_Equal (Get_Associated (Left),
Get_Associated (Right));
when Iir_Kind_Choice_By_Name =>
diff --git a/sem_assocs.adb b/sem_assocs.adb
index 7b96eb603..859226ee3 100644
--- a/sem_assocs.adb
+++ b/sem_assocs.adb
@@ -1249,6 +1249,14 @@ package body Sem_Assocs is
Match := False;
return;
end if;
+ -- LRM 4.3.3.2 Associations lists
+ -- It is an error if an actual of open is associated with a
+ -- formal that is associated individually.
+ if Assoc_Kind = Individual then
+ Error_Msg_Sem ("cannot associate individually with open",
+ Assoc);
+ end if;
+
Xrefs.Xref_Name (Formal);
Set_Formal (Assoc, Expr);
end if;
diff --git a/sem_expr.adb b/sem_expr.adb
index acc2daeb5..9131776ea 100644
--- a/sem_expr.adb
+++ b/sem_expr.adb
@@ -451,7 +451,8 @@ package body Sem_Expr is
-- LRM93 3.2.1.1
-- FIXME: avoid to run it on an already semantized node, be careful
-- with range_type_expr.
- function Sem_Range_Expression (Expr: Iir_Range_Expression; A_Type: Iir)
+ function Sem_Range_Expression
+ (Expr: Iir_Range_Expression; A_Type: Iir; Any_Dir : Boolean)
return Iir_Range_Expression
is
Base_Type: Iir;
@@ -523,7 +524,7 @@ package body Sem_Expr is
and then Get_Type_Staticness (Expr_Type) = Locally
and then Get_Kind (Expr_Type) in Iir_Kinds_Subtype_Definition
then
- Eval_Check_Range (Expr, Expr_Type);
+ Eval_Check_Range (Expr, Expr_Type, Any_Dir);
end if;
else
Base_Type := Get_Common_Basetype (Get_Base_Type (Get_Type (Left)),
@@ -546,14 +547,15 @@ package body Sem_Expr is
-- LRM93 3.2.1.1
-- FIXME: avoid to run it on an already semantized node, be careful
-- with range_type_expr.
- function Sem_Discrete_Range_Expression (Expr: Iir; A_Type: Iir)
+ function Sem_Discrete_Range_Expression
+ (Expr: Iir; A_Type: Iir; Any_Dir : Boolean)
return Iir
is
Res : Iir;
Res_Type : Iir;
begin
if Get_Kind (Expr) = Iir_Kind_Range_Expression then
- Res := Sem_Range_Expression (Expr, A_Type);
+ Res := Sem_Range_Expression (Expr, A_Type, Any_Dir);
if Res = Null_Iir then
return Null_Iir;
end if;
@@ -607,11 +609,12 @@ package body Sem_Expr is
case Get_Kind (Res) is
when Iir_Kinds_Type_And_Subtype_Definition =>
if Get_Type_Staticness (Res) = Locally then
- Eval_Check_Range (Get_Range_Constraint (Res), A_Type);
+ Eval_Check_Range
+ (Get_Range_Constraint (Res), A_Type, Any_Dir);
end if;
when others =>
if Get_Expr_Staticness (Res) = Locally then
- Eval_Check_Range (Res, A_Type);
+ Eval_Check_Range (Res, A_Type, Any_Dir);
end if;
end case;
end if;
@@ -622,7 +625,7 @@ package body Sem_Expr is
is
Range_Type : Iir;
begin
- Range_Type := Sem_Discrete_Range_Expression (Expr, Null_Iir);
+ Range_Type := Sem_Discrete_Range_Expression (Expr, Null_Iir, True);
if Range_Type = Null_Iir then
return Null_Iir;
end if;
@@ -1917,7 +1920,7 @@ package body Sem_Expr is
begin
Expr := Get_Expression (El);
if Get_Kind (El) = Iir_Kind_Choice_By_Range then
- Expr := Sem_Discrete_Range_Expression (Expr, Sub_Type);
+ Expr := Sem_Discrete_Range_Expression (Expr, Sub_Type, True);
elsif Is_Name (Expr) then
declare
Name : Iir;
@@ -2192,7 +2195,7 @@ package body Sem_Expr is
and then Get_Type_Staticness (A_Type) = Locally
then
if Get_Kind (Choice) = Iir_Kind_Choice_By_Range then
- Ok := Eval_Is_Range_In_Bound (Expr, A_Type);
+ Ok := Eval_Is_Range_In_Bound (Expr, A_Type, True);
else
Ok := Eval_Is_In_Bound (Expr, A_Type);
end if;
@@ -2478,6 +2481,7 @@ package body Sem_Expr is
Expr: Iir;
Has_Named : Boolean;
Rec_El : Iir_Element_Declaration;
+ Value_Staticness : Iir_Staticness;
begin
Ok := True;
Assoc_Chain := Get_Association_Choices_Chain (Aggr);
@@ -2485,6 +2489,7 @@ package body Sem_Expr is
Matches := new Iir_Array
(0 .. Natural (Get_Number_Element_Declaration (Base_Type)) - 1);
Matches.all := (others => Null_Iir);
+ Value_Staticness := Locally;
El_Type := Null_Iir;
Has_Named := False;
@@ -2556,6 +2561,8 @@ package body Sem_Expr is
Expr := Sem_Expression (Expr, El_Type);
if Expr /= Null_Iir then
Set_Associated (El, Eval_Expr_If_Static (Expr));
+ Value_Staticness := Min (Value_Staticness,
+ Get_Expr_Staticness (Expr));
else
Ok := False;
end if;
@@ -2581,6 +2588,8 @@ package body Sem_Expr is
El := Get_Chain (El);
end loop;
Free (Matches);
+ Set_Value_Staticness (Aggr, Value_Staticness);
+ Set_Expr_Staticness (Aggr, Min (Globally, Value_Staticness));
return Ok;
end Sem_Record_Aggregate;
diff --git a/sem_expr.ads b/sem_expr.ads
index 0ab384758..428e8b683 100644
--- a/sem_expr.ads
+++ b/sem_expr.ads
@@ -93,8 +93,10 @@ package Sem_Expr is
-- Semantize a procedure_call or a concurrent_procedure_call_statement.
procedure Sem_Procedure_Call (Call : Iir_Procedure_Call; Stmt : Iir);
- function Sem_Discrete_Range_Expression (Expr: Iir; A_Type: Iir)
- return Iir;
+ -- Semantize a discrete range. If ANY_DIR is true, the range can't be a
+ -- null range (slice vs subtype -- used in static evaluation).
+ function Sem_Discrete_Range_Expression
+ (Expr: Iir; A_Type: Iir; Any_Dir: Boolean) return Iir;
function Get_Discrete_Range_Staticness (Expr : Iir) return Iir_Staticness;
-- Semantize a discrete range and convert to integer if both bounds are
diff --git a/sem_names.adb b/sem_names.adb
index be727820e..c42c3dab3 100644
--- a/sem_names.adb
+++ b/sem_names.adb
@@ -606,7 +606,7 @@ package body Sem_Names is
-- The bounds of the discrete range [...] must be of the
-- type of the index of the array.
Suffix := Sem_Discrete_Range_Expression
- (Get_Suffix (Name), Index_Type);
+ (Get_Suffix (Name), Index_Type, False);
if Suffix = Null_Iir then
return;
end if;
@@ -1319,6 +1319,7 @@ package body Sem_Names is
end loop;
Res := Create_Overload_List (Res_List);
end if;
+ Set_Base_Name (Name, Res);
Set_Named_Entity (Name, Res);
end Sem_Simple_Name;
@@ -1585,7 +1586,8 @@ package body Sem_Names is
end if;
when Iir_Kind_Type_Declaration
| Iir_Kind_Subtype_Declaration
- | Iir_Kind_Concurrent_Procedure_Call_Statement =>
+ | Iir_Kind_Concurrent_Procedure_Call_Statement
+ | Iir_Kind_Component_Instantiation_Statement =>
Error_Msg_Sem
(Disp_Node (Prefix) & " cannot be selected by name", Prefix_Loc);
@@ -1679,7 +1681,7 @@ package body Sem_Names is
Set_Index_List (Res, Create_Iir_List);
Append_Element (Get_Index_List (Res), Actual);
when Iir_Kind_Slice_Name =>
- Actual := Sem_Discrete_Range_Expression (Actual, Itype);
+ Actual := Sem_Discrete_Range_Expression (Actual, Itype, False);
if Actual = Null_Iir then
return Null_Iir;
end if;
@@ -2388,7 +2390,8 @@ package body Sem_Names is
Attr);
return Error_Mark;
when others =>
- Error_Kind ("sem_array_attribute", Prefix);
+ Error_Msg_Sem ("prefix must denote an array object or type", Attr);
+ return Error_Mark;
end case;
case Get_Kind (Prefix_Type) is
diff --git a/sem_stmts.adb b/sem_stmts.adb
index 555bfbf39..fc0a3ae4f 100644
--- a/sem_stmts.adb
+++ b/sem_stmts.adb
@@ -462,18 +462,14 @@ package body Sem_Stmts is
begin
Ok := True;
-- Find the signal.
- if Sig_Type = Null_Iir then
- Ok := False;
+ Target := Get_Target (Stmt);
+ Target := Sem_Expression (Target, Sig_Type);
+ if Target /= Null_Iir then
+ Set_Target (Stmt, Target);
+ Check_Target (Stmt, Target);
+ Sem_Types.Set_Type_Has_Signal (Get_Type (Target));
else
- Target := Get_Target (Stmt);
- Target := Sem_Expression (Target, Sig_Type);
- if Target /= Null_Iir then
- Set_Target (Stmt, Target);
- Check_Target (Stmt, Target);
- Sem_Types.Set_Type_Has_Signal (Get_Type (Target));
- else
- Ok := False;
- end if;
+ Ok := False;
end if;
Expr := Get_Reject_Time_Expression (Stmt);
diff --git a/sem_types.adb b/sem_types.adb
index d7172c4bf..777a245e7 100644
--- a/sem_types.adb
+++ b/sem_types.adb
@@ -59,10 +59,13 @@ package body Sem_Types is
Mark : Iir;
begin
Set_Type_Has_Signal (Get_Base_Type (Atype));
- Func := Get_Resolution_Function (Atype);
- if Func /= Null_Iir then
- Func := Get_Named_Entity (Func);
- if Func /= Error_Mark then
+ -- Mark the resolution function (this may be required by the
+ -- back-end to generate resolver).
+ if Get_Resolved_Flag (Atype) then
+ Func := Get_Resolution_Function (Atype);
+ -- Maybe the type is resolved through its elements.
+ if Func /= Null_Iir then
+ Func := Get_Named_Entity (Func);
Set_Resolution_Function_Flag (Func, True);
end if;
end if;
@@ -704,7 +707,7 @@ package body Sem_Types is
declare
Res : Iir;
begin
- Res := Sem_Discrete_Range_Expression (Def, Null_Iir);
+ Res := Sem_Discrete_Range_Expression (Def, Null_Iir, True);
if Res = Null_Iir then
return Null_Iir;
end if;
@@ -1051,6 +1054,7 @@ package body Sem_Types is
return True;
end Is_A_Resolution_Function;
+ -- Note: this sets resolved_flag.
procedure Sem_Resolution_Function (Decl: Iir)
is
Func: Iir;
@@ -1112,7 +1116,7 @@ package body Sem_Types is
end if;
end Sem_Resolution_Function;
- -- Semantize array_subtype_definition DEF using BASE_TYPE as the base type
+ -- Semantize array_subtype_definition DEF using TYPE_MARK as the base type
-- of DEF.
-- DEF must have an index list and may have a resolution function.
-- Return DEF.
@@ -1172,7 +1176,7 @@ package body Sem_Types is
Staticness := None;
else
Subtype_Index := Sem_Discrete_Range_Expression
- (Subtype_Index, Type_Index);
+ (Subtype_Index, Type_Index, True);
if Subtype_Index /= Null_Iir then
Subtype_Index := Range_To_Subtype_Definition (Subtype_Index);
Staticness := Min (Staticness,
@@ -1190,9 +1194,7 @@ package body Sem_Types is
Set_Type_Staticness (Def, Staticness);
Set_Element_Subtype (Def, El_Type);
Sem_Resolution_Function (Def);
- if Get_Resolution_Function (Def) /= Null_Iir
- or else Get_Resolved_Flag (El_Type)
- then
+ if Get_Resolved_Flag (Def) or else Get_Resolved_Flag (El_Type) then
Set_Resolved_Flag (Def, True);
else
Set_Resolved_Flag (Def, False);
@@ -1341,7 +1343,7 @@ package body Sem_Types is
Set_Type_Staticness (Res, Get_Type_Staticness (Type_Mark));
Sem_Resolution_Function (Res);
Set_Signal_Type_Flag (Res, Get_Signal_Type_Flag (Type_Mark));
- if Get_Resolution_Function (Res) /= Null_Iir
+ if Get_Resolved_Flag (Res)
or else Get_Resolved_Flag (Get_Element_Subtype (Type_Mark))
then
Set_Resolved_Flag (Res, True);
@@ -1385,7 +1387,7 @@ package body Sem_Types is
A_Range := Get_Range_Constraint (Type_Mark);
else
A_Range := Sem_Discrete_Range_Expression
- (A_Range, Type_Mark);
+ (A_Range, Type_Mark, True);
if A_Range = Null_Iir then
-- Avoid error propagation.
A_Range := Get_Range_Constraint (Type_Mark);
@@ -1395,8 +1397,6 @@ package body Sem_Types is
Set_Type_Staticness (Res, Get_Expr_Staticness (A_Range));
Free_Name (Def);
Sem_Resolution_Function (Res);
- Set_Resolved_Flag
- (Res, Get_Resolution_Function (Res) /= Null_Iir);
Set_Signal_Type_Flag (Res, Get_Signal_Type_Flag (Type_Mark));
return Res;
end;
@@ -1422,7 +1422,7 @@ package body Sem_Types is
Constraint := Get_Range_Constraint (Type_Mark);
else
Constraint := Sem_Discrete_Range_Expression
- (Constraint, Type_Mark);
+ (Constraint, Type_Mark, True);
-- FIXME: check bounds, check static
end if;
Set_Range_Constraint (Res, Constraint);
@@ -1430,8 +1430,6 @@ package body Sem_Types is
end;
Free_Name (Def);
Sem_Resolution_Function (Res);
- Set_Resolved_Flag
- (Res, Get_Resolution_Function (Res) /= Null_Iir);
Set_Signal_Type_Flag (Res, True);
return Res;
@@ -1455,7 +1453,6 @@ package body Sem_Types is
Set_Type_Mark (Res, Type_Mark);
Set_Resolution_Function (Res, Func);
Sem_Resolution_Function (Res);
- Set_Resolved_Flag (Res, Func /= Null_Iir);
Set_Signal_Type_Flag (Res, Get_Signal_Type_Flag (Type_Mark));
Free_Name (Def);
return Res;
diff --git a/translate/gcc/INSTALL b/translate/gcc/INSTALL
index 26b0ee3cd..f4fb8a0d2 100644
--- a/translate/gcc/INSTALL
+++ b/translate/gcc/INSTALL
@@ -1,6 +1,6 @@
Install file for the binary distribution of GHDL.
-GHDL is Copyright 2002, 2003, 2004, 2005, 2006 Tristan Gingold.
+GHDL is Copyright 2002, 2003, 2004, 2005, 2006, 2007 Tristan Gingold.
GHDL is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
diff --git a/translate/gcc/README b/translate/gcc/README
index e2e1efbd7..0ef1a8bf0 100644
--- a/translate/gcc/README
+++ b/translate/gcc/README
@@ -4,7 +4,7 @@ To get the binary distribution or more information, go to http://ghdl.free.fr
Copyright:
**********
-GHDL is copyright (c) 2002, 2003, 2004, 2005, 2006 Tristan Gingold.
+GHDL is copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Tristan Gingold.
See the GHDL manual for more details.
This program is free software; you can redistribute it and/or modify
diff --git a/translate/gcc/dist.sh b/translate/gcc/dist.sh
index 4b0554b2f..7819dd879 100755
--- a/translate/gcc/dist.sh
+++ b/translate/gcc/dist.sh
@@ -39,7 +39,7 @@
set -e
# GCC version
-GCCVERSION=4.1.1
+GCCVERSION=4.1.2
# Machine name used by GCC
MACHINE=i686-pc-linux-gnu
# Directory where GCC sources (and objects) stay.
diff --git a/translate/ghdldrv/ghdlmain.adb b/translate/ghdldrv/ghdlmain.adb
index 0c2f39ae0..a46e17129 100644
--- a/translate/ghdldrv/ghdlmain.adb
+++ b/translate/ghdldrv/ghdlmain.adb
@@ -1,5 +1,5 @@
-- GHDL driver - main part.
--- Copyright (C) 2002, 2003, 2004, 2005, 2006 Tristan Gingold
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Tristan Gingold
--
-- GHDL is free software; you can redistribute it and/or modify it under
-- the terms of the GNU General Public License as published by the Free
@@ -226,7 +226,7 @@ package body Ghdlmain is
Put_Line ("Written by Tristan Gingold.");
New_Line;
-- Display copyright. Assume 80 cols terminal.
- Put_Line ("Copyright (C) 2003, 2004, 2005, 2006 Tristan Gingold.");
+ Put_Line ("Copyright (C) 2003, 2004, 2005, 2006, 2007 Tristan Gingold.");
Put_Line ("GHDL is free software, covered by the "
& "GNU General Public License. There is NO");
Put_Line ("warranty; not even for MERCHANTABILITY or"
diff --git a/translate/grt/grt-processes.adb b/translate/grt/grt-processes.adb
index 54eb28bf5..d8d8a61d5 100644
--- a/translate/grt/grt-processes.adb
+++ b/translate/grt/grt-processes.adb
@@ -853,7 +853,9 @@ package body Grt.Processes is
exit;
end if;
if Current_Time > Stop_Time then
- Info ("simulation stopped by --stop-time");
+ if Current_Time /= Last_Time then
+ Info ("simulation stopped by --stop-time");
+ end if;
exit;
end if;
end loop;
diff --git a/version.ads b/version.ads
index 9529f4f30..d71a40e4b 100644
--- a/version.ads
+++ b/version.ads
@@ -1,5 +1,5 @@
package Version is
Ghdl_Release : constant String :=
- "GHDL 0.26dev (20060819) [Sokcho edition]";
- Ghdl_Ver : constant String := "0.26dev";
+ "GHDL 0.26 (20070408) [Sokcho edition]";
+ Ghdl_Ver : constant String := "0.26";
end Version;