Bug 139190 - taglib won't compile with intel c++ compiler
Summary: taglib won't compile with intel c++ compiler
Status: RESOLVED LATER
Alias: None
Product: taglib
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Scott Wheeler
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-12-24 12:26 UTC by Brad Hards
Modified: 2012-10-22 11:00 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Brad Hards 2006-12-24 12:26:50 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources
Compiler:          icpc version 9.1 Intel(R) C++ Compiler for 32-bit applications, Version 9.1    Build 20061103Z Package ID: l_cc_c_9.1.045
OS:                Linux

Trying to compile taglib with the Intel C++ compiler (icpc) fails:
make -f taglib/taglib/CMakeFiles/tag.dir/build.make taglib/taglib/CMakeFiles/tag.dir/depend
make[2]: Entering directory `/home/bradh/build/kdesupport-build'
make[2]: Nothing to be done for `taglib/taglib/CMakeFiles/tag.dir/depend'.
make[2]: Leaving directory `/home/bradh/build/kdesupport-build'
make -f taglib/taglib/CMakeFiles/tag.dir/build.make taglib/taglib/CMakeFiles/tag.dir/build
make[2]: Entering directory `/home/bradh/build/kdesupport-build'
/usr/bin/cmake -E cmake_progress_report /home/bradh/build/kdesupport-build/CMakeFiles 77
[ 77%] Building CXX object taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o
/opt/intel/cc/9.1.045/bin/icpc   -Dtag_EXPORTS   -fPIC -I/home/bradh/build/kdesupport-build/taglib/taglib -I/home/bradh/coding/kdesupport/taglib/taglib -I/home/bradh/coding/kdesupport/taglib/taglib/toolkit -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg -I/home/bradh/coding/kdesupport/taglib/taglib/ogg -I/home/bradh/coding/kdesupport/taglib/taglib/flac -I/home/bradh/coding/kdesupport/taglib/taglib/mpc -I/home/bradh/coding/kdesupport/taglib/taglib/ogg/vorbis -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg/id3v2 -I/home/bradh/coding/kdesupport/taglib/taglib/mpeg/id3v1 -I/home/bradh/coding/kdesupport/taglib/taglib/ape -I/home/bradh/build/kdesupport-build/taglib/taglib/taglib -I/home/bradh/build/kdesupport-build/taglib/taglib/..   -o taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o -c /home/bradh/coding/kdesupport/taglib/taglib/mpeg/mpegfile.cpp
/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tlist.tcc(62): error #308: class template "TagLib::List<T>::ListPrivate [with T=TagLib::ByteVector]" is inaccessible
  template <class TP> class List<T>::ListPrivate<TP *>  : public ListPrivateBase
                                     ^
          detected during instantiation of class "TagLib::List<T> [with T=TagLib::ByteVector]" at line 36 of "/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tbytevectorlist.h"

/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tlist.tcc(62): error #308: class template "TagLib::List<T>::ListPrivate [with T=TagLib::String]" is inaccessible
  template <class TP> class List<T>::ListPrivate<TP *>  : public ListPrivateBase
                                     ^
          detected during instantiation of class "TagLib::List<T> [with T=TagLib::String]" at line 40 of "/home/bradh/coding/kdesupport/taglib/taglib/toolkit/tstringlist.h"

compilation aborted for /home/bradh/coding/kdesupport/taglib/taglib/mpeg/mpegfile.cpp (code 2)
make[2]: *** [taglib/taglib/CMakeFiles/tag.dir/mpeg/mpegfile.o] Error 2
make[2]: Leaving directory `/home/bradh/build/kdesupport-build'
make[1]: *** [taglib/taglib/CMakeFiles/tag.dir/all] Error 2
make[1]: Leaving directory `/home/bradh/build/kdesupport-build'
make: *** [all] Error 2
Comment 1 Scott Wheeler 2007-02-13 11:03:36 UTC
I'm going to be honest on this one and say "I don't care."  I would be a better person if I did, but well, I don't (especially not enough to download the Intel compiler and find a workaround).

It's probably a valid bug and I'd certainly be willing to accept a patch, but failing that, it'll probably stay unfixed.  Marking as "LATER".
Comment 2 machi01 2008-04-08 10:57:50 UTC
Taglib does not compile with Borland c++ Compiler (CodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear). The compiler crashes at the same include module "tlist.tcc" as the intel copiler :

D:\testTagLib>make
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
[  1%] Building CXX object taglib/CMakeFiles/tag.dir/mpeg/id3v2/id3v2tag.obj
CodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear
D:\taglib-1.5\taglib\mpeg\id3v2\id3v2tag.cpp:
Fatal F1004 D:\taglib-1.5\taglib\toolkit\tlist.tcc 73: internal compiler error at 0x40216c with base 0x400000 in function ~FrameList::detach<Frame>::detach()
Fatal F1004 D:\taglib-1.5\taglib\toolkit\tlist.tcc 73: internal compiler error  in function ~FrameList::detach<Frame>::detach()
** error 1 ** deleting taglib\CMakeFiles\tag.dir\mpeg\id3v2\id3v2tag.obj
** error 1 ** deleting taglib\CMakeFiles\tag.dir\all
** error 1 ** deleting all
D:\testTagLib>

I have had a look at the sourcecode but cannot detect any errors. Also I put semicolons at the end of member functions like :

  void clear() {
    list.clear();
  };

instead of this :

  void clear() {
    list.clear();
  }

but this doesn t help anyway.
Comment 3 Scott Wheeler 2008-04-08 13:05:10 UTC
A semi-colon isn't required there.  This is actually a bug (crash) in the Borland compiler, not a problem in TagLib's source.  If you track down what is causing it I'd consider committing it, but since I don't have access to, or really interest in, the Borland compiler, it's not something I'd put time into myself.
Comment 4 Alex Leach 2012-10-22 11:00:15 UTC
This is still an issue on icpc 13.0 from Intel's Composer XE 2013. I found a fix after speaking with the Intel community on the matter.. http://software.intel.com/en-us/comment/1712496#comment-1712496

The problem seems to come from modules/toolkit/tlist.h, where the following declaration is made:-

    private:
        #ifndef DO_NOT_DOCUMENT
	    template <class TP> class ListPrivate;	 
	    ListPrivate<T> *d;
        #endif

If the above declaration is instead made public, then icpc builds taglib without a hitch. I'm not sure if there are any undesirable implications by changing this declaration to public, or whether a `protected` declaration would be a better fix.. Anyone have any thoughts on this?