diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-03-13 05:30:25 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-03-13 06:30:31 +0100 |
commit | 24876db04a0addf732bcd4589664edcc97cf9751 (patch) | |
tree | 22577daedb9c6aca73aa7a8e6c1a4bdcd5e3ef01 | |
parent | 3561102557932a65ccd08e1383678c6c6c4d9a35 (diff) | |
download | ghdl-24876db04a0addf732bcd4589664edcc97cf9751.tar.gz ghdl-24876db04a0addf732bcd4589664edcc97cf9751.tar.bz2 ghdl-24876db04a0addf732bcd4589664edcc97cf9751.zip |
synth: propagate more errors.
-rw-r--r-- | src/synth/synth-expr.adb | 6 | ||||
-rw-r--r-- | src/synth/synth-static_oper.adb | 2 | ||||
-rw-r--r-- | src/synth/synth-stmts.adb | 4 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb index eb0357145..ecb5f199b 100644 --- a/src/synth/synth-expr.adb +++ b/src/synth/synth-expr.adb @@ -1780,12 +1780,18 @@ package body Synth.Expr is end case; Left := Synth_Expression_With_Type (Syn_Inst, Left_Expr, Typ); + if Left = null then + return null; + end if; if Is_Static_Val (Left) and then Get_Static_Discrete (Left) = Val then return Create_Value_Discrete (Val, Boolean_Type); end if; Strip_Const (Left); Right := Synth_Expression_With_Type (Syn_Inst, Right_Expr, Typ); + if Right = null then + return null; + end if; Strip_Const (Right); -- Return a static value if both operands are static. diff --git a/src/synth/synth-static_oper.adb b/src/synth/synth-static_oper.adb index 511c72626..cb6fd0877 100644 --- a/src/synth/synth-static_oper.adb +++ b/src/synth/synth-static_oper.adb @@ -595,7 +595,7 @@ package body Synth.Static_Oper is Error_Msg_Synth (+Expr, "synth_static_dyadic_predefined: unhandled " & Iir_Predefined_Functions'Image (Def)); - raise Internal_Error; + return null; end case; end Synth_Static_Dyadic_Predefined; diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb index d7fe43c78..c40eaadc6 100644 --- a/src/synth/synth-stmts.adb +++ b/src/synth/synth-stmts.adb @@ -680,6 +680,10 @@ package body Synth.Stmts is Phi_False : Phi_Type; begin Cond_Val := Synth_Expression (C.Inst, Cond); + if Cond_Val = null then + Set_Error (C.Inst); + return; + end if; if Is_Static (Cond_Val) then Strip_Const (Cond_Val); if Cond_Val.Scal = 1 then |