mwrap (Perl version) user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
From: Eric Wong <e@80x24.org>
To: mwrap-perl@80x24.org
Subject: [PATCH 1/6] test cfree and aligned_alloc aliases
Date: Tue, 15 Nov 2022 19:33:36 +0000	[thread overview]
Message-ID: <20221115193341.3948245-2-e@80x24.org> (raw)
In-Reply-To: <20221115193341.3948245-1-e@80x24.org>

These aliases aren't necessary for modern glibc, at least,
but they also don't hurt.  This quiets an old warning about
cfree.
---
 .gitignore |  1 +
 Mwrap.xs   |  4 +++-
 t/mwrap.t  | 31 +++++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 10623de..c228ee1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
 /blib
 /pm_to_blib
 /config.mak
+/_Inline
diff --git a/Mwrap.xs b/Mwrap.xs
index 31e9394..518edb1 100644
--- a/Mwrap.xs
+++ b/Mwrap.xs
@@ -542,8 +542,10 @@ int posix_memalign(void **p, size_t alignment, size_t size)
 	return internal_memalign(p, alignment, size, RETURN_ADDRESS(0));
 }
 
+/* these aliases aren't needed for glibc, not sure about other libcs... */
 void *aligned_alloc(size_t, size_t) __attribute__((alias("memalign")));
-void cfree(void *) __attribute__((alias("free")));
+void cfree(void *) __attribute__((__nothrow__))
+		__attribute__((__leaf__)) __attribute__((alias("free")));
 
 void *valloc(size_t size)
 {
diff --git a/t/mwrap.t b/t/mwrap.t
index c6e589c..0bb3ea8 100644
--- a/t/mwrap.t
+++ b/t/mwrap.t
@@ -141,6 +141,37 @@ diag slurp($out);
 is(Devel::Mwrap::quiet(1), 0, 'was not quiet, before');
 is(Devel::Mwrap::quiet(0), 1, 'was quiet, before');
 
+SKIP: {
+	eval { require Inline::C } or skip 'Inline::C not available', 1;
+	$ENV{TEST_ALIASES} or skip 'TEST_ALIASES unset', 1;
+	my $c_src = <<'EOM';
+#include <stdlib.h>
+void cfree(void *); /* lold glibc version */
+int test_aliases()
+{
+	size_t i;
+	void *p;
+	for (i = 0; i < 100; i++) {
+		if (i % 3 == 0)
+			p = aligned_alloc(64, i);
+		else
+			p = malloc(i);
+		if (i % 2 == 0)
+			cfree(p);
+		else
+			free(p);
+	}
+	return 3;
+}
+EOM
+	eval <<'EOM';
+use Inline C => $c_src, BUILD_NOISY => 1
+EOM
+	BAIL_OUT "cannot build $@" if $@;
+	is(test_aliases(), 3,
+		'aligned_alloc + cfree function ran w/o crashing');
+};
+
 done_testing();
 
 sub slurp {

  reply	other threads:[~2022-11-15 19:33 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-15 19:33 [PATCH 0/6] bugfixes, workarounds, and built-in malloc Eric Wong
2022-11-15 19:33 ` Eric Wong [this message]
2022-11-15 19:33 ` [PATCH 2/6] Devel::Mwrap::reset is a no-op if `totals' not initialized Eric Wong
2022-11-15 19:33 ` [PATCH 3/6] block signals when spawning URCU-related threads Eric Wong
2022-11-15 19:33 ` [PATCH 4/6] document of kbuf allocation size Eric Wong
2022-11-15 19:33 ` [PATCH 5/6] mwrap-perl: use grep and fix regexp Eric Wong
2022-11-15 19:33 ` [PATCH 6/6] split out mwrap_core.h and use provide our own malloc Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221115193341.3948245-2-e@80x24.org \
    --to=e@80x24.org \
    --cc=mwrap-perl@80x24.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mwrap-perl.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).