File: builtin-cproj-2.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (46 lines) | stat: -rw-r--r-- 1,296 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* Copyright (C) 2010  Free Software Foundation.

   Verify that folding of built-in cproj is correctly performed by the
   compiler.  With -ffinite-math-only all cproj calls should be
   eliminated regardless of what the argument is, or what is known
   about it.

   Origin: Kaveh R. Ghazi,  April 9, 2010.  */

/* { dg-do link } */
/* { dg-options "-ffinite-math-only" } */

/* All references to link_error should go away at compile-time.  The
   argument is the __LINE__ number.  It appears in the tree dump file
   and aids in debugging should any of the tests fail.  */
extern void link_error(int);

#define CPROJ(X) __builtin_cproj(X)
#define CPROJF(X) __builtin_cprojf(X)
#define CPROJL(X) __builtin_cprojl(X)

/* Test that the supplied expressions eliminte the cproj call.  */
#define TEST_EXPRS(LD_EXPR, D_EXPR, F_EXPR) do { \
  if (CPROJF(F_EXPR) != (F_EXPR)) \
    link_error (__LINE__); \
  if (CPROJ(D_EXPR) != (D_EXPR)) \
    link_error (__LINE__); \
  if (CPROJL(LD_EXPR) != (LD_EXPR)) \
    link_error (__LINE__); \
} while (0)

void foo (_Complex long double cld, _Complex double cd, _Complex float cf)
{
#ifdef __OPTIMIZE__
  TEST_EXPRS (cld, cd, cf);
  TEST_EXPRS (cld*2, cd*2, cf*2);
  TEST_EXPRS (cld*cld, cd*cd, cf*cf);
#endif

  return;
}

int main (void)
{
  return 0;
}