From: Guus Sliepen Date: Mon, 8 Oct 2018 19:27:08 +0000 (+0200) Subject: Fix the compiler attribute test to work with Clang. X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5c76d51d0badd8a35e3883f18a5792e830448768;p=oweals%2Ftinc.git Fix the compiler attribute test to work with Clang. Clang doesn't like the __nonnull__ attribute being applied to functions that don't take pointer arguments, and this causes errors when running the configure script. --- diff --git a/m4/attribute.m4 b/m4/attribute.m4 index 9d673e9..3228deb 100644 --- a/m4/attribute.m4 +++ b/m4/attribute.m4 @@ -9,8 +9,8 @@ AC_DEFUN([tinc_ATTRIBUTE], CFLAGS="$CFLAGS -Wall -Werror" AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [void *test(void) __attribute__ (($1)); - void *test(void) { return (void *)0; } + [void *test(void *x) __attribute__ (($1)); + void *test(void *x) { return (void *)x; } ], )], [tinc_cv_attribute_$1=yes], diff --git a/src/ethernet.h b/src/ethernet.h index 8bfbd71..086f572 100644 --- a/src/ethernet.h +++ b/src/ethernet.h @@ -63,7 +63,7 @@ struct ether_header { uint8_t ether_dhost[ETH_ALEN]; uint8_t ether_shost[ETH_ALEN]; uint16_t ether_type; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #endif #ifndef HAVE_STRUCT_ARPHDR @@ -73,7 +73,7 @@ struct arphdr { uint8_t ar_hln; uint8_t ar_pln; uint16_t ar_op; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #define ARPOP_REQUEST 1 #define ARPOP_REPLY 2 @@ -91,7 +91,7 @@ struct ether_arp { uint8_t arp_spa[4]; uint8_t arp_tha[ETH_ALEN]; uint8_t arp_tpa[4]; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #define arp_hrd ea_hdr.ar_hrd #define arp_pro ea_hdr.ar_pro #define arp_hln ea_hdr.ar_hln diff --git a/src/ipv4.h b/src/ipv4.h index 1e34ccb..2761582 100644 --- a/src/ipv4.h +++ b/src/ipv4.h @@ -81,7 +81,7 @@ struct ip { uint8_t ip_p; uint16_t ip_sum; struct in_addr ip_src, ip_dst; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #endif #ifndef IP_OFFMASK @@ -143,7 +143,7 @@ struct icmp { #define icmp_radv icmp_dun.id_radv #define icmp_mask icmp_dun.id_mask #define icmp_data icmp_dun.id_data -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #endif #endif diff --git a/src/ipv6.h b/src/ipv6.h index 4d5173f..17bc586 100644 --- a/src/ipv6.h +++ b/src/ipv6.h @@ -49,7 +49,7 @@ struct ip6_hdr { } ip6_ctlun; struct in6_addr ip6_src; struct in6_addr ip6_dst; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #define ip6_vfc ip6_ctlun.ip6_un2_vfc #define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow #define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen @@ -68,7 +68,7 @@ struct icmp6_hdr { uint16_t icmp6_un_data16[2]; uint8_t icmp6_un_data8[4]; } icmp6_dataun; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #define ICMP6_DST_UNREACH_NOROUTE 0 #define ICMP6_DST_UNREACH 1 #define ICMP6_PACKET_TOO_BIG 2 @@ -88,7 +88,7 @@ struct icmp6_hdr { struct nd_neighbor_solicit { struct icmp6_hdr nd_ns_hdr; struct in6_addr nd_ns_target; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #define ND_OPT_SOURCE_LINKADDR 1 #define ND_OPT_TARGET_LINKADDR 2 #define nd_ns_type nd_ns_hdr.icmp6_type @@ -101,7 +101,7 @@ struct nd_neighbor_solicit { struct nd_opt_hdr { uint8_t nd_opt_type; uint8_t nd_opt_len; -} __attribute__((__gcc_struct__, __packed__)); +} __attribute__((__gcc_struct__)) __attribute((__packed__)); #endif #endif diff --git a/src/xalloc.h b/src/xalloc.h index d9877a8..34f02d0 100644 --- a/src/xalloc.h +++ b/src/xalloc.h @@ -53,7 +53,7 @@ static inline void *xrealloc(void *p, size_t n) { return p; } -static inline char *xstrdup(const char *s) __attribute__((__malloc__, __nonnull__)); +static inline char *xstrdup(const char *s) __attribute__((__malloc__)) __attribute((__nonnull__)); static inline char *xstrdup(const char *s) { char *p = strdup(s);