| 
									
										
										
										
											2020-03-16 02:58:23 +11:00
										 |  |  | // +build !nacl,!386,!wasm,!arm,!gcflags_noopt | 
					
						
							| 
									
										
										
										
											2018-11-10 08:28:44 +09:00
										 |  |  | // errorcheck -0 -m | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Copyright 2019 The Go Authors. All rights reserved. | 
					
						
							|  |  |  | // Use of this source code is governed by a BSD-style | 
					
						
							|  |  |  | // license that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Test, using compiler diagnostic flags, that inlining of functions | 
					
						
							|  |  |  | // imported from the sync package is working. | 
					
						
							|  |  |  | // Compiles but does not run. | 
					
						
							| 
									
										
										
										
											2018-11-09 22:49:38 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | // FIXME: This test is disabled on architectures where atomic operations | 
					
						
							|  |  |  | // are function calls rather than intrinsics, since this prevents inlining | 
					
						
							|  |  |  | // of the sync fast paths. This test should be re-enabled once the problem | 
					
						
							|  |  |  | // is solved. | 
					
						
							| 
									
										
										
										
											2018-11-10 08:28:44 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | package foo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"sync" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var mutex *sync.Mutex | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func small5() { // ERROR "can inline small5" | 
					
						
							|  |  |  | 	// the Unlock fast path should be inlined | 
					
						
							| 
									
										
										
										
											2019-04-01 11:58:33 -07:00
										 |  |  | 	mutex.Unlock() // ERROR "inlining call to sync\.\(\*Mutex\)\.Unlock" | 
					
						
							| 
									
										
										
										
											2018-11-10 08:28:44 +09:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-09 22:49:38 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | func small6() { // ERROR "can inline small6" | 
					
						
							|  |  |  | 	// the Lock fast path should be inlined | 
					
						
							| 
									
										
										
										
											2019-04-01 11:58:33 -07:00
										 |  |  | 	mutex.Lock() // ERROR "inlining call to sync\.\(\*Mutex\)\.Lock" | 
					
						
							| 
									
										
										
										
											2018-11-09 22:49:38 +09:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-13 15:34:22 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | var once *sync.Once | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func small7() { // ERROR "can inline small7" | 
					
						
							|  |  |  |         // the Do fast path should be inlined | 
					
						
							| 
									
										
										
										
											2019-04-01 11:58:33 -07:00
										 |  |  |         once.Do(small5) // ERROR "inlining call to sync\.\(\*Once\)\.Do" | 
					
						
							| 
									
										
										
										
											2018-11-13 15:34:22 +09:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-13 17:08:17 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | var rwmutex *sync.RWMutex | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func small8() { // ERROR "can inline small8" | 
					
						
							|  |  |  |         // the RUnlock fast path should be inlined | 
					
						
							| 
									
										
										
										
											2019-04-01 11:58:33 -07:00
										 |  |  |         rwmutex.RUnlock() // ERROR "inlining call to sync\.\(\*RWMutex\)\.RUnlock" | 
					
						
							| 
									
										
										
										
											2018-11-13 17:08:17 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func small9() { // ERROR "can inline small9" | 
					
						
							|  |  |  |         // the RLock fast path should be inlined | 
					
						
							| 
									
										
										
										
											2019-04-01 11:58:33 -07:00
										 |  |  |         rwmutex.RLock() // ERROR "inlining call to sync\.\(\*RWMutex\)\.RLock" | 
					
						
							| 
									
										
										
										
											2018-11-13 17:08:17 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 |