On 7/17/19, Andreas Rheinhardt <andreas.rheinha...@gmail.com> wrote: > Unknown-length elements end when an element not allowed in them, but > allowed at a higher level is encountered. In order to check for this, > c1abd95a added a pointer to every syntax level's parent to each > EbmlSyntax. Given that the parent must of course also reference the > child in order to be able to enter said child level, one needs to use > forward declarations. > These forward declarations constitute tentative definitions and tentative > definitions with internal linkage (like our syntaxes) must not be an > incomplete type. Yet they were an incomplete type and while GCC and > Clang did not even warn about this (on default warning levels), it > broke compilation with MSVC. Therefore this commit adds the sizes. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> > --- > 1. I am terribly sorry for this. I did test with both GCC and Clang, but > not with -pedantic, but only with default warning levels. > 2. I don't have an MSVC setup here, so could please someone confirm that > this patch indeed fixes the compilation? All I know is that GCC's > -pedantic warnings are gone with this patch and that the requirement > that tentative definitions with internal linkage must not be of > incomplete type is fulfilled now. > > libavformat/matroskadec.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index b97189e674..fb0356e7b7 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -389,12 +389,16 @@ typedef struct MatroskaDemuxContext { > > #define CHILD_OF(parent) { .def = { .n = parent } } > > -static const EbmlSyntax ebml_syntax[], matroska_segment[], > matroska_track_video_color[], matroska_track_video[], > - matroska_track[], matroska_track_encoding[], > matroska_track_encodings[], > - matroska_track_combine_planes[], > matroska_track_operation[], matroska_tracks[], > - matroska_attachments[], matroska_chapter_entry[], > matroska_chapter[], matroska_chapters[], > - matroska_index_entry[], matroska_index[], > matroska_tag[], matroska_tags[], matroska_seekhead[], > - matroska_blockadditions[], matroska_blockgroup[], > matroska_cluster_parsing[]; > +// The following forward declarations need their size because > +// a tentative definition with internal linkage must not be an > +// incomplete type (6.7.2 in C90, 6.9.2 in C99). > +// Removing the sizes breaks MSVC. > +static const EbmlSyntax ebml_syntax[3], matroska_segment[9], > matroska_track_video_color[15], matroska_track_video[19], > + matroska_track[27], matroska_track_encoding[6], > matroska_track_encodings[2], > + matroska_track_combine_planes[2], > matroska_track_operation[2], matroska_tracks[2], > + matroska_attachments[2], matroska_chapter_entry[9], > matroska_chapter[6], matroska_chapters[2], > + matroska_index_entry[3], matroska_index[2], > matroska_tag[3], matroska_tags[2], matroska_seekhead[2], > + matroska_blockadditions[2], matroska_blockgroup[8], > matroska_cluster_parsing[8]; > > static const EbmlSyntax ebml_header[] = { > { EBML_ID_EBMLREADVERSION, EBML_UINT, 0, offsetof(Ebml, version), > { .u = EBML_VERSION } }, > -- > 2.21.0 >
Looks fine. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".