Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0b974db

Browse files
committed
Add configure infrastructure to detect support for C99's restrict.
Will be used in later commits improving performance for a few keyroutines where information about aliasing allows for significantlybetter code generation.This allows to use the C99 'restrict' keyword without breaking C89, orfor that matter C++, compilers. If not supported it's defined to beempty.Author: Andres FreundDiscussion:https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
1 parent5fa6b0d commit0b974db

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

‎configure

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11545,6 +11545,52 @@ _ACEOF
1154511545
;;
1154611546
esac
1154711547

11548+
{$as_echo"$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword">&5
11549+
$as_echo_n"checking for C/C++ restrict keyword...">&6; }
11550+
if${ac_cv_c_restrict+:}false;then:
11551+
$as_echo_n"(cached)">&6
11552+
else
11553+
ac_cv_c_restrict=no
11554+
# The order here caters to the fact that C++ does not require restrict.
11555+
forac_kwin __restrict __restrict__ _Restrict restrict;do
11556+
cat confdefs.h -<<_ACEOF >conftest.$ac_ext
11557+
/* end confdefs.h. */
11558+
typedef int * int_ptr;
11559+
int foo (int_ptr$ac_kw ip) {
11560+
return ip[0];
11561+
}
11562+
int
11563+
main ()
11564+
{
11565+
int s[1];
11566+
int *$ac_kw t = s;
11567+
t[0] = 0;
11568+
return foo(t)
11569+
;
11570+
return 0;
11571+
}
11572+
_ACEOF
11573+
if ac_fn_c_try_compile"$LINENO";then:
11574+
ac_cv_c_restrict=$ac_kw
11575+
fi
11576+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
11577+
test"$ac_cv_c_restrict"!= no&&break
11578+
done
11579+
11580+
fi
11581+
{$as_echo"$as_me:${as_lineno-$LINENO}: result:$ac_cv_c_restrict">&5
11582+
$as_echo"$ac_cv_c_restrict">&6; }
11583+
11584+
case$ac_cv_c_restrictin
11585+
restrict) ;;
11586+
no)$as_echo"#define restrict /**/">>confdefs.h
11587+
;;
11588+
*) cat>>confdefs.h<<_ACEOF
11589+
#define restrict$ac_cv_c_restrict
11590+
_ACEOF
11591+
;;
11592+
esac
11593+
1154811594
{$as_echo"$as_me:${as_lineno-$LINENO}: checking for printf format archetype">&5
1154911595
$as_echo_n"checking for printf format archetype...">&6; }
1155011596
if${pgac_cv_printf_archetype+:}false;then:

‎configure.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,7 @@ fi
12991299
m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that.
13001300
AC_C_BIGENDIAN
13011301
AC_C_INLINE
1302+
AC_C_RESTRICT
13021303
PGAC_PRINTF_ARCHETYPE
13031304
AC_C_FLEXIBLE_ARRAY_MEMBER
13041305
PGAC_C_SIGNED

‎src/include/pg_config.h.in

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,20 @@
923923
if such a type exists, and if the system does not define it. */
924924
#undef intptr_t
925925

926+
/* Define to the equivalent of the C99 'restrict' keyword, or to
927+
nothing if this is not supported. Do not define if restrict is
928+
supported directly. */
929+
#undef restrict
930+
/* Work around a bug in Sun C++: it does not support _Restrict or
931+
__restrict__, even though the corresponding Sun C compiler ends up with
932+
"#define restrict _Restrict" or "#define restrict __restrict__" in the
933+
previous line. Perhaps some future version of Sun C++ will work with
934+
restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
935+
#if defined__SUNPRO_CC&& !defined__RESTRICT
936+
# define_Restrict
937+
# define__restrict__
938+
#endif
939+
926940
/* Define to empty if the C compiler does not understand signed types. */
927941
#undef signed
928942

‎src/include/pg_config.h.win32

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,17 @@
681681
#define inline __inline
682682
#endif
683683

684+
/* Define to the equivalent of the C99 'restrict' keyword, or to
685+
nothing if this is not supported. Do not define if restrict is
686+
supported directly. */
687+
/* Visual Studio 2008 and upwards */
688+
#if (_MSC_VER >= 1500)
689+
/* works for C and C++ in msvc */
690+
#define restrict __restrict
691+
#else
692+
#define restrict
693+
#endif
694+
684695
/* Define to empty if the C compiler does not understand signed types. */
685696
/* #undef signed */
686697

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp