summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Gingold2015-01-12 19:03:12 +0100
committerTristan Gingold2015-01-12 19:03:12 +0100
commitf6227b6be67383fd0e6d8fd6c273509515ac3bc0 (patch)
treeb0365ad6cd2d961d46df6749c88208be79011083
parent9e5342c2299a14c39d04974d6a7a098fd01173fe (diff)
downloadghdl-f6227b6be67383fd0e6d8fd6c273509515ac3bc0.tar.gz
ghdl-f6227b6be67383fd0e6d8fd6c273509515ac3bc0.tar.bz2
ghdl-f6227b6be67383fd0e6d8fd6c273509515ac3bc0.zip
sem: fix Can_Collapse_Signals regression.
-rw-r--r--src/grt/grt-signals.adb1
-rw-r--r--src/grt/grt-signals.ads4
-rw-r--r--src/grt/grt-types.ads4
-rw-r--r--src/vhdl/sem.adb6
4 files changed, 10 insertions, 5 deletions
diff --git a/src/grt/grt-signals.adb b/src/grt/grt-signals.adb
index 1a4454a..226e7f8 100644
--- a/src/grt/grt-signals.adb
+++ b/src/grt/grt-signals.adb
@@ -2620,6 +2620,7 @@ package body Grt.Signals is
(Resolv.Resolv_Proc
= To_Resolver_Acc (Ieee_Std_Logic_1164_Resolved_Resolv_Ptr))
and then Sig.S.Nbr_Drivers + Sig.Nbr_Ports <= 1
+ and then Sig.Sig_Kind = Kind_Signal_No
then
-- Optimization: remove resolver if there is at most one
-- source.
diff --git a/src/grt/grt-signals.ads b/src/grt/grt-signals.ads
index 0b69e60..8461e5e 100644
--- a/src/grt/grt-signals.ads
+++ b/src/grt/grt-signals.ads
@@ -33,6 +33,10 @@ pragma Elaborate_All (Grt.Table);
package Grt.Signals is
pragma Suppress (All_Checks);
+ -- Kind of a signal.
+ type Kind_Signal_Type is
+ (Kind_Signal_No, Kind_Signal_Register, Kind_Signal_Bus);
+
-- Kind of transaction.
type Transaction_Kind is
(
diff --git a/src/grt/grt-types.ads b/src/grt/grt-types.ads
index fed8225..c0b3c3b 100644
--- a/src/grt/grt-types.ads
+++ b/src/grt/grt-types.ads
@@ -301,10 +301,6 @@ package Grt.Types is
subtype Mode_Signal_Forward is
Mode_Signal_Type range Mode_Stable .. Mode_Delayed;
- -- Kind of a signal.
- type Kind_Signal_Type is
- (Kind_Signal_No, Kind_Signal_Register, Kind_Signal_Bus);
-
-- Note: we could use system.storage_elements, but unfortunatly,
-- this doesn't work with pragma no_run_time (gnat 3.15p).
type Integer_Address is mod Memory_Size;
diff --git a/src/vhdl/sem.adb b/src/vhdl/sem.adb
index 28cef78..1380568 100644
--- a/src/vhdl/sem.adb
+++ b/src/vhdl/sem.adb
@@ -337,7 +337,11 @@ package body Sem is
-- If the formal can have sources and is guarded, but the actual is
-- not guarded (or has not the same kind of guard), signals cannot
-- be collapsed.
- if Get_Signal_Kind (Formal_Base) /= Get_Signal_Kind (Actual_Base) then
+ if (Get_Guarded_Signal_Flag (Formal_Base)
+ /= Get_Guarded_Signal_Flag (Actual_Base))
+ or else (Get_Signal_Kind (Formal_Base)
+ /= Get_Signal_Kind (Actual_Base))
+ then
return False;
end if;