diff --git a/src/compiler/OPC.Mod b/src/compiler/OPC.Mod index 1e5ab5a7..f2e662c9 100644 --- a/src/compiler/OPC.Mod +++ b/src/compiler/OPC.Mod @@ -1091,7 +1091,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *) IF obj^.adr = 1 THEN (* WITH-variable *) IF obj^.typ^.comp = OPT.Record THEN Ident(obj); OPM.WriteString("__") ELSE (* cast with guard pointer type *) - OPM.WriteString("(("); Ident(obj^.typ^.strobj); OPM.Write(")"); Ident(obj); OPM.Write(")") + OPM.WriteString("(*("); Ident(obj^.typ^.strobj); OPM.WriteString("*)&"); Ident(obj); OPM.Write(")") END ELSIF (level # OPM.level) & (level > 0) THEN (* intermediate var *) comp := obj^.typ^.comp; diff --git a/src/runtime/SYSTEM.h b/src/runtime/SYSTEM.h index 43baa836..ff4c724d 100644 --- a/src/runtime/SYSTEM.h +++ b/src/runtime/SYSTEM.h @@ -237,7 +237,7 @@ static inline double SYSTEM_ABSD(double i) {return i >= 0.0 ? i : -i;} #define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) #define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) #define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) -#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*((typ*)p)