Fix constant propagation across DPI imports of inout strings.
This commit is contained in:
parent
662ebece71
commit
b11fa372b1
2
Changes
2
Changes
|
|
@ -12,6 +12,8 @@ The contributors that suggested a given feature are shown in []. Thanks!
|
||||||
|
|
||||||
**** Fix false ALWCOMBORDER on interface references, bug1247. [Josh Redford]
|
**** Fix false ALWCOMBORDER on interface references, bug1247. [Josh Redford]
|
||||||
|
|
||||||
|
**** Fix constant propagation across DPI imports of inout strings. [Victor Besyakov]
|
||||||
|
|
||||||
|
|
||||||
* Verilator 3.916 2017-11-25
|
* Verilator 3.916 2017-11-25
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -386,6 +386,9 @@ private:
|
||||||
pinp->v3error("Function/task output connected to constant instead of variable: "+portp->prettyName());
|
pinp->v3error("Function/task output connected to constant instead of variable: "+portp->prettyName());
|
||||||
}
|
}
|
||||||
else if (portp->isInout()) {
|
else if (portp->isInout()) {
|
||||||
|
// Correct lvalue; see comments below
|
||||||
|
V3LinkLValue::linkLValueSet(pinp);
|
||||||
|
|
||||||
if (AstVarRef* varrefp = pinp->castVarRef()) {
|
if (AstVarRef* varrefp = pinp->castVarRef()) {
|
||||||
// Connect to this exact variable
|
// Connect to this exact variable
|
||||||
AstVarScope* localVscp = varrefp->varScopep(); if (!localVscp) varrefp->v3fatalSrc("Null var scope");
|
AstVarScope* localVscp = varrefp->varScopep(); if (!localVscp) varrefp->v3fatalSrc("Null var scope");
|
||||||
|
|
@ -489,6 +492,9 @@ private:
|
||||||
pinp->v3error("Function/task output connected to constant instead of variable: "+portp->prettyName());
|
pinp->v3error("Function/task output connected to constant instead of variable: "+portp->prettyName());
|
||||||
}
|
}
|
||||||
else if (portp->isInout()) {
|
else if (portp->isInout()) {
|
||||||
|
// Correct lvalue; see comments below
|
||||||
|
V3LinkLValue::linkLValueSet(pinp);
|
||||||
|
|
||||||
if (pinp->castVarRef()) {
|
if (pinp->castVarRef()) {
|
||||||
// Connect to this exact variable
|
// Connect to this exact variable
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ module t (/*AUTOARG*/
|
||||||
import "DPI-C" pure function void dpii_v_struct (input str_t i, output str_t o);
|
import "DPI-C" pure function void dpii_v_struct (input str_t i, output str_t o);
|
||||||
import "DPI-C" pure function void dpii_v_substruct(input substr_t i, output int o);
|
import "DPI-C" pure function void dpii_v_substruct(input substr_t i, output int o);
|
||||||
import "DPI-C" pure function void dpii_v_chandle (input chandle i, output chandle o);
|
import "DPI-C" pure function void dpii_v_chandle (input chandle i, output chandle o);
|
||||||
import "DPI-C" pure function void dpii_v_string (input string i, output string o);
|
import "DPI-C" pure function void dpii_v_string (input string i, inout string o);
|
||||||
import "DPI-C" pure function void dpii_v_real (input real i, output real o);
|
import "DPI-C" pure function void dpii_v_real (input real i, output real o);
|
||||||
|
|
||||||
import "DPI-C" pure function void dpii_v_uint (input int unsigned i, output int unsigned o);
|
import "DPI-C" pure function void dpii_v_uint (input int unsigned i, output int unsigned o);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue