Merge pull request #2141 from whitequark/cxxrtl-cxx11

cxxrtl: various compiler compatibility fixes
This commit is contained in:
whitequark 2020-06-10 17:10:15 +00:00 committed by GitHub
commit 8a4841d786
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 8 deletions

View File

@ -608,6 +608,7 @@ struct memory {
// This utterly reprehensible construct is the most reasonable way to apply a function to every element // This utterly reprehensible construct is the most reasonable way to apply a function to every element
// of a parameter pack, if the elements all have different types and so cannot be cast to an initializer list. // of a parameter pack, if the elements all have different types and so cannot be cast to an initializer list.
auto _ = {std::move(std::begin(init.data), std::end(init.data), data.begin() + init.offset)...}; auto _ = {std::move(std::begin(init.data), std::end(init.data), data.begin() + init.offset)...};
(void)_;
} }
// An operator for direct memory reads. May be used at any time during the simulation. // An operator for direct memory reads. May be used at any time during the simulation.
@ -676,10 +677,8 @@ struct metadata {
// In debug mode, using the wrong .as_*() function will assert. // In debug mode, using the wrong .as_*() function will assert.
// In release mode, using the wrong .as_*() function will safely return a default value. // In release mode, using the wrong .as_*() function will safely return a default value.
union { const unsigned uint_value = 0;
const unsigned uint_value = 0; const signed sint_value = 0;
const signed sint_value;
};
const std::string string_value = ""; const std::string string_value = "";
const double double_value = 0.0; const double double_value = 0.0;
@ -826,7 +825,9 @@ struct module {
return deltas; return deltas;
} }
virtual void debug_info(debug_items &items, std::string path = "") {} virtual void debug_info(debug_items &items, std::string path = "") {
(void)items, (void)path;
}
}; };
} // namespace cxxrtl } // namespace cxxrtl

View File

@ -1922,8 +1922,9 @@ struct CxxrtlWorker {
if (top_module != nullptr && debug_info) { if (top_module != nullptr && debug_info) {
f << "cxxrtl_toplevel " << design_ns << "_create() {\n"; f << "cxxrtl_toplevel " << design_ns << "_create() {\n";
inc_indent(); inc_indent();
std::string top_type = design_ns + "::" + mangle(top_module);
f << indent << "return new _cxxrtl_toplevel { "; f << indent << "return new _cxxrtl_toplevel { ";
f << "std::make_unique<" << design_ns << "::" << mangle(top_module) << ">()"; f << "std::unique_ptr<" << top_type << ">(new " + top_type + ")";
f << " };\n"; f << " };\n";
dec_indent(); dec_indent();
f << "}\n"; f << "}\n";

View File

@ -75,8 +75,8 @@ void cxxrtl_vcd_add_from(cxxrtl_vcd vcd, cxxrtl_handle handle);
// //
// Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`. // Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`.
void cxxrtl_vcd_add_from_if(cxxrtl_vcd vcd, cxxrtl_handle handle, void *data, void cxxrtl_vcd_add_from_if(cxxrtl_vcd vcd, cxxrtl_handle handle, void *data,
int (*filter)(void *data, const char *name, int (*filter)(void *data, const char *name,
const struct cxxrtl_object *object)); const struct cxxrtl_object *object));
// Schedule all CXXRTL objects in a simulation except for memories. // Schedule all CXXRTL objects in a simulation except for memories.
// //