mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			111 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
| // PR c++/
 | |
| // { dg-do run }
 | |
| // { dg-additional-options "-std=c++0x" }
 | |
| 
 | |
| extern "C" void abort ();
 | |
| int cnt;
 | |
| 
 | |
| template <typename T>
 | |
| void
 | |
| f0 (T, int)
 | |
| {
 | |
|   abort ();
 | |
| }
 | |
| 
 | |
| template <>
 | |
| void
 | |
| f0<int> (int, int type)
 | |
| {
 | |
|   if (type != 0)
 | |
|     abort ();
 | |
| #pragma omp atomic
 | |
|   cnt++;
 | |
| }
 | |
| 
 | |
| template <>
 | |
| void
 | |
| f0<const char *> (const char *, int type)
 | |
| {
 | |
|   if (type != 1)
 | |
|     abort ();
 | |
| #pragma omp atomic
 | |
|   cnt++;
 | |
| }
 | |
| 
 | |
| template <typename T>
 | |
| void
 | |
| f1 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = 0; i < 10; i++)
 | |
|     f0 (i, 0);
 | |
| }
 | |
| 
 | |
| template <typename T>
 | |
| void
 | |
| f2 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = T (0); i < T (10); i += T (1))
 | |
|     f0 (i, 0);
 | |
| }
 | |
| 
 | |
| void
 | |
| f3 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = 0; i < 10; i++)
 | |
|     f0 (i, 0);
 | |
| }
 | |
| 
 | |
| const char *p = "abcdefghij";
 | |
| 
 | |
| template <typename T>
 | |
| void
 | |
| f4 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = p; i < p + 10; i++)
 | |
|     f0 (i, 1);
 | |
| }
 | |
| 
 | |
| template <typename T>
 | |
| void
 | |
| f5 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = T (p); i < T (p + 10); i++)
 | |
|     f0 (i, 1);
 | |
| }
 | |
| 
 | |
| void
 | |
| f6 ()
 | |
| {
 | |
| #pragma omp parallel for
 | |
|   for (auto i = p; i < p + 10; i++)
 | |
|     f0 (i, 1);
 | |
| }
 | |
| 
 | |
| int
 | |
| main ()
 | |
| {
 | |
|   f1<int> ();
 | |
|   if (cnt != 10)
 | |
|     abort ();
 | |
|   f2<int> ();
 | |
|   if (cnt != 20)
 | |
|     abort ();
 | |
|   f3 ();
 | |
|   if (cnt != 30)
 | |
|     abort ();
 | |
|   f4<int> ();
 | |
|   if (cnt != 40)
 | |
|     abort ();
 | |
|   f5<const char *> ();
 | |
|   if (cnt != 50)
 | |
|     abort ();
 | |
|   f6 ();
 | |
|   if (cnt != 60)
 | |
|     abort ();
 | |
| }
 |