var shouldThrow = false;

// str concat generates op_to_primitive.
function toPrimitiveTarget() {
    if (shouldThrow) {
        return Symbol('Cocoa');
    }
    return 'Cocoa';
}
noInline(toPrimitiveTarget);

function doToPrimitive() {
    var value = toPrimitiveTarget();
    return value + "Cappuccino" + value;
}
noInline(doToPrimitive);

for (var i = 0; i < 10000; ++i) {
    var result = doToPrimitive();
    if (result !== "CocoaCappuccinoCocoa")
        throw "Error: bad result: " + result;
}

shouldThrow = true;

var didThrow;
try {
    shouldThrow = true;
    doToPrimitive();
} catch (e) {
    didThrow = e;
}

if (String(didThrow) !== "TypeError: Cannot convert a symbol to a string")
    throw "Error: didn't throw or threw wrong exception: " + didThrow;
