From patchwork Thu Jul 10 08:25:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Newton X-Patchwork-Id: 1995 Received: (qmail 28868 invoked by alias); 10 Jul 2014 08:25:55 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 28852 invoked by uid 89); 10 Jul 2014 08:25:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f45.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=v8Ds3pzwURRDtSMBWYQskOme/B5VMjJF6RsgbGNK+2A=; b=iYiURmHfTlfnHDS3tq+VGcXQgPunPZjpEXpBO62D6U5izHBpOfYNu6/50knm/CZM/b uxHAhxTMGhSMtj1LmkDeKi0oNgLMuJuKBZZlivuQyc2K7+Uu9pedx9FMEb9dpuRa1Nt9 Id3TyqXXvzNCABryGRU2LHxIaa8nePWqgAava1VlvfZqYTlXZv0s5JyoRpEDUkF4aEws TlJQf0dSJittb79U16piYZlCoEN2LG7RWT3xzPnb8x8kobzQjvJmKN31+HG/kgiGxzdr iBuRVE3eI+8MMeD7z+PyGBPbVUfn0cYnyAFBkQu0aRSBF5e90I9HTJIi5/Et7bRgjIi2 B6ww== X-Gm-Message-State: ALoCoQlKlmeQwNauPzUAsO96ZOovrodnuvkXTjBs5xbwTqTh9wTJ+VXFOiA5rCaaRdapMTBO6Rbl X-Received: by 10.180.89.69 with SMTP id bm5mr17491353wib.41.1404980749602; Thu, 10 Jul 2014 01:25:49 -0700 (PDT) From: Will Newton To: libc-alpha@sourceware.org Subject: [PATCH] iconv/loop.c: Fix -Wundef warning with !_STRING_ARCH_unaligned Date: Thu, 10 Jul 2014 09:25:44 +0100 Message-Id: <1404980744-22418-1-git-send-email-will.newton@linaro.org> If code is required to handle the unaligned case then loop.c includes itself and relies on the #undefs at the end of the file to avoid outputting two copies of LOOPFCT and gconv_btowc. However MAX_NEEDED_INPUT is tested with #if so this causes a warning. Reorder the code so that the function definitions are in an #else block to make the behaviour clearer and fix the warning. Verified that code is unchanged on x86_64 and arm. ChangeLog: 2014-07-10 Will Newton * iconv/loop.c: Move definition of LOOPFCT and gconv_btowc into an #else block. --- iconv/loop.c | 59 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/iconv/loop.c b/iconv/loop.c index f86f627..a480c0c 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -354,12 +354,10 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step, # define DEFINE_UNALIGNED # include "loop.c" # undef DEFINE_UNALIGNED -#endif - - -#if MAX_NEEDED_INPUT > 1 -# define SINGLE(fct) SINGLE2 (fct) -# define SINGLE2(fct) fct##_single +#else +# if MAX_NEEDED_INPUT > 1 +# define SINGLE(fct) SINGLE2 (fct) +# define SINGLE2(fct) fct##_single static inline int __attribute ((always_inline)) SINGLE(LOOPFCT) (struct __gconv_step *step, @@ -369,37 +367,37 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, size_t *irreversible EXTRA_LOOP_DECLS) { mbstate_t *state = step_data->__statep; -#ifdef LOOP_NEED_FLAGS +# ifdef LOOP_NEED_FLAGS int flags = step_data->__flags; -#endif -#ifdef LOOP_NEED_DATA +# endif +# ifdef LOOP_NEED_DATA void *data = step->__data; -#endif +# endif int result = __GCONV_OK; unsigned char bytebuf[MAX_NEEDED_INPUT]; const unsigned char *inptr = *inptrp; unsigned char *outptr = *outptrp; size_t inlen; -#ifdef INIT_PARAMS +# ifdef INIT_PARAMS INIT_PARAMS; -#endif +# endif -#ifdef UNPACK_BYTES +# ifdef UNPACK_BYTES UNPACK_BYTES -#else +# else /* Add the bytes from the state to the input buffer. */ assert ((state->__count & 7) <= sizeof (state->__value)); for (inlen = 0; inlen < (size_t) (state->__count & 7); ++inlen) bytebuf[inlen] = state->__value.__wchb[inlen]; -#endif +# endif /* Are there enough bytes in the input buffer? */ if (MIN_NEEDED_INPUT > 1 && __builtin_expect (inptr + (MIN_NEEDED_INPUT - inlen) > inend, 0)) { *inptrp = inend; -#ifdef STORE_REST +# ifdef STORE_REST while (inptr < inend) bytebuf[inlen++] = *inptr++; @@ -408,12 +406,12 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, inend = &bytebuf[inlen]; STORE_REST -#else +# else /* We don't have enough input for another complete input character. */ while (inptr < inend) state->__value.__wchb[inlen++] = *inptr++; -#endif +# endif return __GCONV_INCOMPLETE_INPUT; } @@ -453,11 +451,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, result = __GCONV_OK; /* Clear the state buffer. */ -#ifdef CLEAR_STATE +# ifdef CLEAR_STATE CLEAR_STATE; -#else +# else state->__count &= ~7; -#endif +# endif } else if (result == __GCONV_INCOMPLETE_INPUT) { @@ -466,11 +464,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, assert (inend != &bytebuf[MAX_NEEDED_INPUT]); *inptrp += inend - bytebuf - (state->__count & 7); -#ifdef STORE_REST +# ifdef STORE_REST inptrp = &inptr; STORE_REST -#else +# else /* We don't have enough input for another complete input character. */ assert (inend - inptr > (state->__count & ~7)); @@ -479,24 +477,25 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, inlen = 0; while (inptr < inend) state->__value.__wchb[inlen++] = *inptr++; -#endif +# endif } return result; } -# undef SINGLE -# undef SINGLE2 -#endif +# undef SINGLE +# undef SINGLE2 +# endif -#ifdef ONEBYTE_BODY +# ifdef ONEBYTE_BODY /* Define the shortcut function for btowc. */ static wint_t gconv_btowc (struct __gconv_step *step, unsigned char c) ONEBYTE_BODY -# define FROM_ONEBYTE gconv_btowc -#endif +# define FROM_ONEBYTE gconv_btowc +# endif +#endif /* We remove the macro definitions so that we can include this file again for the definition of another function. */