1 // P0001R1 - C++17 removal of register keyword
2 // { dg-do compile }
3 
4 #if defined(__i386__) || defined(__x86_64__)
5 #define REG1 "ebx"
6 #define REG2 "edi"
7 #endif
8 
9 #ifdef REG1
10 register int a __asm (REG1);	// { dg-bogus "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
11 #endif
12 register int b;			// { dg-error "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
13 register int c ();		// { dg-error "1:storage class 'register' invalid for function" }
foo(register int d)14 int foo (register int d)	// { dg-error "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
15 {
16   return d;
17 }
bar()18 int bar ()
19 {
20 #ifdef REG2
21   register int e __asm (REG2);	// { dg-bogus "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
22 #else
23   int e;
24 #endif
25   register int f;		// { dg-error "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
26   e = 6;
27   f = 7;
28   return e + f;
29 }
30