It is a bug that it worked without optimization. When you call a virtual method from the constructor (indirectly in this case), the class hasn't been fully constructed yet, so you can't call the derived version of the method |foo|.
This covers the topic pretty well: http://www.parashift.com/c%2B%2B-faq-lite/calling-virtuals-from-ctors.html Does that help explain things? - Bruce On Thu, Jul 24, 2014 at 1:55 PM, nagappan nachiappan <[email protected]> wrote: > I have this file : > > #include <emscripten.h> > #include <stdio.h> > > class BaseClass > { > public: > virtual void foo() = 0; > > BaseClass() > { > init(); > } > > void init() > { > foo(); > } > }; > > > class DerivedClass : public BaseClass > { > public: > DerivedClass() : BaseClass(){} > > virtual void foo() > { > printf("From DerivedClass"); > } > }; > > int main() > { > DerivedClass d; > return 0; > } > > Without any compiler optimization , things work fine and I see the "From > DerivedClass" message printed out. > But , I face an error when the compiler optimization flag is set to "-O2" > > Uncaught Pure virtual function called! > > Any fix/work-around for this issue. > > -Nagappan > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
