Example #1
0
void MainVisitor::Inspect()
{
#define Dump(coll) dump(#coll, _##coll)
    Dump(pointerClasses);
    Dump(barrieredClasses);

    Log::outs() << "Recycler allocations\n";
    for (auto item : _allocatorTypeMap)
    {
        dump(item.first.c_str(), item.second);
    }

    std::queue<const Type*> queue;  // queue of types to check
    std::unordered_set<const Type*> barrierTypes;  // set of types queued
    auto pushBarrierType = [&](const Type* type) -> bool
    {
        if (barrierTypes.insert(type).second)
        {
            queue.push(type);
            return true;
        }
        return false;
    };

    for (auto item : _allocationTypes)
    {
        if (item.second & AllocationTypes::WriteBarrier)
        {
            pushBarrierType(item.first);
        }
    }
    dump("WriteBarrier allocation types", barrierTypes);

    // Examine all barrierd types. They should be fully wb annotated.
    while (!queue.empty())
    {
        auto type = queue.front();
        queue.pop();

        auto r = type->getCanonicalTypeInternal()->getAsCXXRecordDecl();
        if (r)
        {
            auto typeName = r->getQualifiedNameAsString();
            ProcessUnbarrieredFields(r, pushBarrierType);

            // queue the type's base classes
            for (const auto& base: r->bases())
            {
                if (pushBarrierType(base.getType().getTypePtr()))
                {
                    Log::outs() << "Queue base type: " << base.getType().getAsString()
                        << " (base of " << typeName << ")\n";
                }
            }
        }
    }

#undef Dump
}
const NAString QualifiedName::getQualifiedNameAsAnsiString(NABoolean formatForDisplay,
							   NABoolean externalDisplay) const
{
  formatAsAnsiIdentifier = TRUE;
  NAString result(getQualifiedNameAsString(formatForDisplay, externalDisplay), 
                  CmpCommon::statementHeap());
  formatAsAnsiIdentifier = FALSE;
  return result;
}
// See ANSI 6.3.
// Fabricated names do not get exposed.
const NAString CorrName::getExposedNameAsString
(NABoolean debug,
 NABoolean formatForDisplay) const
{
  if (isFabricated() AND NOT debug)
    return "";
  else if (NOT getCorrNameAsString().isNull())
    return getCorrNameAsString();
  else
    return getQualifiedNameAsString(formatForDisplay);		//##forceAnsi
}