Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.
Bug 1314545 - error: first argument to ‘va_arg’ not of type ‘va_list’ in C++ on s390(x)
Summary: error: first argument to ‘va_arg’ not of type ‘va_list’ in C++ on s390(x)
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: gcc
Version: 24
Hardware: s390x
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: ZedoraTracker
TreeView+ depends on / blocked
 
Reported: 2016-03-03 21:18 UTC by Dan Horák
Modified: 2016-03-10 14:44 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2016-03-10 14:44:07 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)
preprocessed source file (3.06 KB, text/plain)
2016-03-04 13:56 UTC, Dan Horák
no flags Details


Links
System ID Private Priority Status Summary Last Updated
GNU Compiler Collection 70084 0 P3 RESOLVED [6 Regression] va_arg ((ap), int) regression on s390*-* 2020-08-31 10:33:43 UTC

Description Dan Horák 2016-03-03 21:18:57 UTC
Build of glibmm24-2.47.4-2.fc24 fails on s390(x) with gcc-c++-6.0.0-0.14.fc24 with an error, while it succeeds elsewhere.

from build.log at http://s390.koji.fedoraproject.org/koji/taskinfo?taskID=2135162

...
libtool: compile:  g++ -DHAVE_CONFIG_H -I.. -I../.. -DG_LOG_DOMAIN=\"glibmm\" -DGLIBMM_BUILD=1 -pthread -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -Wall -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -march=z9-109 -mtune=z10 -c object.cc  -fPIC -DPIC -o .libs/object.o
In file included from /usr/include/glib-2.0/glib/gerror.h:27:0,
                 from /usr/include/glib-2.0/glib/gthread.h:33,
                 from /usr/include/glib-2.0/glib/gasyncqueue.h:32,
                 from /usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glib-2.0/gobject/gbinding.h:28,
                 from /usr/include/glib-2.0/glib-object.h:23,
                 from ../glibmm/class.h:25,
                 from ../glibmm/objectbase.h:22,
                 from ../glibmm/object.h:28,
                 from object.cc:18:
object.cc: In constructor 'Glib::ConstructParams::ConstructParams(const Glib::Class&, const char*, ...)':
/usr/include/glib-2.0/gobject/gvaluecollector.h:105:41: error: first argument to 'va_arg' not of type 'va_list'
    _cvalue->v_int = va_arg ((var_args), gint);     \
                     ~                    
/usr/include/glib-2.0/gobject/gvaluecollector.h:156:3: note: in expansion of macro 'G_VALUE_COLLECT_INIT'
   G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error);   \
   ^~~~~~~~~~~~~~~~~~~~
object.cc:109:5: note: in expansion of macro 'G_VALUE_COLLECT'
     G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
     ^~~~~~~~~~~~~~~
/usr/include/glib-2.0/gobject/gvaluecollector.h:108:42: error: first argument to 'va_arg' not of type 'va_list'
    _cvalue->v_long = va_arg ((var_args), glong);     \
                      ~                    
/usr/include/glib-2.0/gobject/gvaluecollector.h:156:3: note: in expansion of macro 'G_VALUE_COLLECT_INIT'
   G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error);   \
   ^~~~~~~~~~~~~~~~~~~~
object.cc:109:5: note: in expansion of macro 'G_VALUE_COLLECT'
     G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
     ^~~~~~~~~~~~~~~
/usr/include/glib-2.0/gobject/gvaluecollector.h:111:43: error: first argument to 'va_arg' not of type 'va_list'
    _cvalue->v_int64 = va_arg ((var_args), gint64);    \
                       ~                    
/usr/include/glib-2.0/gobject/gvaluecollector.h:156:3: note: in expansion of macro 'G_VALUE_COLLECT_INIT'
   G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error);   \
   ^~~~~~~~~~~~~~~~~~~~
object.cc:109:5: note: in expansion of macro 'G_VALUE_COLLECT'
     G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
     ^~~~~~~~~~~~~~~
/usr/include/glib-2.0/gobject/gvaluecollector.h:114:44: error: first argument to 'va_arg' not of type 'va_list'
    _cvalue->v_double = va_arg ((var_args), gdouble);    \
                        ~                    
/usr/include/glib-2.0/gobject/gvaluecollector.h:156:3: note: in expansion of macro 'G_VALUE_COLLECT_INIT'
   G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error);   \
   ^~~~~~~~~~~~~~~~~~~~
object.cc:109:5: note: in expansion of macro 'G_VALUE_COLLECT'
     G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
     ^~~~~~~~~~~~~~~
/usr/include/glib-2.0/gobject/gvaluecollector.h:117:45: error: first argument to 'va_arg' not of type 'va_list'
    _cvalue->v_pointer = va_arg ((var_args), gpointer);    \
                         ~                    
/usr/include/glib-2.0/gobject/gvaluecollector.h:156:3: note: in expansion of macro 'G_VALUE_COLLECT_INIT'
   G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error);   \
   ^~~~~~~~~~~~~~~~~~~~
object.cc:109:5: note: in expansion of macro 'G_VALUE_COLLECT'
     G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
     ^~~~~~~~~~~~~~~
Makefile:744: recipe for target 'object.lo' failed


The source source is https://git.gnome.org/browse/glibmm/tree/glib/glibmm/object.cc?id=42a47cb78e4815da6d6ebccafda864326fcdd22c#n69
and then https://git.gnome.org/browse/glib/tree/gobject/gvaluecollector.h?h=2.47.5#n88

I have reduced the code and I'm getting an error on s390x, but not on x86_64

[sharkcz@devel10 glibmm]$ cat a.cc
#include <cstdarg>

class A
{
public:
    A(const char* f, ...);
};

A::A(const char *f, ...)
{
  va_list var_args;
  va_start(var_args, f);

  int i;
  i = va_arg ((var_args), int);

  va_end(var_args);
}
[sharkcz@devel10 glibmm]$ g++ -Wall -O2 -Wall -c a.cc -o a.o
a.cc: In constructor ‘A::A(const char*, ...)’:
a.cc:14:7: warning: variable ‘i’ set but not used [-Wunused-but-set-variable]
   int i;
       ^
In file included from /usr/include/c++/6.0.0/cstdarg:43:0,
                 from a.cc:1:
a.cc: In constructor ‘A::A(const char*, ...)’:
a.cc:15:27: error: first argument to ‘va_arg’ not of type ‘va_list’
   i = va_arg ((var_args), int);
       ~                    
[sharkcz@devel10 glibmm]$ rpm -q gcc-c++
gcc-c++-6.0.0-0.14.fc24.s390x


while compile on x86_64 returns:

<mock-chroot>sh-4.3# g++ -Wall -O2 -Wall -c a.cc -o a.o
a.cc: In constructor 'A::A(const char*, ...)':
a.cc:14:7: warning: variable 'i' set but not used [-Wunused-but-set-variable]
   int i;
       ^
<mock-chroot>sh-4.3# rpm -q gcc-c++
gcc-c++-6.0.0-0.13.fc24.x86_64

Comment 1 Dan Horák 2016-03-03 21:23:53 UTC
It might be still an incorrect code, but why the result is inconsistent between arches? Doesn't have "stdarg" a specific implementation on s390(x)?

Comment 2 Dan Horák 2016-03-04 13:52:08 UTC
cannot be reproduced with gcc 5.3 and -std=c++14

[sharkcz@devel6 ~]$ g++ -std=c++14 -O2 -Wall -c a.cc -o a.o
a.cc: In constructor ‘A::A(const char*, ...)’:
a.cc:14:7: warning: variable ‘i’ set but not used [-Wunused-but-set-variable]
   int i;
       ^
[sharkcz@devel6 ~]$ rpm -q gcc-c++
gcc-c++-5.3.1-2.fc23.s390x

Comment 3 Dan Horák 2016-03-04 13:56:58 UTC
Created attachment 1133167 [details]
preprocessed source file

with gcc-c++-6.0.0-0.14.fc24.s390x

Comment 4 Dan Horák 2016-03-04 14:02:00 UTC
and yes, removing the extra parentheses around the first argument in va_arg() makes the error go away

Comment 5 Jonathan Wakely 2016-03-04 14:03:29 UTC
There have been some G++ bugs relating to extra parens causing problems in C++14 mode, this looks like another of those.

Comment 6 Dan Horák 2016-03-05 19:02:32 UTC
The problem went away when gcc-6.0.0-0.15.fc24 was used in the build.

Comment 7 Marek Polacek 2016-03-10 14:44:07 UTC
The fix is in gcc-6.0.0-0.15.fc24, closing.


Note You need to log in before you can comment on or make changes to this bug.