GCC 6: gfx/harfbuzz fails to build: memory/mozalloc/throw_gcc.h:137:74: error: 'snprintf' was not declared in this scope

NEW
Unassigned

Status

()

Core
Memory Allocator
a year ago
11 months ago

People

(Reporter: Jan Beich, Unassigned)

Tracking

Trunk
Unspecified
FreeBSD
Points:
---

Firefox Tracking Flags

(firefox55 affected)

Details

MozReview Requests

()

Submitter Diff Changes Open Issues Last Updated
Loading...
Error loading review requests:

Attachments

(1 attachment)

(Reporter)

Description

a year ago
harfbuzz has "#define _POSIX_C_SOURCE 199309L" which hides snprintf() declaration resulting in an error on POSIXly correct systems. libc++ manages to avoid it by not bootlegging <cstdlib> (thus "mozilla/throw_gcc.h") via <stdlib.h> in "hb-private.hh".

/usr/local/bin/g++6 -std=gnu++11 -o hb-blob.o -c -Iobjdir/dist/stl_wrappers -Iobjdir/dist/system_wrappers-include config/gcc_hidden.h -DNDEBUG=1 -DTRIMMED=1 '-DPACKAGE_VERSION="moz"' '-DPACKAGE_BUGREPORT="http://bugzilla.mozilla.org/"' -DHAVE_OT=1 -DHB_NO_MT -DHB_NO_UNICODE_FUNCS -UDEBUG -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -Igfx/harfbuzz/src -Iobjdir/gfx/harfbuzz/src  -Iobjdir/dist/include  -Iobjdir/dist/include/nspr -Iobjdir/dist/include/nss       -fPIC  -DMOZILLA_CLIENT -include objdir/mozilla-config.h -MD -MP -MF .deps/hb-blob.o.pp  -Wall -Wc++11-compat -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wwrite-strings -Wno-invalid-offsetof -Wc++14-compat -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wformat -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-exceptions -fno-math-errno -pipe  -O -fno-omit-frame-pointer  -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include  gfx/harfbuzz/src/hb-blob.cc
In file included from objdir/dist/stl_wrappers/cstdlib:66:0,
                 from /usr/local/lib/gcc6/include/c++/stdlib.h:36,
                 from objdir/dist/system_wrappers/stdlib.h:3,
                 from gfx/harfbuzz/src/hb-private.hh:43,
                 from gfx/harfbuzz/src/hb-blob.cc:32:
objdir/dist/include/mozilla/throw_gcc.h: In function 'void std::__throw_system_error(int)':
objdir/dist/include/mozilla/throw_gcc.h:137:74: error: 'snprintf' was not declared in this scope
              "fatal: STL threw system_error: %s (%d)", strerror(err), err);
                                                                          ^
(Reporter)

Comment 1

a year ago
Also affects GCC 7.0.1 but not 5.4.0, 4.9.4, 4.8.5, 4.7.4, 4.6.4.
(Reporter)

Updated

a year ago
Blocks: 1316555
Summary: gfx/harfbuzz fails to build: memory/mozalloc/throw_gcc.h:137:74: error: 'snprintf' was not declared in this scope → GCC 6: gfx/harfbuzz fails to build: memory/mozalloc/throw_gcc.h:137:74: error: 'snprintf' was not declared in this scope
(Reporter)

Comment 2

a year ago
Oops, bug 1316555 is tracking runtime.
No longer blocks: 1316555
Comment hidden (mozreview-request)

Comment 4

11 months ago
mozreview-review
Comment on attachment 8847773 [details]
Bug 1347672 - Unbreak build on FreeBSD with GCC 6 or later.

https://reviewboard.mozilla.org/r/120692/#review127076

I'd rather move the snprintf call to mozalloc_abort.cpp.
Attachment #8847773 - Flags: review?(mh+mozilla)
(Reporter)

Comment 5

11 months ago
mozreview-review-reply
Comment on attachment 8847773 [details]
Bug 1347672 - Unbreak build on FreeBSD with GCC 6 or later.

https://reviewboard.mozilla.org/r/120692/#review127076

snprintf requires mutable char[] but mozalloc_abort has const argument. Do you mean to change the prototype, pass error code as string only to turn it back into an integer or drop integer representation?
Comment hidden (mozreview-request)

Comment 7

11 months ago
mozreview-review
Comment on attachment 8847773 [details]
Bug 1347672 - Unbreak build on FreeBSD with GCC 6 or later.

https://reviewboard.mozilla.org/r/120692/#review129666

::: memory/mozalloc/mozalloc_abort.cpp:25
(Diff revision 2)
>  
>  void
>  mozalloc_abort(const char* const msg)
>  {
> +    char error[128];
> +    snprintf(error, sizeof(error)-1, "fatal: STL threw system_error: %s", msg);

You're changing the output for other uses of mozalloc_abort. Add a new function that takes two strings. While here, also check the return value from snprintf and just output the strerror in that case.
Attachment #8847773 - Flags: review?(mh+mozilla)

Comment 8

11 months ago
Also please change the commit message to describe what the change is.
You need to log in before you can comment on or make changes to this bug.