[gcc r17-2318] c++: modules: Allow for EOPNOTSUPP error from posix_fallocate

Rainer Orth via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:940db23b6b8461a97eead393a1adf85ef0905862

commit r17-2318-g940db23b6b8461a97eead393a1adf85ef0905862
Author: Rainer Orth <[email protected]>
Date:   Fri Jul 10 19:12:55 2026 +0200

    c++: modules: Allow for EOPNOTSUPP error from posix_fallocate
    
    All g++/modules tests SEGV on NetBSD/amd64 in a ZFS build directory.
    This is similar to the FreeBSD case:
    
    commit a94156b8ee7165c32f73f9cd11c9b8f3b8687d3b
    Author: Rainer Orth <[email protected]>
    Date:   Tue May 5 10:23:12 2026 +0200
    
        c++: modules: Fix posix_fallocate error handling
    
    However, posix_fallocate returns EOPNOTSUPP here, which is distinct from
    ENOTSUP.
    
    This patch allows for both, providing a fallback definition since
    EOPNOTSUPP may be missing.
    
    Bootstrapped without regressions on amd64-pc-netbsd10.1,
    x86_64-pc-linux-gnu, and i386-pc-solaris2.11.
    
    2026-07-08  Rainer Orth  <[email protected]>
    
            gcc/cp:
            * module.cc (EOPNOTSUPP): Provide fallback.
            (elf_out::create_mapping) [HAVE_POSIX_FALLOCATE]: Allow for
            EOPNOTSUPP result.

Diff:
---
 gcc/cp/module.cc | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index f250dc3e9dfe..da0e0e0aae3a 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -258,6 +258,11 @@ Classes used:
 #endif
 #endif
 
+/* Provide fallback.  */
+#ifndef EOPNOTSUPP
+#define EOPNOTSUPP ENOTSUP
+#endif
+
 /* Some open(2) flag differences, what a colourful world it is!  */
 #if defined (O_CLOEXEC)
 // OK
@@ -1912,7 +1917,7 @@ elf_out::create_mapping (unsigned ext, bool extending)
     {
 #ifdef HAVE_POSIX_FALLOCATE
       int result = posix_fallocate (fd, offset, length);
-      if (result != EINVAL && result != ENOTSUP)
+      if (result != EINVAL && result != ENOTSUP && result != EOPNOTSUPP)
 	return result == 0;
       /* Not supported by the underlying filesystem, fallback to ftruncate.  */
 #endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.