summaryrefslogtreecommitdiffstats
path: root/cpukit/aclocal/gcc-sanity.m4
blob: 0177009e289b2ecd3992d023be34d8904a78e3fb (plain) (blame)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Some GCC sanity checks to check for known bugs in the rtems gcc toolchains

# Internal macro
# _RTEMS_GCC_WARNING(msg,cache-variable,include,main)
AC_DEFUN([_RTEMS_GCC_WARNING],[
  AC_CACHE_CHECK([$1],
    [$2],[
    AS_IF([test x"$GCC" = xyes],[
      save_CFLAGS=$CFLAGS
      CFLAGS="-Wall -Werror"])

    AC_COMPILE_IFELSE([
      AC_LANG_PROGRAM([$3],[$4])],
      [$2=yes],
      [$2=no])

    AS_IF([test x"$GCC" = xyes],[
      CFLAGS=$save_CFLAGS])
  ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRIxPTR],[
  _RTEMS_GCC_WARNING(
    [if printf("%" PRIxPTR, uintptr_t) works],
    [rtems_cv_PRIxPTR],[
      #include <inttypes.h>
      #include <stdio.h>
    ],[
      uintptr_t ptr = 42;
      printf("%" PRIxPTR "\n", ptr);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRIuPTR],[
  _RTEMS_GCC_WARNING(
    [if printf("%" PRIuPTR, uintptr_t) works],
    [rtems_cv_PRIuPTR],[
      #include <inttypes.h>
      #include <stdio.h>
    ],[
      uintptr_t ptr = 42;
      printf("%" PRIuPTR "\n", ptr);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRIdPTR],[
  _RTEMS_GCC_WARNING(
    [if printf("%" PRIdPTR, intptr_t) works],
    [rtems_cv_PRIdPTR],[
      #include <inttypes.h>
      #include <stdio.h>
    ],[
      intptr_t ptr = -1;
      printf("%" PRIdPTR "\n", ptr);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_ZU_SIZE_T],[
  _RTEMS_GCC_WARNING(
    [if printf("%zu", size_t) works],
    [rtems_cv_PRINTF_ZU_SIZE_T],[
      #include <sys/types.h>
      #include <stdio.h>
    ],[
      size_t sz = 1;
      printf("%zu\n", sz);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_ZD_SSIZE_T],[
  _RTEMS_GCC_WARNING(
    [if printf("%zd", ssize_t) works],
    [rtems_cv_PRINTF_ZD_SSIZE_T],[
      #include <sys/types.h>
      #include <stdio.h>
    ],[
      ssize_t sz = 1;
      printf("%zd\n", sz);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_LD_OFF_T],[
  _RTEMS_GCC_WARNING(
    [if printf("%ld", off_t) works],
    [rtems_cv_PRINTF_LD_OFF_T],[
       #include <sys/types.h>
       #include <stdio.h>
    ],[
      off_t off = 1;
      printf("%ld\n", off);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_LLD_OFF_T],[
  _RTEMS_GCC_WARNING(
    [if printf("%lld", off_t) works],
    [rtems_cv_PRINTF_LLD_OFF_T],[
       #include <sys/types.h>
       #include <stdio.h>
    ],[
      off_t off = 1;
      printf("%lld\n", off);
    ])
])

AC_DEFUN([RTEMS_CHECK_GCC_SANITY],[
RTEMS_CHECK_GCC_PRIxPTR
RTEMS_CHECK_GCC_PRIuPTR
RTEMS_CHECK_GCC_PRIdPTR
RTEMS_CHECK_GCC_PRINTF_ZU_SIZE_T
RTEMS_CHECK_GCC_PRINTF_ZD_SSIZE_T
RTEMS_CHECK_GCC_PRINTF_LD_OFF_T
RTEMS_CHECK_GCC_PRINTF_LLD_OFF_T
])