<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>27661</bug_id>
          
          <creation_ts>2012-08-24 02:50:32 +0400</creation_ts>
          <short_desc>gcc warnings with reentrant parser</short_desc>
          <delta_ts>2012-09-05 19:31:19 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>flex</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Gladkov">legion</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132961</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-08-24 02:50:32 +0400</bug_when>
    <thetext>При сборке reentrant парсера получаю:

loadkeys.analyze.c: In function ‘yy_fatal_error’:
loadkeys.analyze.c:2532:58: warning: unused parameter ‘yyscanner’ [-Wunused-parameter]
loadkeys.analyze.c: At top level:
loadkeys.analyze.c:2582:5: warning: no previous prototype for ‘yyget_column’ [-Wmissing-prototypes]
loadkeys.analyze.c:2658:6: warning: no previous prototype for ‘yyset_column’ [-Wmissing-prototypes]
loadkeys.analyze.c: In function ‘yyalloc’:
loadkeys.analyze.c:2864:43: warning: unused parameter ‘yyscanner’ [-Wunused-parameter]
loadkeys.analyze.c: In function ‘yyrealloc’:
loadkeys.analyze.c:2869:58: warning: unused parameter ‘yyscanner’ [-Wunused-parameter]
loadkeys.analyze.c: In function ‘yyfree’:
loadkeys.analyze.c:2881:36: warning: unused parameter ‘yyscanner’ [-Wunused-parameter]

Проблемы известны давно:
http://sourceforge.net/mailarchive/message.php?msg_id=23176513
http://sourceforge.net/mailarchive/message.php?msg_id=25967956

так что есть надежда на их исправление в апстриме.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133089</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2012-09-01 20:47:54 +0400</bug_when>
    <thetext>Какой коммит из какого репозитория какой командой приводит к таким жалобам?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133091</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-01 22:52:27 +0400</bug_when>
    <thetext>Я получаю это на репозитории:

http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=shortlog;h=refs/heads/loadkeys

при сборке утилиты loadkeys. Сборка осуществляется autotools.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133092</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2012-09-02 00:18:51 +0400</bug_when>
    <thetext>После обновления бизона до bison-2.6.2-alt1 бранч loadkeys не собирается с диагностикой:
loadkeys.h:157:14: error: unknown type name &apos;yyscan_t&apos;

Пробовал как действующий flex-2.5.35-alt5, так и будущий flex-2.5.36-alt1.
В код kbd не смотрел.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133093</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-02 02:14:19 +0400</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt; После обновления бизона до bison-2.6.2-alt1 бранч loadkeys не собирается с
&gt; диагностикой:
&gt; loadkeys.h:157:14: error: unknown type name &apos;yyscan_t&apos;

Поставил bison-2.6.2-alt1, в kbd бранч loadkeys собрался. В системе flex-2.5.35-alt5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133094</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-02 02:16:10 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Поставил bison-2.6.2-alt1, в kbd бранч loadkeys собрался. В системе
&gt; flex-2.5.35-alt5.

Я ошибся. loadkeys.c был от предыдущей версии. Да, не собирается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133095</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-02 02:29:15 +0400</bug_when>
    <thetext>На первый взгляд ситуация смешная.
В loadkeys.y есть include сгенерированных хэдеров:

#include &quot;loadkeys.h&quot;
#include &quot;loadkeys.analyze.h&quot;

В loadkeys.h судя по git-diff появилось:

+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (yyscan_t scanner, struct keymap *kmap);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */

Тип yyscan_t объявлен в loadkeys.analyze.h.

Если в loadkeys.y поменять порядок хэдеров на:

#include &quot;loadkeys.analyze.h&quot;
#include &quot;loadkeys.h&quot;

То получаем ошибку:

loadkeys.analyze.h:271:1: error: unknown type name ‘YYSTYPE’

потому что YYSTYPE объявлен в loadkeys.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133096</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-02 02:54:19 +0400</bug_when>
    <thetext>У старого bison-2.4.3:

$ fgrep -x -B1 -A3 &apos;int yyparse (yyscan_t scanner, struct keymap *kmap);&apos; loadkeys.{c,h}
loadkeys.c-#if defined __STDC__ || defined __cplusplus
loadkeys.c:int yyparse (yyscan_t scanner, struct keymap *kmap);
loadkeys.c-#else
loadkeys.c-int yyparse ();
loadkeys.c-#endif

У bison-2.6.2-alt1 получается вот что:

$ fgrep -x -B1 -A3 &apos;int yyparse (yyscan_t scanner, struct keymap *kmap);&apos; loadkeys.{c,h} 
loadkeys.c-#if defined __STDC__ || defined __cplusplus
loadkeys.c:int yyparse (yyscan_t scanner, struct keymap *kmap);
loadkeys.c-#else
loadkeys.c-int yyparse ();
loadkeys.c-#endif
--
loadkeys.h-#if defined __STDC__ || defined __cplusplus
loadkeys.h:int yyparse (yyscan_t scanner, struct keymap *kmap);
loadkeys.h-#else
loadkeys.h-int yyparse ();
loadkeys.h-#endif

это и приводит к ошибке.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133109</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-03 14:57:12 +0400</bug_when>
    <thetext>Данную проблему нагуглить не смог. Не могу понять, как разорвать взаимную зависимость. Такая ситуация точно не бага в bison ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133110</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2012-09-03 15:02:13 +0400</bug_when>
    <thetext>(In reply to comment #8)
&gt; Данную проблему нагуглить не смог. Не могу понять, как разорвать взаимную
&gt; зависимость. Такая ситуация точно не бага в bison ?

bison не подозревает об этой взаимной зависимости: когда он формирует прототип функции yyparse на основе %parse-param, ему все равно, как определены используемые в %parse-param конструкции.  Из этих соображений получается, что bison не виноват.  С другой стороны, раньше это работало.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133111</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-03 15:26:28 +0400</bug_when>
    <thetext>(В ответ на комментарий №9)
&gt; bison не подозревает об этой взаимной зависимости: когда он формирует прототип
&gt; функции yyparse на основе %parse-param, ему все равно, как определены
&gt; используемые в %parse-param конструкции.

Дело не только в этом. Тут связка %parse-param и %union... а если быть совсем точным, то и %define api.pure.

%union создаёт в хэдере YYSTYPE, которая используется в flex при указании %bison-bridge.

&gt; Из этих соображений получается, что
&gt; bison не виноват.  С другой стороны, раньше это работало.

Раньше он не выносил объявление yyparse в хэдер.

Сейчас получается, что нельзя передавать через %parse-param ничего flex&apos;ового. 

Как исправление можно только сделать структуру объединяющую все передаваемые yyparse параметры.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133112</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-03 15:57:40 +0400</bug_when>
    <thetext>(В ответ на комментарий №10)
&gt; Как исправление можно только сделать структуру объединяющую все передаваемые
&gt; yyparse параметры.

Хе. Так сделать нельзя. Любое использование yyscan_t (хэдер flex) влечёт необходимость определения YYSTYPE (хэдер bison).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133127</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-09-04 18:16:38 +0400</bug_when>
    <thetext>Ок. Проблема с непересобираемостью с bison-2.6.2 устранена в том же бранче.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133134</commentid>
    <comment_count>13</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2012-09-05 19:31:19 +0400</bug_when>
    <thetext>flex-2.5.37-alt1 -&gt; sisyphus:

* Wed Sep 05 2012 Dmitry V. Levin &lt;ldv@altlinux&gt; 2.5.37-alt1
- Updated to flex-2.5.37-17-gbac5b2b.
- flex.skl: fixed warnings generated by gcc -Wunused-parameter
  (closes: #27661).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>