1 1.6 rillig /* $NetBSD: d_c99_complex_split.c,v 1.6 2021/04/09 21:07:39 rillig Exp $ */ 2 1.3 rillig # 3 "d_c99_complex_split.c" 3 1.3 rillig 4 1.5 rillig /* 5 1.5 rillig * Checks that the real and imaginary parts of a complex number can be 6 1.5 rillig * accessed (since C99). 7 1.5 rillig */ 8 1.5 rillig 9 1.4 rillig int 10 1.4 rillig b(double a) 11 1.4 rillig { 12 1.2 christos return a == 0; 13 1.2 christos } 14 1.4 rillig 15 1.4 rillig void 16 1.4 rillig a(void) 17 1.4 rillig { 18 1.4 rillig double _Complex z = 0; 19 1.4 rillig if (b(__real__ z) && b(__imag__ z)) 20 1.4 rillig return; 21 1.1 christos } 22 1.6 rillig 23 1.6 rillig void sink(double _Complex); 24 1.6 rillig 25 1.6 rillig void 26 1.6 rillig set_complex_complete(double re, double im) 27 1.6 rillig { 28 1.6 rillig double _Complex c; 29 1.6 rillig 30 1.6 rillig __real__ c = re; /* FIXME *//* expect: may be used before set */ 31 1.6 rillig __imag__ c = im; 32 1.6 rillig sink(c); 33 1.6 rillig } 34 1.6 rillig 35 1.6 rillig void 36 1.6 rillig set_complex_only_real(double re) 37 1.6 rillig { 38 1.6 rillig double _Complex c; 39 1.6 rillig 40 1.6 rillig __real__ c = re; /* FIXME *//* expect: may be used before set */ 41 1.6 rillig /* __imag__ c is left uninitialized */ 42 1.6 rillig sink(c); /* XXX: may be used before set */ 43 1.6 rillig } 44 1.6 rillig 45 1.6 rillig void 46 1.6 rillig set_complex_only_imag(double im) 47 1.6 rillig { 48 1.6 rillig double _Complex c; 49 1.6 rillig 50 1.6 rillig /* __real__ c is left uninitialized */ 51 1.6 rillig __imag__ c = im; /* FIXME *//* expect: may be used before set */ 52 1.6 rillig sink(c); /* XXX: may be used before set */ 53 1.6 rillig } 54