../../Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:105 Value of: LifetimeLogger::takeLogStr().c_str() Actual: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(logger-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(<default>-1-0) move_constructor(logger-1-1) move_constructor(<default>-2-1) move_constructor(<default>-1-1) move_constructor(logger-1-2) move_constructor(<default>-2-2) move_constructor(<default>-1-2) destructor(<default>-1-1) destructor(<default>-2-1) destructor(logger-1-1) destructor(<default>-1-0) destructor(<default>-2-0) destructor(logger-1-0) testFunction called destructor(<default>-1-2) destructor(<default>-2-2) destructor(logger-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) " Expected: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(<default>-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(<default>-1-1) move_constructor(<default>-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(<default>-2-0) destructor(<default>-1-0) move_constructor(<default>-1-2) move_constructor(<default>-2-2) move_constructor(logger-1-2) destructor(logger-1-1) destructor(<default>-2-1) destructor(<default>-1-1) testFunction called destructor(logger-1-2) destructor(<default>-2-2) destructor(<default>-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) " FAIL WTF_CrossThreadTask.Basic C:\cygwin\home\buildbot\slave\win-release\build\Tools\TestWebKitAPI\Tests\WTF\CrossThreadTask.cpp:105 Value of: LifetimeLogger::takeLogStr().c_str() Actual: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(logger-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(<default>-1-0) move_constructor(logger-1-1) move_constructor(<default>-2-1) move_constructor(<default>-1-1) move_constructor(logger-1-2) move_constructor(<default>-2-2) move_constructor(<default>-1-2) move_constructor(logger-1-3) move_constructor(<default>-2-3) move_constructor(<default>-1-3) destructor(<default>-1-2) destructor(<default>-2-2) destructor(logger-1-2) destructor(<default>-1-1) destructor(<default>-2-1) destructor(logger-1-1) destructor(<default>-1-0) destructor(<default>-2-0) destructor(logger-1-0) testFunction called destructor(<default>-1-3) destructor(<default>-2-3) destructor(logger-1-3) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) " Expected: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(<default>-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(<default>-1-1) move_constructor(<default>-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(<default>-2-0) destructor(<default>-1-0) move_constructor(<default>-1-2) move_constructor(<default>-2-2) move_constructor(logger-1-2) destructor(logger-1-1) destructor(<default>-2-1) destructor(<default>-1-1) testFunction called destructor(logger-1-2) destructor(<default>-2-2) destructor(<default>-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) "
The isolated copy snippets are out of order: Actual: ... isolatedCopy() copy_constructor(logger-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(<default>-1-0) ... Expected: ... isolatedCopy() copy_constructor(<default>-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(logger-1-0) ... Which is reasonable, considering evaluation order of function arguments is unspecified. Same thing with the other out-of-orderness later on. The test assuming evaluation order is bogus. I'll explore ways to fix.
Besides out-of-orderness, the exact number of constructor calls per named object is still the same. So having a map of names-to-constructor calls will work.
Created attachment 281011 [details] Patch
Comment on attachment 281011 [details] Patch cool
http://trac.webkit.org/changeset/201928