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