Fix the compiler attribute test to work with Clang.
authorGuus Sliepen <guus@tinc-vpn.org>
Mon, 8 Oct 2018 19:27:08 +0000 (21:27 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Mon, 8 Oct 2018 19:47:09 +0000 (21:47 +0200)
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.

m4/attribute.m4
src/ethernet.h
src/ipv4.h
src/ipv6.h
src/xalloc.h

index 9d673e9..3228deb 100644 (file)
@@ -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],
index 8bfbd71..086f572 100644 (file)
@@ -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
index 1e34ccb..2761582 100644 (file)
@@ -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
index 4d5173f..17bc586 100644 (file)
@@ -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
index d9877a8..34f02d0 100644 (file)
@@ -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);