Skip to content

build errors #1

Closed
Closed

Description

@drom

I am having errors when building the project.

drom@drom:~/work/github/WebAssembly/wasm-emscripten> ./build.sh                                                                                                       
building asm2wasm                                                                                                                                                     
building interpreter/js                                                                                                                                               
./build.sh: line 4: em++: command not found                                                                                                                           
building wasm shell
In file included from src/wasm-s-parser.h:9:0,
                 from src/wasm-shell.cpp:8:
src/wasm.h:996:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitBlock(wasm::Block*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitBlock(Block *curr) = 0;
                      ^
src/wasm.h:997:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitIf(wasm::If*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitIf(If *curr) = 0;
                      ^
src/wasm.h:998:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitLoop(wasm::Loop*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitLoop(Loop *curr) = 0;
                      ^
src/wasm.h:999:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitLabel(wasm::Label*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitLabel(Label *curr) = 0;
                      ^
src/wasm.h:1000:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitBreak(wasm::Break*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitBreak(Break *curr) = 0;
                      ^
src/wasm.h:1001:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitSwitch(wasm::Switch*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitSwitch(Switch *curr) = 0;
                      ^
src/wasm.h:1002:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitCall(wasm::Call*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitCall(Call *curr) = 0;
                      ^
src/wasm.h:1003:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitCallImport(wasm::CallImport*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitCallImport(CallImport *curr) = 0;
                      ^
src/wasm.h:1004:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitCallIndirect(wasm::CallIndirect*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitCallIndirect(CallIndirect *curr) = 0;
                      ^
src/wasm.h:1005:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitGetLocal(wasm::GetLocal*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitGetLocal(GetLocal *curr) = 0;
                      ^
src/wasm.h:1006:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitSetLocal(wasm::SetLocal*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitSetLocal(SetLocal *curr) = 0;
                      ^
src/wasm.h:1007:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitLoad(wasm::Load*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitLoad(Load *curr) = 0;
                      ^
src/wasm.h:1008:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitStore(wasm::Store*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitStore(Store *curr) = 0;
                      ^
src/wasm.h:1009:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitConst(wasm::Const*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitConst(Const *curr) = 0;
                      ^
src/wasm.h:1010:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitUnary(wasm::Unary*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitUnary(Unary *curr) = 0;
                      ^
src/wasm.h:1011:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitBinary(wasm::Binary*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitBinary(Binary *curr) = 0;
                      ^
src/wasm.h:1012:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitCompare(wasm::Compare*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitCompare(Compare *curr) = 0;
                      ^
src/wasm.h:1013:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitConvert(wasm::Convert*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitConvert(Convert *curr) = 0;
                      ^
src/wasm.h:1014:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitSelect(wasm::Select*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitSelect(Select *curr) = 0;
                      ^
src/wasm.h:1015:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitHost(wasm::Host*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitHost(Host *curr) = 0;
                      ^
src/wasm.h:1016:22: error: ‘ReturnType wasm::WasmVisitor<ReturnType>::visitNop(wasm::Nop*) [with ReturnType = wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow]’, declared using local type ‘wasm::ModuleInstance::callFunction(cashew::IString, wasm::ModuleInstance::LiteralList&)::Flow’, is used but never defined [-fpermissive]
   virtual ReturnType visitNop(Nop *curr) = 0;
                      ^

Activity

  1. kripken commented on Nov 6, 2015

    @kripken
    Member

    The em++: command not found is because you need emscripten in your path, if you want to build the js parts. But you don't need it for asm2wasm or wasm-shell.

    The others are a gcc bug, it turns out. Building with newer gcc, or clang, should avoid those. I haven't been able to find a workaround for older gcc.

  2. drom commented on Nov 6, 2015

    @drom
    Author

    Thank you. Yes, it looks like I am using LLVM-3.5 and I probably need to switch to 3.7. As of GCC I am using 4.8. What is the minimum requirement here?

  3. kripken commented on Nov 6, 2015

    @kripken
    Member

    This is the bug, I'm not sure how to figure out which gcc release that ends up in. But based on the dates, I think at least 5.0.

  4. cosinusoidally commented on Nov 10, 2015

    @cosinusoidally

    Looking at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51048#c3 it appears that the below patch is sufficient to get wasm-shell to compile on GCC 4.8.2 in Ubuntu 14.04. I haven't run the test suite though.

    Looking at the GCC site it is difficult to tell when the fix was added. Considering the bug report makes no mention of any of the stable branches of GCC, I would assume the fix is not in any stable release of GCC (and probably not available the default system GCC in any current stable version of Ubuntu). To be sure the unit test in would need to be compiled with one of those very recent releases of GCC.

    diff --git a/src/wasm.h b/src/wasm.h
    index 0fd014a..8ca8e24 100644
    --- a/src/wasm.h
    +++ b/src/wasm.h
    @@ -1065,27 +1065,27 @@ private:
    
     template<class ReturnType>
     struct WasmVisitor {
    -  virtual ReturnType visitBlock(Block *curr) = 0;
    -  virtual ReturnType visitIf(If *curr) = 0;
    -  virtual ReturnType visitLoop(Loop *curr) = 0;
    -  virtual ReturnType visitLabel(Label *curr) = 0;
    -  virtual ReturnType visitBreak(Break *curr) = 0;
    -  virtual ReturnType visitSwitch(Switch *curr) = 0;
    -  virtual ReturnType visitCall(Call *curr) = 0;
    -  virtual ReturnType visitCallImport(CallImport *curr) = 0;
    -  virtual ReturnType visitCallIndirect(CallIndirect *curr) = 0;
    -  virtual ReturnType visitGetLocal(GetLocal *curr) = 0;
    -  virtual ReturnType visitSetLocal(SetLocal *curr) = 0;
    -  virtual ReturnType visitLoad(Load *curr) = 0;
    -  virtual ReturnType visitStore(Store *curr) = 0;
    -  virtual ReturnType visitConst(Const *curr) = 0;
    -  virtual ReturnType visitUnary(Unary *curr) = 0;
    -  virtual ReturnType visitBinary(Binary *curr) = 0;
    -  virtual ReturnType visitCompare(Compare *curr) = 0;
    -  virtual ReturnType visitConvert(Convert *curr) = 0;
    -  virtual ReturnType visitSelect(Select *curr) = 0;
    -  virtual ReturnType visitHost(Host *curr) = 0;
    -  virtual ReturnType visitNop(Nop *curr) = 0;
    +  virtual ReturnType visitBlock(Block *curr) { }; 
    +  virtual ReturnType visitIf(If *curr) { };
    +  virtual ReturnType visitLoop(Loop *curr) { };
    +  virtual ReturnType visitLabel(Label *curr) { };
    +  virtual ReturnType visitBreak(Break *curr) { };
    +  virtual ReturnType visitSwitch(Switch *curr) { };
    +  virtual ReturnType visitCall(Call *curr) { }; 
    +  virtual ReturnType visitCallImport(CallImport *curr) { };
    +  virtual ReturnType visitCallIndirect(CallIndirect *curr) { };
    +  virtual ReturnType visitGetLocal(GetLocal *curr) { };
    +  virtual ReturnType visitSetLocal(SetLocal *curr) { };
    +  virtual ReturnType visitLoad(Load *curr) { };
    +  virtual ReturnType visitStore(Store *curr) { };
    +  virtual ReturnType visitConst(Const *curr) { };
    +  virtual ReturnType visitUnary(Unary *curr) { };
    +  virtual ReturnType visitBinary(Binary *curr) { };
    +  virtual ReturnType visitCompare(Compare *curr) { };
    +  virtual ReturnType visitConvert(Convert *curr) { };
    +  virtual ReturnType visitSelect(Select *curr) { };
    +  virtual ReturnType visitHost(Host *curr) { };
    +  virtual ReturnType visitNop(Nop *curr) { };
    
       ReturnType visit(Expression *curr) {
         assert(curr);
    
  5. added a commit that references this issue on Nov 10, 2015
  6. kripken commented on Nov 10, 2015

    @kripken
    Member

    Thanks! I pushed a patch with aborts instead of pure virtual. It does build in gcc now. However it gives an error, which I don't have time to look into right now. (Note that the test suite is currently failing in the spec tests due to upstream spec changes, but a gcc build errors earlier.)

  7. kripken commented on Nov 11, 2015

    @kripken
    Member

    After recent changes, gcc seems to build and emit a working shell, so I think we can close this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions