mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	Track LLVM 15 changes.
Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque pointers still exists and we can request that on our context. We have until LLVM 16 to move to opaque pointers, a much larger change. Back-patch to 11, where LLVM support arrived. Author: Thomas Munro <thomas.munro@gmail.com> Author: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
This commit is contained in:
		
							
								
								
									
										89
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										89
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -7481,6 +7481,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes"; | |||||||
| fi | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5 | ||||||
|  | $as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; } | ||||||
|  | if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then : | ||||||
|  |   $as_echo_n "(cached) " >&6 | ||||||
|  | else | ||||||
|  |   pgac_save_CFLAGS=$CFLAGS | ||||||
|  | pgac_save_CC=$CC | ||||||
|  | CC=${CLANG} | ||||||
|  | CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers" | ||||||
|  | ac_save_c_werror_flag=$ac_c_werror_flag | ||||||
|  | ac_c_werror_flag=yes | ||||||
|  | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | ||||||
|  | /* end confdefs.h.  */ | ||||||
|  |  | ||||||
|  | int | ||||||
|  | main () | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   ; | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | _ACEOF | ||||||
|  | if ac_fn_c_try_compile "$LINENO"; then : | ||||||
|  |   pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes | ||||||
|  | else | ||||||
|  |   pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no | ||||||
|  | fi | ||||||
|  | rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext | ||||||
|  | ac_c_werror_flag=$ac_save_c_werror_flag | ||||||
|  | CFLAGS="$pgac_save_CFLAGS" | ||||||
|  | CC="$pgac_save_CC" | ||||||
|  | fi | ||||||
|  | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5 | ||||||
|  | $as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; } | ||||||
|  | if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then | ||||||
|  |   BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5 | ||||||
|  | $as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; } | ||||||
|  | if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then : | ||||||
|  |   $as_echo_n "(cached) " >&6 | ||||||
|  | else | ||||||
|  |   pgac_save_CXXFLAGS=$CXXFLAGS | ||||||
|  | pgac_save_CXX=$CXX | ||||||
|  | CXX=${CLANGXX} | ||||||
|  | CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers" | ||||||
|  | ac_save_cxx_werror_flag=$ac_cxx_werror_flag | ||||||
|  | ac_cxx_werror_flag=yes | ||||||
|  | ac_ext=cpp | ||||||
|  | ac_cpp='$CXXCPP $CPPFLAGS' | ||||||
|  | ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' | ||||||
|  | ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' | ||||||
|  | ac_compiler_gnu=$ac_cv_cxx_compiler_gnu | ||||||
|  |  | ||||||
|  | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | ||||||
|  | /* end confdefs.h.  */ | ||||||
|  |  | ||||||
|  | int | ||||||
|  | main () | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   ; | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | _ACEOF | ||||||
|  | if ac_fn_cxx_try_compile "$LINENO"; then : | ||||||
|  |   pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes | ||||||
|  | else | ||||||
|  |   pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no | ||||||
|  | fi | ||||||
|  | rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext | ||||||
|  | ac_ext=c | ||||||
|  | ac_cpp='$CPP $CPPFLAGS' | ||||||
|  | ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' | ||||||
|  | ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' | ||||||
|  | ac_compiler_gnu=$ac_cv_c_compiler_gnu | ||||||
|  |  | ||||||
|  | ac_cxx_werror_flag=$ac_save_cxx_werror_flag | ||||||
|  | CXXFLAGS="$pgac_save_CXXFLAGS" | ||||||
|  | CXX="$pgac_save_CXX" | ||||||
|  | fi | ||||||
|  | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5 | ||||||
|  | $as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; } | ||||||
|  | if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then | ||||||
|  |   BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|   NOT_THE_CFLAGS="" |   NOT_THE_CFLAGS="" | ||||||
|   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5 |   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5 | ||||||
| $as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; } | $as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; } | ||||||
|   | |||||||
| @@ -627,6 +627,9 @@ if test "$with_llvm" = yes ; then | |||||||
|   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard]) |   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard]) | ||||||
|   PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard]) |   PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard]) | ||||||
|  |  | ||||||
|  |   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers]) | ||||||
|  |   PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers]) | ||||||
|  |  | ||||||
|   NOT_THE_CFLAGS="" |   NOT_THE_CFLAGS="" | ||||||
|   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument]) |   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument]) | ||||||
|   if test -n "$NOT_THE_CFLAGS"; then |   if test -n "$NOT_THE_CFLAGS"; then | ||||||
|   | |||||||
| @@ -798,6 +798,16 @@ llvm_session_initialize(void) | |||||||
| 	LLVMInitializeNativeAsmPrinter(); | 	LLVMInitializeNativeAsmPrinter(); | ||||||
| 	LLVMInitializeNativeAsmParser(); | 	LLVMInitializeNativeAsmParser(); | ||||||
|  |  | ||||||
|  | 	/* | ||||||
|  | 	 * When targeting an LLVM version with opaque pointers enabled by | ||||||
|  | 	 * default, turn them off for the context we build our code in.  We don't | ||||||
|  | 	 * need to do so for other contexts (e.g. llvm_ts_context).  Once the IR is | ||||||
|  | 	 * generated, it carries the necessary information. | ||||||
|  | 	 */ | ||||||
|  | #if LLVM_VERSION_MAJOR > 14 | ||||||
|  | 	LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| 	 * Synchronize types early, as that also includes inferring the target | 	 * Synchronize types early, as that also includes inferring the target | ||||||
| 	 * triple. | 	 * triple. | ||||||
| @@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx, | |||||||
| 					 LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags, | 					 LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags, | ||||||
| 					 LLVMOrcCLookupSet LookupSet, size_t LookupSetSize) | 					 LLVMOrcCLookupSet LookupSet, size_t LookupSetSize) | ||||||
| { | { | ||||||
|  | #if LLVM_VERSION_MAJOR > 14 | ||||||
|  | 	LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize); | ||||||
|  | #else | ||||||
| 	LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize); | 	LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize); | ||||||
|  | #endif | ||||||
| 	LLVMErrorRef error; | 	LLVMErrorRef error; | ||||||
| 	LLVMOrcMaterializationUnitRef mu; | 	LLVMOrcMaterializationUnitRef mu; | ||||||
|  |  | ||||||
| @@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm) | |||||||
| 	 * Symbol resolution support for "special" functions, e.g. a call into an | 	 * Symbol resolution support for "special" functions, e.g. a call into an | ||||||
| 	 * SQL callable function. | 	 * SQL callable function. | ||||||
| 	 */ | 	 */ | ||||||
|  | #if LLVM_VERSION_MAJOR > 14 | ||||||
|  | 	ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL); | ||||||
|  | #else | ||||||
| 	ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL); | 	ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL); | ||||||
|  | #endif | ||||||
| 	LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen); | 	LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen); | ||||||
|  |  | ||||||
| 	return lljit; | 	return lljit; | ||||||
|   | |||||||
| @@ -58,6 +58,9 @@ endif | |||||||
|  |  | ||||||
| # XXX: Need to determine proper version of the function cflags for clang | # XXX: Need to determine proper version of the function cflags for clang | ||||||
| bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv'] | bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv'] | ||||||
|  | if llvm.version().version_compare('>=15.0') | ||||||
|  |   bitcode_cflags += ['-Xclang', '-no-opaque-pointers'] | ||||||
|  | endif | ||||||
| bitcode_cflags += cppflags | bitcode_cflags += cppflags | ||||||
|  |  | ||||||
| # XXX: Worth improving on the logic to find directories here | # XXX: Worth improving on the logic to find directories here | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user