Didn't get the test case working, but I think the issue with (_) in general is fixed now. Not sure whether this particular issue is fixed.
On Mon, Oct 25, 2010 at 3:18 AM, Matt Rice <[email protected]> wrote: > doh, forgot the patch > > On Mon, Oct 25, 2010 at 3:17 AM, Matt Rice <[email protected]> wrote: > > similar to here: http://dev.eros-os.com/hg/bitc/rev/6fcc345cd3b3 > > but the "(_)" case at MixFix.cxx:571 > > causes the invalid read at MixFix.cxx:635 > > > > the attached patch can cause a segfault on valid code (here at least > > it will hit the jackpot, ymmv) > > it won't segfault until you uncomment the unused import stdio I added > > in sets/bit.bitc > > test with the existing tests/unit/bitset.bitc > > unaffected by my earlier patch, and should not conflict. > > but compiles ok without it, not sure if you want the patch otherwise, > > > > it'd probably be cleaner to cache min/max somewhere (inside or outside > > of) sets.bit > > and the map function could probably use callfWhenOn:bool, > callfWhenOff:bool > > flags currently only calls f when on, > > > > there is an argument that could be made that none of them belong in > > sets/bit.bitc, > > not really standard set operations... so maybe it belongs in an > > auxiliary bit set stuff place > > as for the implementations they are kind of brutish, and the > > similarity of implementations is > > a good hint that theres probably a cleaner way. > > > > below is a minimal reproduction which does not segfault, but can show > > the problem with valgrind > > > > bitc version 0.11 > > import bitc.main as main > > provide bitc.main main > > > > > > def main.main(argv: string[]) = { > > let on = true in > > if (on) then 1:int32 else 0:int32 > > 0:int32 > > } > > > > $valgrind ../../compiler/BUILD/bitcc -O -I ../../libbitc --nostdlib -v > > -o BUILD/parens parens.bitc ../../libbitc/BUILD/libbitc.a > > > > > > ==28022== Invalid read of size 8 > > ==28022== at 0x386DA9D49B: std::string::assign(std::string const&) > > (basic_string.h:286) > > ==28022== by 0x49F526: CleanMixFix(sherpa::INOstream&, > > boost::shared_ptr<AST>) (basic_string.h:511) > > ==28022== by 0x4A3B1F: ProcessMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:720) > > ==28022== by 0x4A3FDC: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1136) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== Address 0x5e31b78 is 24 bytes inside a block of size 464 > free'd > > ==28022== at 0x4A04A84: operator delete(void*) > (vg_replace_malloc.c:346) > > ==28022== by 0x409C98: boost::detail::shared_count::~shared_count() > > (sp_counted_base_gcc_x86.hpp:145) > > ==28022== by 0x4A40F0: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (shared_ptr.hpp:160) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== by 0x4A3F84: HandleMixFix(std::ostream&, > > boost::shared_ptr<AST>) (MixFix.cxx:1133) > > ==28022== > > bitcc: Instantiate.cxx:1306: boost::shared_ptr<AST> > > UocInfo::recInstantiate(std::ostream&, boost::shared_ptr<AST>, bool&, > > WorkList<std::basic_string<char, std::char_traits<char>, > > std::allocator<char> > >&): Assertion `ast->symType->isConcrete()' > > failed. > > > > _______________________________________________ > bitc-dev mailing list > [email protected] > http://www.coyotos.org/mailman/listinfo/bitc-dev > >
_______________________________________________ bitc-dev mailing list [email protected] http://www.coyotos.org/mailman/listinfo/bitc-dev
