From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id ED742644CFC; Tue, 3 Oct 2023 18:11:46 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org ED742644CFC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1696345907; bh=hpcwzJuScGYHS238zPcsu9qcCZrbxVWt2zGsO3Cg4R0=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=O+UHEKsrrRjMBUlIRmcup77t073MzHnfk1eIsOMpzAaaJ2ZXrfyVy/dynOcEtu3s5 C2cp2Gizy3b8Dv91X4/8f/WkqQIMLpoWjHMmQIRkmSvp7dNN1TccLfoB5FafH94oyW CcCbcLZbvsK0d09C2+BC8cqIf4Zfxf0/7OhNYxQ0= Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id BA0E4644CFC for ; Tue, 3 Oct 2023 18:11:45 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org BA0E4644CFC Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-5041335fb9cso1232900e87.0 for ; Tue, 03 Oct 2023 08:11:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696345905; x=1696950705; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=E8E8pZF0Dr3CA2owNjRQUdOVW7fnOyENsSRHL1d0KM0=; b=eBaiJDgk3QwgBSn6YAmZeFm2jK4QaPwHLEMkCBdNxlrN8S5ec2ZMvBRJ/Vw3PYMJ8c 43wmWGlmo0ILc1/32dwZq7npiLbu8EubFVPafZorjGX3LJUOvnSNr1RLjkF+hbmkssVs 1rPtGklQZ42KkHc9/VrP4Ij5xKgeu5OuwkSVhPG7uhBspE9q6JMITtpK1tHa+HDZYCQP RYXH7t56YWtLTROr3V3BLSeOewXOTMGRvOR02nLNTMSm5utKCgwpoO/61xO2BwaEF7k6 Cm+KSUfBUrdWNOX/e5ikK2SCy8EI18TjMO1HHKI0fkmn5Atc4rgP3efTwo07irddznog ZAcQ== X-Gm-Message-State: AOJu0YxzukjOlIsz9oLYW01DKet2oXvIKwRNO8ZF4bdT7ttM/xqk/2Mz f9VUI4YPSg3WhlKeFpXn6qlOTUE/zRc= X-Google-Smtp-Source: AGHT+IFtWQtFCn0ucHEEK1FtP3VDCkUPdbap4S21kticxHzcu69VS1n5Dy8wJgrATElzuSRulyHwlg== X-Received: by 2002:ac2:48b4:0:b0:505:70fd:9711 with SMTP id u20-20020ac248b4000000b0050570fd9711mr8627630lfg.68.1696345904335; Tue, 03 Oct 2023 08:11:44 -0700 (PDT) Received: from localhost.localdomain ([185.205.79.32]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b005008cd9396bsm224456lfo.25.2023.10.03.08.11.36 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 03 Oct 2023 08:11:42 -0700 (PDT) To: tarantool-patches@dev.tarantool.org, sergeyb@tarantool.org, skaplun@tarantool.org, m.kokryashkin@tarantool.org Date: Tue, 3 Oct 2023 18:11:32 +0300 Message-Id: <20231003151133.13730-1-max.kokryashkin@gmail.com> X-Mailer: git-send-email 2.39.3 (Apple Git-145) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH luajit] Fix Clang build. X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maksim Kokryashkin via Tarantool-patches Reply-To: Maksim Kokryashkin Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" From: Mike Pall (cherry-picked from commit 384d6d56f4a3841fdef607a511dda92a579af2ff) The `__GNUC__` macro signals that GNU extensions are supported by a compiler. Some versions of the clang compiler (clang 10.0.0 targeting the MSVC ABI, for example) may not define that macro. However, they still support the GNU extensions. This patch fixes the build for those compilers by checking the `__clang__` macro value alongside `__GNUC__`. Part of the patch relevant to 'lj_err.c' is omitted since all of the required changes were already backported in the scope of the patch b6d285214db9892aaef838950d200f395c93fe2d ('Cleanup and enable external unwinding for more platforms.'). No tests were added since the issue is relevant for a very specific type of very old clang 10.0.0, which is not really relevant for us. Maxim Kokryashkin: * added the description for the problem Part of tarantool/tarantool#9145 --- PR: https://github.com/tarantool/tarantool/pull/9215 Branch: https://github.com/tarantool/luajit/tree/fckxorg/lj-595-fix-clang-build Issue: https://github.com/luajit/luajit/issues/595 src/lj_alloc.c | 2 +- src/lj_def.h | 4 ++-- src/lj_emit_x86.h | 2 +- src/lj_ircall.h | 2 +- src/lj_mcode.c | 2 +- src/lj_strfmt.h | 2 +- src/lj_strscan.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lj_alloc.c b/src/lj_alloc.c index 9e2fb1f6..f82c9854 100644 --- a/src/lj_alloc.c +++ b/src/lj_alloc.c @@ -610,7 +610,7 @@ static int has_segment_link(mstate m, msegmentptr ss) noncontiguous segments are added. */ #define TOP_FOOT_SIZE\ - (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) + (align_offset(TWO_SIZE_T_SIZES)+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) /* ---------------------------- Indexing Bins ---------------------------- */ diff --git a/src/lj_def.h b/src/lj_def.h index ba4dcc9d..a5bca6b0 100644 --- a/src/lj_def.h +++ b/src/lj_def.h @@ -120,7 +120,7 @@ typedef uintptr_t BloomFilter; #define bloomset(b, x) ((b) |= bloombit((x))) #define bloomtest(b, x) ((b) & bloombit((x))) -#if defined(__GNUC__) || defined(__psp2__) +#if defined(__GNUC__) || defined(__clang__) || defined(__psp2__) #define LJ_NORET __attribute__((noreturn)) #define LJ_ALIGN(n) __attribute__((aligned(n))) @@ -182,7 +182,7 @@ static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) { return ((uint64_t)lj_bswap((uint32_t)x)<<32) | lj_bswap((uint32_t)(x>>32)); } -#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) +#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __clang__ static LJ_AINLINE uint32_t lj_bswap(uint32_t x) { return (uint32_t)__builtin_bswap32((int32_t)x); diff --git a/src/lj_emit_x86.h b/src/lj_emit_x86.h index eaef17fc..f4990151 100644 --- a/src/lj_emit_x86.h +++ b/src/lj_emit_x86.h @@ -45,7 +45,7 @@ static LJ_AINLINE MCode *emit_op(x86Op xo, Reg rr, Reg rb, Reg rx, *(uint32_t *)(p+delta-5) = (uint32_t)xo; return p+delta-5; } -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) if (__builtin_constant_p(xo) && n == -2) p[delta-2] = (MCode)(xo >> 24); else if (__builtin_constant_p(xo) && n == -3) diff --git a/src/lj_ircall.h b/src/lj_ircall.h index 9c195918..7746965a 100644 --- a/src/lj_ircall.h +++ b/src/lj_ircall.h @@ -332,7 +332,7 @@ extern double lj_vm_sfmax(double a, double b); #endif #if LJ_HASFFI && LJ_NEED_FP64 && !(LJ_TARGET_ARM && LJ_SOFTFP) -#ifdef __GNUC__ +#if defined(__GNUC__) || defined(__clang__) #define fp64_l2d __floatdidf #define fp64_ul2d __floatundidf #define fp64_l2f __floatdisf diff --git a/src/lj_mcode.c b/src/lj_mcode.c index a88d16bd..33ca2396 100644 --- a/src/lj_mcode.c +++ b/src/lj_mcode.c @@ -44,7 +44,7 @@ void lj_mcode_sync(void *start, void *end) sys_icache_invalidate(start, (char *)end-(char *)start); #elif LJ_TARGET_PPC lj_vm_cachesync(start, end); -#elif defined(__GNUC__) +#elif defined(__GNUC__) || defined(__clang__) __clear_cache(start, end); #else #error "Missing builtin to flush instruction cache" diff --git a/src/lj_strfmt.h b/src/lj_strfmt.h index 0e1d8946..d3b3a0ae 100644 --- a/src/lj_strfmt.h +++ b/src/lj_strfmt.h @@ -118,7 +118,7 @@ LJ_FUNC GCstr * LJ_FASTCALL lj_strfmt_obj(lua_State *L, cTValue *o); LJ_FUNC const char *lj_strfmt_pushvf(lua_State *L, const char *fmt, va_list argp); LJ_FUNC const char *lj_strfmt_pushf(lua_State *L, const char *fmt, ...) -#ifdef __GNUC__ +#if defined(__GNUC__) || defined(__clang__) __attribute__ ((format (printf, 2, 3))) #endif ; diff --git a/src/lj_strscan.c b/src/lj_strscan.c index 47fab239..ae8945e1 100644 --- a/src/lj_strscan.c +++ b/src/lj_strscan.c @@ -79,7 +79,7 @@ static void strscan_double(uint64_t x, TValue *o, int32_t ex2, int32_t neg) /* Avoid double rounding for denormals. */ if (LJ_UNLIKELY(ex2 <= -1075 && x != 0)) { /* NYI: all of this generates way too much code on 32 bit CPUs. */ -#if defined(__GNUC__) && LJ_64 +#if (defined(__GNUC__) || defined(__clang__)) && LJ_64 int32_t b = (int32_t)(__builtin_clzll(x)^63); #else int32_t b = (x>>32) ? 32+(int32_t)lj_fls((uint32_t)(x>>32)) : -- 2.39.3 (Apple Git-145)