rjmccall added inline comments.
================ Comment at: lib/CodeGen/CGExpr.cpp:3517 + CGM.getCodeGenOpts().StrictVTablePointers && + CGM.getCodeGenOpts().OptimizationLevel > 0) + addr = Address(Builder.CreateInvariantGroupBarrier(addr.getPointer()), ---------------- Prazek wrote: > rjmccall wrote: > > Prazek wrote: > > > rjmccall wrote: > > > > Checking for v-table pointers recursively isn't really that difficult, > > > > but if you really don't want to do that, please at least check for > > > > non-POD-ness or something so that this isn't kicking in for literally > > > > every struct type. > > > ok, I am also planning to fix this in the later patch, because the same > > > problem arise when comparing 2 pointers to dynamic classe. > > > I would like to have a bit in CXXRecordDecl to remember if it has any > > > vptr inside that would calculate durring the construction. > > > My biggest fear is that if I won't cache it then it will be very slow. > > We could repeat this work from scratch on every single union field access > > done by IRGen and it would still be way, way faster than doing anything > > extra on every record definition in the program. The latter is done orders > > of magnitude more frequently than the former. > This is a good point, and actually I don't need to check if class holds any > vptrs for the example I refered (comparing 2 pointers). > Hovewer I still need to do it when someone casts pointer to class holding > vptrs to something that doesn't hold vptrs, and any pointer casts are much > more frequent than Record declarations. What are you planning to do if someone casts to a pointer to incomplete type? I am concerned that what these problems are really telling us is that this representation is not very good. https://reviews.llvm.org/D31830 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits