fpc/tests/test/tinterlockedmt.pp
Jonas Maebe b40797e7f8 --- Merging r39844 into '.':
U    utils/fpcmkcfg/fpcmkcfg.pp
U    utils/fpcmkcfg/fpccfg.inc
U    utils/fpcmkcfg/fpc.cft
--- Recording mergeinfo for merge of r39844 into '.':
 U   .
--- Merging r39949 into '.':
U    compiler/ncnv.pas
U    compiler/avr/cgcpu.pas
U    compiler/symconst.pas
U    compiler/defutil.pas
U    compiler/nadd.pas
U    compiler/ncgrtti.pas
U    compiler/llvm/llvmdef.pas
U    compiler/llvm/hlcgllvm.pas
U    compiler/dbgstabs.pas
U    compiler/ppcgen/cgppc.pas
U    compiler/ppcgen/ngppcadd.pas
U    compiler/psystem.pas
U    compiler/jvm/jvmdef.pas
U    compiler/jvm/njvminl.pas
U    compiler/jvm/njvmcnv.pas
U    compiler/jvm/hlcgcpu.pas
U    compiler/dbgdwarf.pas
U    compiler/sparcgen/cgsparc.pas
U    compiler/nmat.pas
U    compiler/nset.pas
U    compiler/symdef.pas
U    compiler/ngtcon.pas
U    compiler/scanner.pas
U    compiler/i8086/n8086add.pas
U    compiler/arm/narmadd.pas
U    compiler/arm/cgcpu.pas
U    compiler/ninl.pas
U    compiler/ptype.pas
U    compiler/nflw.pas
U    compiler/defcmp.pas
U    compiler/x86/cgx86.pas
U    compiler/x86_64/cpupara.pas
U    compiler/utils/ppuutils/ppudump.pp
U    compiler/htypechk.pas
U    compiler/pdecvar.pas
U    compiler/ncal.pas
U    compiler/m68k/cgcpu.pas
U    rtl/inc/systemh.inc
--- Recording mergeinfo for merge of r39949 into '.':
 G   .
--- Merging r39950 into '.':
U    rtl/inc/objcbase.pp
U    rtl/inc/objcnf.inc
U    rtl/inc/objc1.inc
U    packages/cocoaint/src/CocoaAll.pas
U    packages/cocoaint/src/quartzcore/CIPlugIn.inc
U    packages/cocoaint/src/quartzcore/CAEmitterLayer.inc
U    packages/cocoaint/src/quartzcore/CAAnimation.inc
U    packages/cocoaint/src/quartzcore/CAOpenGLLayer.inc
U    packages/cocoaint/src/quartzcore/CAMediaTiming.inc
U    packages/cocoaint/src/quartzcore/CIImage.inc
U    packages/cocoaint/src/quartzcore/CIFilterGenerator.inc
U    packages/cocoaint/src/quartzcore/CAEmitterCell.inc
U    packages/cocoaint/src/quartzcore/CALayer.inc
U    packages/cocoaint/src/quartzcore/CIFilterShape.inc
U    packages/cocoaint/src/quartzcore/CATextLayer.inc
U    packages/cocoaint/src/quartzcore/CATransaction.inc
U    packages/cocoaint/src/quartzcore/CIPlugInInterface.inc
U    packages/cocoaint/src/quartzcore/CACIFilterAdditions.inc
U    packages/cocoaint/src/quartzcore/CAReplicatorLayer.inc
U    packages/cocoaint/src/foundation/NSURL.inc
U    packages/cocoaint/src/foundation/NSDictionary.inc
U    packages/cocoaint/src/foundation/NSObject.inc
U    packages/cocoaint/src/foundation/NSSpellServer.inc
U    packages/cocoaint/src/foundation/NSString.inc
U    packages/cocoaint/src/foundation/NSCalendar.inc
U    packages/cocoaint/src/foundation/NSURLRequest.inc
U    packages/cocoaint/src/foundation/NSZone.inc
U    packages/cocoaint/src/foundation/NSURLHandle.inc
U    packages/cocoaint/src/foundation/NSPropertyList.inc
U    packages/cocoaint/src/foundation/NSTimer.inc
U    packages/cocoaint/src/foundation/NSIndexSet.inc
U    packages/cocoaint/src/foundation/NSPathUtilities.inc
U    packages/cocoaint/src/foundation/NSDistributedNotificationCenter.inc
U    packages/cocoaint/src/foundation/NSSet.inc
U    packages/cocoaint/src/foundation/NSAppleEventManager.inc
U    packages/cocoaint/src/foundation/NSRunLoop.inc
U    packages/cocoaint/src/foundation/NSScriptClassDescription.inc
U    packages/cocoaint/src/foundation/NSOperation.inc
U    packages/cocoaint/src/foundation/NSUndoManager.inc
U    packages/cocoaint/src/foundation/NSMethodSignature.inc
U    packages/cocoaint/src/foundation/NSArchiver.inc
U    packages/cocoaint/src/foundation/NSUserDefaults.inc
U    packages/cocoaint/src/foundation/NSXMLNode.inc
U    packages/cocoaint/src/foundation/NSScriptCommandDescription.inc
U    packages/cocoaint/src/foundation/NSScriptObjectSpecifiers.inc
U    packages/cocoaint/src/foundation/NSInvocation.inc
U    packages/cocoaint/src/foundation/NSXMLParser.inc
U    packages/cocoaint/src/foundation/NSArray.inc
U    packages/cocoaint/src/foundation/NSMetadata.inc
U    packages/cocoaint/src/foundation/NSMapTable.inc
U    packages/cocoaint/src/foundation/NSURLDownload.inc
U    packages/cocoaint/src/foundation/NSHashTable.inc
U    packages/cocoaint/src/foundation/NSXMLDTD.inc
U    packages/cocoaint/src/foundation/NSURLCredential.inc
U    packages/cocoaint/src/foundation/NSValueTransformer.inc
U    packages/cocoaint/src/foundation/NSPredicate.inc
U    packages/cocoaint/src/foundation/NSPortCoder.inc
U    packages/cocoaint/src/foundation/NSXMLDTDNode.inc
U    packages/cocoaint/src/foundation/NSAppleEventDescriptor.inc
U    packages/cocoaint/src/foundation/NSScriptCommand.inc
U    packages/cocoaint/src/foundation/NSCache.inc
U    packages/cocoaint/src/foundation/NSKeyValueObserving.inc
U    packages/cocoaint/src/foundation/NSDecimalNumber.inc
U    packages/cocoaint/src/foundation/NSScriptSuiteRegistry.inc
U    packages/cocoaint/src/foundation/NSKeyValueCoding.inc
U    packages/cocoaint/src/foundation/NSBundle.inc
U    packages/cocoaint/src/foundation/NSPointerFunctions.inc
U    packages/cocoaint/src/foundation/NSXMLElement.inc
U    packages/cocoaint/src/foundation/NSValue.inc
U    packages/cocoaint/src/foundation/NSPort.inc
U    packages/cocoaint/src/foundation/NSAppleScript.inc
U    packages/cocoaint/src/foundation/NSSortDescriptor.inc
U    packages/cocoaint/src/foundation/NSLock.inc
U    packages/cocoaint/src/foundation/NSScanner.inc
U    packages/cocoaint/src/foundation/NSStream.inc
U    packages/cocoaint/src/foundation/NSGeometry.inc
U    packages/cocoaint/src/foundation/NSScriptWhoseTests.inc
U    packages/cocoaint/src/foundation/NSXMLDocument.inc
U    packages/cocoaint/src/foundation/NSConnection.inc
U    packages/cocoaint/src/foundation/NSDateFormatter.inc
U    packages/cocoaint/src/foundation/NSTask.inc
U    packages/cocoaint/src/foundation/NSFormatter.inc
U    packages/cocoaint/src/foundation/NSThread.inc
U    packages/cocoaint/src/foundation/NSCharacterSet.inc
U    packages/cocoaint/src/foundation/NSData.inc
U    packages/cocoaint/src/foundation/NSHTTPCookie.inc
U    packages/cocoaint/src/foundation/NSFileManager.inc
U    packages/cocoaint/src/foundation/NSPortNameServer.inc
U    packages/cocoaint/src/foundation/NSNumberFormatter.inc
U    packages/cocoaint/src/foundation/NSDate.inc
U    packages/cocoaint/src/foundation/NSHost.inc
U    packages/cocoaint/src/foundation/NSProxy.inc
U    packages/cocoaint/src/foundation/NSURLConnection.inc
U    packages/cocoaint/src/foundation/NSURLProtocol.inc
U    packages/cocoaint/src/foundation/NSURLProtectionSpace.inc
U    packages/cocoaint/src/foundation/NSKeyedArchiver.inc
U    packages/cocoaint/src/foundation/NSPortMessage.inc
U    packages/cocoaint/src/foundation/NSError.inc
U    packages/cocoaint/src/foundation/NSNetServices.inc
U    packages/cocoaint/src/foundation/NSTimeZone.inc
U    packages/cocoaint/src/foundation/NSFileHandle.inc
U    packages/cocoaint/src/foundation/NSDistributedLock.inc
U    packages/cocoaint/src/foundation/NSCoder.inc
U    packages/cocoaint/src/foundation/NSGarbageCollector.inc
U    packages/cocoaint/src/InlineFunctions.inc
U    packages/cocoaint/src/coredata/NSPersistentStore.inc
U    packages/cocoaint/src/coredata/NSEntityDescription.inc
U    packages/cocoaint/src/coredata/NSPersistentStoreCoordinator.inc
U    packages/cocoaint/src/coredata/NSFetchRequestExpression.inc
U    packages/cocoaint/src/coredata/NSManagedObject.inc
U    packages/cocoaint/src/coredata/NSMigrationManager.inc
U    packages/cocoaint/src/coredata/NSPropertyDescription.inc
U    packages/cocoaint/src/coredata/NSManagedObjectContext.inc
U    packages/cocoaint/src/coredata/NSAtomicStore.inc
U    packages/cocoaint/src/coredata/NSManagedObjectID.inc
U    packages/cocoaint/src/coredata/NSFetchRequest.inc
U    packages/cocoaint/src/coredata/NSManagedObjectModel.inc
U    packages/cocoaint/src/coredata/NSRelationshipDescription.inc
U    packages/cocoaint/src/coredata/NSEntityMigrationPolicy.inc
U    packages/cocoaint/src/webkit/DOMEventTarget.inc
U    packages/cocoaint/src/webkit/DOMMouseEvent.inc
U    packages/cocoaint/src/webkit/DOMHTMLStyleElement.inc
U    packages/cocoaint/src/webkit/DOMWheelEvent.inc
U    packages/cocoaint/src/webkit/WebUIDelegate.inc
U    packages/cocoaint/src/webkit/WebView.inc
U    packages/cocoaint/src/webkit/DOMAttr.inc
U    packages/cocoaint/src/webkit/WebDocument.inc
U    packages/cocoaint/src/webkit/DOMNode.inc
U    packages/cocoaint/src/webkit/DOMStyleSheet.inc
U    packages/cocoaint/src/webkit/DOMHTMLLinkElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLDocument.inc
U    packages/cocoaint/src/webkit/DOMHTMLMenuElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLAreaElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLHRElement.inc
U    packages/cocoaint/src/webkit/DOMEvent.inc
U    packages/cocoaint/src/webkit/WebFrameView.inc
U    packages/cocoaint/src/webkit/DOMXPathResult.inc
U    packages/cocoaint/src/webkit/DOMHTMLInputElement.inc
U    packages/cocoaint/src/webkit/DOMDocument.inc
U    packages/cocoaint/src/webkit/DOMHTMLOptGroupElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLImageElement.inc
U    packages/cocoaint/src/webkit/DOMMutationEvent.inc
U    packages/cocoaint/src/webkit/WebEditingDelegate.inc
U    packages/cocoaint/src/webkit/WebBackForwardList.inc
U    packages/cocoaint/src/webkit/DOMHTMLTableCellElement.inc
U    packages/cocoaint/src/webkit/WebScriptObject.inc
U    packages/cocoaint/src/webkit/DOMHTMLFrameElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLOListElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLScriptElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLObjectElement.inc
U    packages/cocoaint/src/webkit/DOMCSSStyleDeclaration.inc
U    packages/cocoaint/src/webkit/DOMElement.inc
U    packages/cocoaint/src/webkit/DOMRange.inc
U    packages/cocoaint/src/webkit/DOMNodeIterator.inc
U    packages/cocoaint/src/webkit/DOMKeyboardEvent.inc
U    packages/cocoaint/src/webkit/DOMTreeWalker.inc
U    packages/cocoaint/src/webkit/DOMHTMLOptionElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLSelectElement.inc
U    packages/cocoaint/src/webkit/WebPlugin.inc
U    packages/cocoaint/src/webkit/DOMHTMLUListElement.inc
U    packages/cocoaint/src/webkit/WebHistory.inc
U    packages/cocoaint/src/webkit/WebPreferences.inc
U    packages/cocoaint/src/webkit/DOMHTMLDListElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLElement.inc
U    packages/cocoaint/src/webkit/DOMImplementation.inc
U    packages/cocoaint/src/webkit/DOMHTMLPreElement.inc
U    packages/cocoaint/src/webkit/WebDataSource.inc
U    packages/cocoaint/src/webkit/DOMHTMLDirectoryElement.inc
U    packages/cocoaint/src/webkit/DOMOverflowEvent.inc
U    packages/cocoaint/src/webkit/DOMProgressEvent.inc
U    packages/cocoaint/src/webkit/DOMHTMLButtonElement.inc
U    packages/cocoaint/src/webkit/DOMHTMLTextAreaElement.inc
U    packages/cocoaint/src/webkit/DOMUIEvent.inc
U    packages/cocoaint/src/Foundation.pas
U    packages/cocoaint/src/appkit/NSPrinter.inc
U    packages/cocoaint/src/appkit/NSColorPicking.inc
U    packages/cocoaint/src/appkit/NSHelpManager.inc
U    packages/cocoaint/src/appkit/NSRulerView.inc
U    packages/cocoaint/src/appkit/NSCollectionView.inc
U    packages/cocoaint/src/appkit/NSBox.inc
U    packages/cocoaint/src/appkit/NSPathCell.inc
U    packages/cocoaint/src/appkit/NSPathControl.inc
U    packages/cocoaint/src/appkit/NSWorkspace.inc
U    packages/cocoaint/src/appkit/NSMenuView.inc
U    packages/cocoaint/src/appkit/NSUserInterfaceItemSearching.inc
U    packages/cocoaint/src/appkit/NSWindow.inc
U    packages/cocoaint/src/appkit/NSDictionaryController.inc
U    packages/cocoaint/src/appkit/NSView.inc
U    packages/cocoaint/src/appkit/NSButtonCell.inc
U    packages/cocoaint/src/appkit/NSDocument.inc
U    packages/cocoaint/src/appkit/NSAnimation.inc
U    packages/cocoaint/src/appkit/NSSpeechSynthesizer.inc
U    packages/cocoaint/src/appkit/NSStepperCell.inc
U    packages/cocoaint/src/appkit/NSQuickDrawView.inc
U    packages/cocoaint/src/appkit/NSSplitView.inc
U    packages/cocoaint/src/appkit/NSScrollView.inc
U    packages/cocoaint/src/appkit/NSImageRep.inc
U    packages/cocoaint/src/appkit/NSRulerMarker.inc
U    packages/cocoaint/src/appkit/NSPersistentDocument.inc
U    packages/cocoaint/src/appkit/NSPanel.inc
U    packages/cocoaint/src/appkit/NSSpeechRecognizer.inc
U    packages/cocoaint/src/appkit/NSProgressIndicator.inc
U    packages/cocoaint/src/appkit/NSColorWell.inc
U    packages/cocoaint/src/appkit/NSAlert.inc
U    packages/cocoaint/src/appkit/NSPrintInfo.inc
U    packages/cocoaint/src/appkit/NSNib.inc
U    packages/cocoaint/src/appkit/NSMovieView.inc
U    packages/cocoaint/src/appkit/NSUserInterfaceValidation.inc
U    packages/cocoaint/src/appkit/NSButton.inc
U    packages/cocoaint/src/appkit/NSSavePanel.inc
U    packages/cocoaint/src/appkit/NSColor.inc
U    packages/cocoaint/src/appkit/NSViewController.inc
U    packages/cocoaint/src/appkit/NSCell.inc
U    packages/cocoaint/src/appkit/NSArrayController.inc
U    packages/cocoaint/src/appkit/NSDocumentController.inc
U    packages/cocoaint/src/appkit/NSTokenField.inc
U    packages/cocoaint/src/appkit/NSTextField.inc
U    packages/cocoaint/src/appkit/NSDockTile.inc
U    packages/cocoaint/src/appkit/NSAttributedString.inc
U    packages/cocoaint/src/appkit/NSSecureTextField.inc
U    packages/cocoaint/src/appkit/NSFontManager.inc
U    packages/cocoaint/src/appkit/NSMatrix.inc
U    packages/cocoaint/src/appkit/NSNibLoading.inc
U    packages/cocoaint/src/appkit/NSStatusBar.inc
U    packages/cocoaint/src/appkit/NSComboBoxCell.inc
U    packages/cocoaint/src/appkit/NSObjectController.inc
U    packages/cocoaint/src/appkit/NSControl.inc
U    packages/cocoaint/src/appkit/NSClipView.inc
U    packages/cocoaint/src/appkit/NSSlider.inc
U    packages/cocoaint/src/appkit/NSScroller.inc
U    packages/cocoaint/src/appkit/NSAccessibility.inc
U    packages/cocoaint/src/appkit/NSSound.inc
U    packages/cocoaint/src/appkit/NSWindowScripting.inc
U    packages/cocoaint/src/appkit/NSTextAttachment.inc
U    packages/cocoaint/src/appkit/NSColorPanel.inc
U    packages/cocoaint/src/appkit/NSTreeController.inc
U    packages/cocoaint/src/appkit/NSTableColumn.inc
U    packages/cocoaint/src/appkit/NSUserDefaultsController.inc
U    packages/cocoaint/src/appkit/NSWindowController.inc
U    packages/cocoaint/src/appkit/NSSegmentedControl.inc
U    packages/cocoaint/src/appkit/NSRuleEditor.inc
U    packages/cocoaint/src/appkit/NSMovie.inc
U    packages/cocoaint/src/appkit/NSFileWrapper.inc
U    packages/cocoaint/src/appkit/NSTabViewItem.inc
U    packages/cocoaint/src/appkit/NSEvent.inc
U    packages/cocoaint/src/appkit/NSTouch.inc
U    packages/cocoaint/src/appkit/NSBrowserCell.inc
U    packages/cocoaint/src/appkit/NSPasteboard.inc
U    packages/cocoaint/src/appkit/NSTextContainer.inc
U    packages/cocoaint/src/appkit/NSTextTable.inc
U    packages/cocoaint/src/appkit/NSStatusItem.inc
U    packages/cocoaint/src/appkit/NSPasteboardItem.inc
U    packages/cocoaint/src/appkit/NSFormCell.inc
U    packages/cocoaint/src/appkit/NSSpellChecker.inc
U    packages/cocoaint/src/appkit/NSTreeNode.inc
U    packages/cocoaint/src/appkit/NSLayoutManager.inc
U    packages/cocoaint/src/appkit/NSTypesetter.inc
U    packages/cocoaint/src/appkit/NSSearchFieldCell.inc
U    packages/cocoaint/src/appkit/NSDatePickerCell.inc
U    packages/cocoaint/src/appkit/NSImage.inc
U    packages/cocoaint/src/appkit/NSBrowser.inc
U    packages/cocoaint/src/appkit/NSTokenFieldCell.inc
U    packages/cocoaint/src/appkit/NSInputServer.inc
U    packages/cocoaint/src/appkit/NSTextFieldCell.inc
U    packages/cocoaint/src/appkit/NSInputManager.inc
U    packages/cocoaint/src/appkit/NSBezierPath.inc
U    packages/cocoaint/src/appkit/NSPopUpButtonCell.inc
U    packages/cocoaint/src/appkit/NSRunningApplication.inc
U    packages/cocoaint/src/appkit/NSGraphicsContext.inc
U    packages/cocoaint/src/appkit/NSFont.inc
U    packages/cocoaint/src/appkit/NSTextStorage.inc
U    packages/cocoaint/src/appkit/NSDatePicker.inc
U    packages/cocoaint/src/appkit/NSKeyValueBinding.inc
U    packages/cocoaint/src/appkit/NSCachedImageRep.inc
U    packages/cocoaint/src/appkit/NSOpenPanel.inc
U    packages/cocoaint/src/appkit/NSTableView.inc
U    packages/cocoaint/src/appkit/NSStepper.inc
U    packages/cocoaint/src/appkit/NSDragging.inc
U    packages/cocoaint/src/appkit/NSSliderCell.inc
U    packages/cocoaint/src/appkit/NSController.inc
U    packages/cocoaint/src/appkit/NSMenuItemCell.inc
U    packages/cocoaint/src/appkit/NSText.inc
U    packages/cocoaint/src/appkit/NSDrawer.inc
U    packages/cocoaint/src/appkit/NSApplicationScripting.inc
U    packages/cocoaint/src/appkit/NSTableHeaderView.inc
U    packages/cocoaint/src/appkit/NSPopUpButton.inc
U    packages/cocoaint/src/appkit/NSToolbar.inc
U    packages/cocoaint/src/appkit/NSTextInputClient.inc
U    packages/cocoaint/src/appkit/NSMenu.inc
U    packages/cocoaint/src/appkit/NSCursor.inc
U    packages/cocoaint/src/appkit/NSImageView.inc
U    packages/cocoaint/src/appkit/NSPrintOperation.inc
U    packages/cocoaint/src/appkit/NSATSTypesetter.inc
U    packages/cocoaint/src/appkit/NSToolbarItem.inc
U    packages/cocoaint/src/appkit/NSMenuItem.inc
U    packages/cocoaint/src/appkit/NSFontPanel.inc
U    packages/cocoaint/src/appkit/NSBitmapImageRep.inc
U    packages/cocoaint/src/appkit/NSTableHeaderCell.inc
U    packages/cocoaint/src/appkit/NSGraphics.inc
U    packages/cocoaint/src/appkit/NSTabView.inc
U    packages/cocoaint/src/appkit/NSResponder.inc
U    packages/cocoaint/src/appkit/NSApplication.inc
U    packages/cocoaint/src/appkit/NSComboBox.inc
U    packages/cocoaint/src/appkit/NSTextInputContext.inc
U    packages/cocoaint/src/appkit/NSOutlineView.inc
U    packages/cocoaint/src/appkit/NSColorList.inc
U    packages/cocoaint/src/appkit/NSTextView.inc
--- Recording mergeinfo for merge of r39950 into '.':
 G   .
--- Merging r40008 into '.':
G    compiler/ncal.pas
A    tests/webtbs/tw34442.pp
--- Recording mergeinfo for merge of r40008 into '.':
 G   .
--- Merging r40009 into '.':
G    compiler/defcmp.pas
G    compiler/ncnv.pas
U    compiler/pexpr.pas
A    tests/webtbs/tw33875.pp
--- Recording mergeinfo for merge of r40009 into '.':
 G   .
--- Merging r40010 into '.':
A    tests/webtbs/tw34055.pp
G    compiler/ngtcon.pas
--- Recording mergeinfo for merge of r40010 into '.':
 G   .
--- Merging r40012 into '.':
G    compiler/defcmp.pas
G    compiler/htypechk.pas
A    tests/webtbs/tw32179.pp
--- Recording mergeinfo for merge of r40012 into '.':
 G   .
--- Merging r40367 into '.':
U    compiler/optcse.pas
--- Recording mergeinfo for merge of r40367 into '.':
 G   .
--- Merging r40373 into '.':
U    compiler/hlcgobj.pas
--- Recording mergeinfo for merge of r40373 into '.':
 G   .
--- Merging r40374 into '.':
U    compiler/ncgld.pas
--- Recording mergeinfo for merge of r40374 into '.':
 G   .
--- Merging r40375 into '.':
G    compiler/hlcgobj.pas
--- Recording mergeinfo for merge of r40375 into '.':
 G   .
--- Merging r40384 into '.':
U    compiler/psub.pas
--- Recording mergeinfo for merge of r40384 into '.':
 G   .
--- Merging r40386 into '.':
U    compiler/ngenutil.pas
U    compiler/jvm/njvmutil.pas
--- Recording mergeinfo for merge of r40386 into '.':
 G   .
--- Merging r40442 into '.':
U    compiler/ppu.pas
G    compiler/symdef.pas
--- Recording mergeinfo for merge of r40442 into '.':
 G   .
--- Merging r40443 into '.':
U    compiler/systems/i_bsd.pas
U    compiler/systems/i_linux.pas
U    compiler/systems/i_sunos.pas
U    compiler/systems/i_embed.pas
U    compiler/systems/i_android.pas
U    compiler/systems/i_aros.pas
--- Recording mergeinfo for merge of r40443 into '.':
 G   .
--- Merging r40499 into '.':
G    compiler/llvm/hlcgllvm.pas
--- Recording mergeinfo for merge of r40499 into '.':
 G   .
--- Merging r40630 into '.':
U    compiler/ncgnstld.pas
G    compiler/ninl.pas
--- Recording mergeinfo for merge of r40630 into '.':
 G   .
--- Merging r40633 into '.':
G    compiler/hlcgobj.pas
U    compiler/hlcg2ll.pas
--- Recording mergeinfo for merge of r40633 into '.':
 G   .
--- Merging r40634 into '.':
U    compiler/ncgcnv.pas
G    compiler/symdef.pas
U    compiler/llvm/nllvmcnv.pas
U    compiler/llvm/nllvmld.pas
U    compiler/i386/symcpu.pas
G    compiler/ncnv.pas
U    compiler/symcreat.pas
U    compiler/jvm/pjvm.pas
U    compiler/arm/symcpu.pas
U    compiler/powerpc/symcpu.pas
U    compiler/m68k/symcpu.pas
U    compiler/x86_64/symcpu.pas
U    compiler/blockutl.pas
U    compiler/i8086/symcpu.pas
--- Recording mergeinfo for merge of r40634 into '.':
 G   .
--- Merging r40645 into '.':
U    compiler/nobj.pas
--- Recording mergeinfo for merge of r40645 into '.':
 G   .
--- Merging r40648 into '.':
G    compiler/symcreat.pas
--- Recording mergeinfo for merge of r40648 into '.':
 G   .
--- Merging r40683 into '.':
A    tests/tbf/tb0267.pp
U    tests/webtbs/tw27349.pp
A    tests/tbs/tb0654.pp
G    compiler/nobj.pas
--- Recording mergeinfo for merge of r40683 into '.':
 G   .
--- Recording mergeinfo for merge of r40729 into '.':
 G   .
--- Merging r40771 into '.':
U    rtl/darwin/x86/x86hnd.inc
--- Recording mergeinfo for merge of r40771 into '.':
 G   .
--- Merging r40772 into '.':
G    compiler/nflw.pas
U    compiler/pmodules.pas
U    compiler/pdecsub.pas
U    compiler/pparautl.pas
G    compiler/ptype.pas
U    compiler/pdecobj.pas
U    compiler/pgenutil.pas
U    compiler/pdecl.pas
U    compiler/jvm/symcpu.pas
G    compiler/pdecvar.pas
--- Recording mergeinfo for merge of r40772 into '.':
 G   .
--- Merging r40773 into '.':
G    compiler/pdecsub.pas
U    compiler/ncgnstmm.pas
G    compiler/symcreat.pas
G    compiler/pdecl.pas
G    compiler/pmodules.pas
G    compiler/pdecobj.pas
G    compiler/psub.pas
G    compiler/symdef.pas
G    compiler/pparautl.pas
A    compiler/procdefutil.pas
G    compiler/pgenutil.pas
G    compiler/jvm/symcpu.pas
G    compiler/jvm/jvmdef.pas
G    compiler/jvm/pjvm.pas
G    compiler/nflw.pas
U    compiler/symutil.pas
G    compiler/pdecvar.pas
G    compiler/ptype.pas
U    compiler/i386/n386flw.pas
G    compiler/ncgnstld.pas
U    compiler/x86_64/nx64flw.pas
U    compiler/procinfo.pas
--- Recording mergeinfo for merge of r40773 into '.':
 G   .
--- Merging r40777 into '.':
G    compiler/ppu.pas
U    compiler/optconstprop.pas
U    compiler/pstatmnt.pas
U    compiler/optutils.pas
U    compiler/pass_2.pas
U    compiler/node.pas
U    compiler/ncgmem.pas
U    compiler/nmem.pas
G    compiler/psystem.pas
--- Recording mergeinfo for merge of r40777 into '.':
 G   .
--- Merging r40778 into '.':
G    rtl/darwin/x86/x86hnd.inc
--- Recording mergeinfo for merge of r40778 into '.':
 G   .
--- Merging r40785 into '.':
U    compiler/msgidx.inc
G    compiler/pexpr.pas
U    compiler/msg/errore.msg
U    compiler/msgtxt.inc
A    tests/webtbf/tw34821.pp
--- Recording mergeinfo for merge of r40785 into '.':
 G   .
--- Merging r40810 into '.':
G    compiler/hlcg2ll.pas
--- Recording mergeinfo for merge of r40810 into '.':
 G   .
--- Merging r41161 into '.':
G    compiler/symdef.pas
A    tests/webtbs/tw34971.pp
--- Recording mergeinfo for merge of r41161 into '.':
 G   .
--- Merging r41164 into '.':
U    tests/test/tinterlocked64mt.pp
U    tests/test/tinterlockedmt.pp
--- Recording mergeinfo for merge of r41164 into '.':
 G   .
--- Merging r41165 into '.':
U    tests/test/units/sysutils/trwsync.pp
--- Recording mergeinfo for merge of r41165 into '.':
 G   .
--- Merging r41166 into '.':
U    rtl/objpas/sysutils/sysuthrd.inc
--- Recording mergeinfo for merge of r41166 into '.':
 G   .

git-svn-id: branches/fixes_3_2@41249 -
2019-02-07 19:54:56 +00:00

309 lines
7.4 KiB
ObjectPascal

{%skiptarget=$nothread }
{$ifdef FPC}
{$mode objfpc}
{$else}
{$apptype console}
{$endif}
uses
{$ifndef FPC}
Windows,
{$endif FPC}
{$ifdef unix}
cthreads,
{$endif unix}
SysUtils, Classes;
type
TOperation = (opAdd, opDec, opExchange, opExchangeAdd, opExchangeDec, opCompareExchange);
TWorker = class(TThread)
private
FOp: TOperation;
FCount: longint;
FOption: longint;
protected
procedure Execute; override;
public
constructor Create(ACount: longint; AOp: TOperation; AOption: longint = 0);
end;
//{$define TEST_BROKEN_IncDec}
//{$define TEST_BROKEN_Exchange}
//{$define TEST_BROKEN_ExchangeAdd}
//{$define TEST_BROKEN_CompareExchange}
const
TotalThreadCount = 50;
TestCount = 1000000;
WaitTime = 60;
var
Counter, Counter2, Counter3: longint;
WorkingCount, FinishedCount: longint;
AbortThread: boolean;
LastCompareVal: longint;
{$ifndef FPC}
{$ifndef TEST_BROKEN_CompareExchange}
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint;
begin
Result:=longint(Windows.InterlockedCompareExchange(pointer(Target), pointer(NewValue), pointer(Comperand)));
end;
{$endif TEST_BROKEN_CompareExchange}
procedure ThreadSwitch;
begin
Sleep(0);
end;
{$endif FPC}
{$ifdef TEST_BROKEN_CompareExchange}
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint;
begin
Result:=Target;
if Result = Comperand then
Target:=NewValue;
end;
{$endif TEST_BROKEN_CompareExchange}
{$ifdef TEST_BROKEN_IncDec}
function InterlockedIncrement(var Target: longint): longint;
begin
Result:=Target;
Inc(Target);
end;
function InterlockedDecrement(var Target: longint): longint;
begin
Result:=Target;
Dec(Target);
end;
{$endif TEST_BROKEN_IncDec}
{$ifdef TEST_BROKEN_Exchange}
function InterLockedExchange(var Target: longint; Source: longint): longint;
begin
Result:=Target;
Target:=Source;
end;
{$endif TEST_BROKEN_Exchange}
{$ifdef TEST_BROKEN_ExchangeAdd}
function InterLockedExchangeAdd(var Target: longint; Source: longint): longint;
begin
Result:=Target;
Inc(Target, Source);
end;
{$endif TEST_BROKEN_ExchangeAdd}
procedure CheckResult(check, expected, code: longint; const Msg: string);
begin
if check <> expected then begin
writeln(Msg, ' Result: ', check, '; Expected: ', expected);
Halt(code);
end;
end;
constructor TWorker.Create(ACount: longint; AOp: TOperation; AOption: longint);
begin
FCount:=ACount;
FOp:=AOp;
FOption:=AOption;
inherited Create(True);
FreeOnTerminate:=True;
if FOp = opCompareExchange then
Priority:=tpHighest;
end;
procedure TWorker.Execute;
var
i, j, k, opt: longint;
t: TDateTime;
begin
InterLockedIncrement(WorkingCount);
Sleep(10);
case FOp of
opAdd:
begin
for i:=1 to FCount do begin
InterLockedIncrement(Counter);
if AbortThread then
break;
end;
end;
opDec:
begin
for i:=1 to FCount do begin
InterLockedDecrement(Counter);
if AbortThread then
break;
end;
end;
opExchange:
begin
for i:=1 to FCount do begin
j:=InterLockedExchange(Counter, 10);
InterLockedExchangeAdd(Counter, j - 10);
if AbortThread then
break;
end;
end;
opExchangeAdd:
begin
for i:=1 to FCount do begin
InterLockedExchangeAdd(Counter, 3);
if AbortThread then
break;
end;
end;
opExchangeDec:
begin
for i:=1 to FCount do begin
InterLockedExchangeAdd(Counter, -3);
if AbortThread then
break;
end;
end;
opCompareExchange:
begin
opt:=FOption and 1;
for i:=1 to FCount do begin
t:=Now;
j:=0;
while not AbortThread do begin
k:=InterLockedCompareExchange(Counter3, FOption, opt);
if k = opt then
break;
if (k < 0) or (k >= LastCompareVal) then begin
writeln('InterLockedCompareExchange. Invalid return value (', k, ').');
Halt(10);
end;
Inc(j);
if j and $F = 0 then
ThreadSwitch;
if j and $FFFF = 0 then begin
if Now - t >= 30/SecsPerDay then begin
writeln('InterLockedCompareExchange seems to be broken.');
Halt(12);
end;
Sleep(1);
end;
end;
if AbortThread then
break;
ThreadSwitch;
k:=InterLockedExchange(Counter3, opt xor 1);
if k <> FOption then begin
writeln('InterLockedCompareExchange seems to be broken (', k, ').');
Halt(11);
end;
InterLockedIncrement(Counter2);
end;
end;
end;
{ ensure the writes to Counter and Counter2 are ordered vs the writes to FinishedCount }
WriteBarrier;
InterLockedIncrement(FinishedCount);
end;
procedure Run;
var
i, j, k, CmpCount, ThreadCount: longint;
t: TDateTime;
workers: array[0..TotalThreadCount - 1] of TWorker;
begin
Counter:=0;
Counter2:=0;
Counter3:=0;
CmpCount:=TestCount div 1000;
writeln('Creating threads...');
j:=0;
k:=2;
repeat
i:=j;
workers[j]:=TWorker.Create(TestCount, opAdd);
Inc(j);
workers[j]:=TWorker.Create(TestCount, opDec);
Inc(j);
workers[j]:=TWorker.Create(TestCount div 3, opExchange);
Inc(j);
workers[j]:=TWorker.Create(TestCount, opExchangeAdd);
Inc(j);
workers[j]:=TWorker.Create(TestCount, opExchangeDec);
Inc(j);
workers[j]:=TWorker.Create(CmpCount, opCompareExchange, k);
Inc(j);
Inc(k);
workers[j]:=TWorker.Create(CmpCount, opCompareExchange, k);
Inc(j);
Inc(k);
until j + (j - i) > TotalThreadCount;
ThreadCount:=j;
LastCompareVal:=k;
writeln('Created ', ThreadCount ,' threads.');
writeln('Starting threads...');
t:=Now;
for i:=0 to ThreadCount - 1 do begin
workers[i].Suspended:=False;
if Now - t > 30/SecsPerDay then begin
writeln('Threads start takes too long to complete.');
Halt(4);
end;
end;
t:=Now;
while WorkingCount <> ThreadCount do begin
if Now - t > 30/SecsPerDay then begin
writeln('Not all threads have started: ', ThreadCount - WorkingCount);
Halt(5);
end;
Sleep(10);
end;
writeln('Waiting for threads to complete...');
t:=Now;
while FinishedCount <> ThreadCount do begin
if Now - t > WaitTime/SecsPerDay then begin
if AbortThread then begin
writeln('Unable to abort threads.');
Halt(3);
end
else begin
AbortThread:=True;
writeln('Timeout has expired. Active threads left: ', ThreadCount - FinishedCount);
t:=Now;
end;
end;
Sleep(10);
end;
if AbortThread then begin
writeln('The execution is too slow (', Counter2, ').');
Halt(2);
end;
t:=Now - t;
if t = 0 then
t:=1/MSecsPerDay;
{ ensure the read from FinishedCount above is ordered relative to the reads from
Counter and Counter2 (counterpart to WriteBarrier in the thread function) }
ReadBarrier();
CheckResult(Counter, 0, 20, 'Counter error:');
CheckResult(Counter2, (LastCompareVal - 2)*CmpCount, 21, 'Counter2 error:');
writeln('Test OK.');
writeln('InterLockedCompareExchange: ', Round(Counter2/(t*SecsPerDay)), ' ops/sec.');
end;
begin
Run;
end.