From: Jani Nikula Date: Sat, 17 Aug 2013 21:30:01 +0000 (+0300) Subject: [PATCH] lib: fix clang build X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=5bf2eb8fd15f98a114d45fd749062b06e2a0dd27;p=notmuch-archives.git [PATCH] lib: fix clang build --- diff --git a/4c/6abac426a38b160ae3016bf098919943bb0cef b/4c/6abac426a38b160ae3016bf098919943bb0cef new file mode 100644 index 000000000..4c36080bb --- /dev/null +++ b/4c/6abac426a38b160ae3016bf098919943bb0cef @@ -0,0 +1,198 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 48669431FBC + for ; Sat, 17 Aug 2013 14:30:07 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: -0.7 +X-Spam-Level: +X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id V-WK4gyobssi for ; + Sat, 17 Aug 2013 14:30:01 -0700 (PDT) +Received: from mail-bk0-f50.google.com (mail-bk0-f50.google.com + [209.85.214.50]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 83674431FAE + for ; Sat, 17 Aug 2013 14:30:01 -0700 (PDT) +Received: by mail-bk0-f50.google.com with SMTP id mz11so1046185bkb.9 + for ; Sat, 17 Aug 2013 14:30:00 -0700 (PDT) +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=google.com; s=20120113; + h=x-gm-message-state:from:to:cc:subject:date:message-id; + bh=r9H7n3z2BQT3k5X8dNh2XgLVm9MJ5Z0o/K5o96V4TD4=; + b=PxwqAj2tgOa2pJlb8xgghJYNr+f2C2BlWP+jhoWUTKjI8fsCp5ump7m6rIE9ILXZUg + DQMaKwvC7aIwz+CL2BdYpUjDRIzSMrWx/EQZwf6T6FjeGtkqa5OP5hNEWqg04L4BZE9n + F/kaXWtdbQ9z6YMdXPPgPLHHCYar6626fCpXvJOxF4SjWNN7oC2Jz+jumqKTi426ERTe + 19yWW7Godjuf4KTi574RW5iwqhh73AIyeZx4Hy7D7f5adKIs+i94G+wMksSKb8+HqU6H + ndCaxiO76bgtB9nkH6Oqbqgz/nnGaSgffqp34YPoO+/zQIhuUjyL479IzqiJmii2XzWc + MJTQ== +X-Gm-Message-State: + ALoCoQlKCOGAA9ITryPj3r1mvbsrGcTr4PzT71DxzG3u3dfzUP38cIZt1GaKPes/DTBOTHez2BqM +X-Received: by 10.204.188.200 with SMTP id db8mr2663989bkb.12.1376774998912; + Sat, 17 Aug 2013 14:29:58 -0700 (PDT) +Received: from localhost (dsl-hkibrasgw2-58c36f-91.dhcp.inet.fi. + [88.195.111.91]) + by mx.google.com with ESMTPSA id m6sm552985bki.7.1969.12.31.16.00.00 + (version=TLSv1.2 cipher=RC4-SHA bits=128/128); + Sat, 17 Aug 2013 14:29:58 -0700 (PDT) +From: Jani Nikula +To: notmuch@notmuchmail.org +Subject: [PATCH] lib: fix clang build +Date: Sun, 18 Aug 2013 00:30:01 +0300 +Message-Id: <1376775001-16528-1-git-send-email-jani@nikula.org> +X-Mailer: git-send-email 1.7.10.4 +Cc: Simonas Kazlauskas +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Sat, 17 Aug 2013 21:30:07 -0000 + +Long story short, fix build on recent (3.2+) clang. + +The long story for posterity follows. + +gcc 4.6 added new warnings about structs with greater visibility than +their fields. The warnings were silenced by adjusting visibility in + +commit d5523ead90b6be2b07d4af745b8ed9b980a6b9f1 +Author: Carl Worth +Date: Wed May 11 13:23:13 2011 -0700 + + Mark some structures in the library interface with visibility=default attribute. + +Later on, + +commit 3b76adf9e2c026dd03b820f4c6eab50e25444113 +Author: Austin Clements +Date: Sat Jan 14 19:17:33 2012 -0500 + + lib: Add support for automatically excluding tags from queries + +changed visibility of struct _notmuch_string_list for the same reason, and + +commit 1a53f9f116fa7c460cda3df532be921baaafb082 +Author: Mark Walters +Date: Thu Mar 1 22:30:38 2012 +0000 + + lib: Add the exclude flag to notmuch_query_search_threads + +split the struct _notmuch_string_list and its typedef +notmuch_string_list_t as a way to make a forward declaration for +_notmuch_thread_create(). + +The subtle difference was that the struct definition now had 'visible' +in it, while the typedef didn't, and it was within the #pragma GCC +visibility push(hidden) block. This went unnoticed, as the then common +versions of clang didn't care about this. + +A later change in clang (I did not dig into when this change was +introduced) caused the following error: + +CXX -O2 lib/database.o +In file included from lib/database.cc:21: +In file included from ./lib/database-private.h:33: +./lib/notmuch-private.h:479:8: error: visibility does not match previous declaration +struct visible _notmuch_string_list { + ^ +./lib/notmuch-private.h:67:33: note: expanded from macro 'visible' + ^ +./lib/notmuch-private.h:52:13: note: previous attribute is here + ^ +1 error generated. +make: *** [lib/database.o] Error 1 + +This is slightly misleading due to the reference to the #pragma. The +real culprit is the typedef within the #pragma. + +We could just add 'visible' to the typedef, or move the typedef +outside of the #pragma, and be done with it, but juggle the +declarations a bit to accommodate moving the typedef back with the +struct, and keep the visibility attribute in one place. + +The problem was originally reported by Simonas Kazlauskas + in id:20130418102507.GA23688@godbox but I was only +able to reproduce and investigate now that I upgraded clang. +--- + lib/notmuch-private.h | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h +index eced03e..af185c7 100644 +--- a/lib/notmuch-private.h ++++ b/lib/notmuch-private.h +@@ -162,8 +162,6 @@ typedef enum _notmuch_find_flags { + + typedef struct _notmuch_doc_id_set notmuch_doc_id_set_t; + +-typedef struct _notmuch_string_list notmuch_string_list_t; +- + /* database.cc */ + + /* Lookup a prefix value by name. +@@ -228,17 +226,6 @@ _notmuch_directory_create (notmuch_database_t *notmuch, + unsigned int + _notmuch_directory_get_document_id (notmuch_directory_t *directory); + +-/* thread.cc */ +- +-notmuch_thread_t * +-_notmuch_thread_create (void *ctx, +- notmuch_database_t *notmuch, +- unsigned int seed_doc_id, +- notmuch_doc_id_set_t *match_set, +- notmuch_string_list_t *excluded_terms, +- notmuch_exclude_t omit_exclude, +- notmuch_sort_t sort); +- + /* message.cc */ + + notmuch_message_t * +@@ -476,11 +463,11 @@ typedef struct _notmuch_string_node { + struct _notmuch_string_node *next; + } notmuch_string_node_t; + +-struct visible _notmuch_string_list { ++typedef struct visible _notmuch_string_list { + int length; + notmuch_string_node_t *head; + notmuch_string_node_t **tail; +-}; ++} notmuch_string_list_t; + + notmuch_string_list_t * + _notmuch_string_list_create (const void *ctx); +@@ -509,6 +496,17 @@ notmuch_filenames_t * + _notmuch_filenames_create (const void *ctx, + notmuch_string_list_t *list); + ++/* thread.cc */ ++ ++notmuch_thread_t * ++_notmuch_thread_create (void *ctx, ++ notmuch_database_t *notmuch, ++ unsigned int seed_doc_id, ++ notmuch_doc_id_set_t *match_set, ++ notmuch_string_list_t *excluded_terms, ++ notmuch_exclude_t omit_exclude, ++ notmuch_sort_t sort); ++ + NOTMUCH_END_DECLS + + #ifdef __cplusplus +-- +1.7.10.4 +