mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			53 lines
		
	
	
		
			742 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			742 B
		
	
	
	
		
			C
		
	
	
	
| // PR c++/33894
 | |
| // { dg-do run }
 | |
| 
 | |
| extern "C" void abort ();
 | |
| 
 | |
| int check;
 | |
| 
 | |
| template<typename T> void
 | |
| foo ()
 | |
| {
 | |
|   #pragma omp atomic
 | |
|   check |= sizeof (T);
 | |
| }
 | |
| 
 | |
| template<typename T> void
 | |
| bar (T *x, T y)
 | |
| {
 | |
|   #pragma omp atomic
 | |
|   *x += y;
 | |
| }
 | |
| 
 | |
| template<typename T> void
 | |
| baz ()
 | |
| {
 | |
|   #pragma omp atomic
 | |
|   check++;
 | |
| }
 | |
| 
 | |
| int
 | |
| main ()
 | |
| {
 | |
|   int i = 0;
 | |
|   long l = 0;
 | |
| 
 | |
|   check = 0;
 | |
|   foo<char> ();
 | |
|   if (check != sizeof (char))
 | |
|     abort ();
 | |
|   foo<short> ();
 | |
|   if (check != (sizeof (char) | sizeof (short)))
 | |
|     abort ();
 | |
|   bar(&i, 4);
 | |
|   bar(&l, 8L);
 | |
|   if (i != 4 || l != 8L)
 | |
|     abort ();
 | |
|   baz<char> ();
 | |
|   if (check != (sizeof (char) | sizeof (short)) + 1)
 | |
|     abort ();
 | |
|   baz<long double> ();
 | |
|   if (check != (sizeof (char) | sizeof (short)) + 2)
 | |
|     abort ();
 | |
| }
 |