{
    "configure-args": "--enable-debug-symbols='-gline-tables-only' --disable-jemalloc --enable-thread-sanitizer",
    "optimize": true,
    "debug": false,
    "compiler": "clang",
    "env": {
        "LLVM_SYMBOLIZER": "{TOOLTOOL_CHECKOUT}/clang/bin/llvm-symbolizer",
        "JITTEST_EXTRA_ARGS": "--jitflags=tsan --ignore-timeouts={DIR}/cgc-jittest-timeouts.txt --unusable-error-status --exclude-from={DIR}/tsan-sighandlers.txt",
        "JSTESTS_EXTRA_ARGS": "--exclude-file={DIR}/cgc-jstests-slow.txt",
        "TSAN_OPTIONS": "exitcode=0 log_path={OUTDIR}/sanitize_log"
    },
    "[comment on expect-errors]": "Note that expect-errors may contain duplicates. These indicate that tsan reports errors as two distinct line numbers in the same function. (Line number shift around, so we cannot just include them here.)",
    "expect-errors": [
        [ "Shape.h", "inDictionary" ],
        [ "Shape.h", "maybeSlot" ],
        [ "Shape.h", "slotSpan" ],
        [ "Shape.h", "setSlotWithType" ],
        [ "Shape.h", "search<js::MaybeAdding::NotAdding>" ],
        [ "Shape.h", "setOverwritten" ],
        [ "Shape.h", "incrementNumLinearSearches" ],
        [ "Shape.h", "isBigEnoughForAShapeTable" ],
        [ "Shape.h", "js::jit::CodeGenerator::emitGetPropertyPolymorphic(js::jit::LInstruction*, js::jit::Register, js::jit::Register, js::jit::TypedOrValueRegister const&)" ],
        [ "ProtectedData.h", "operator=<js::CooperatingContext>" ],
        [ "ProtectedData.h", "js::ZoneGroup::leave()" ],
        [ "jsfriendapi.h", "GetObjectClass" ],
        [ "jsfriendapi.h", "numFixedSlots" ],
        [ "jsfriendapi.h", "numDynamicSlots" ],
        [ "jsfriendapi.h", "EmulatesUndefined" ],
        [ "jitprofiling.c", "iJIT_GetNewMethodID" ],
        [ "Marking.cpp", "js::GCMarker::reset()" ],
        [ "Statistics.h", "js::gc::GCRuntime::pickChunk(js::AutoLockGC const&, js::gc::AutoMaybeStartBackgroundAllocation&)" ],
        [ "Statistics.h", "js::gc::GCRuntime::getOrAllocChunk(js::AutoLockGC const&, js::gc::AutoMaybeStartBackgroundAllocation&)" ],
        [ "Barrier.h", "set" ],
        [ "Stack.h", "context" ],
        [ "Stack.h", "js::HelperThread::handleIonWorkload(js::AutoLockHelperThreadState&)" ],
        [ "ObjectGroup.h", "addendumKind" ],
        [ "ObjectGroup.h", "generation" ],
        [ "ObjectGroup.h", "js::jit::MObjectState::New(js::jit::TempAllocator&, js::jit::MDefinition*)" ],
        [ "TypeInference-inl.h", "setBasePropertyCount" ],
        [ "jsscript.h", "decref" ],
        [ "jsfun.h", "setResolvedLength" ],
        [ "jsfun.h", "needsSomeEnvironmentObject" ]
    ]
}
