TBB tuple doesn't compile with Xcode 4.4 (clang 4.0)

TBB tuple doesn't compile with Xcode 4.4 (clang 4.0)

After upgrading to the latest Xcode 4.4 which has clang 4.0 (based on llvm 3.1), the tbb/compat/tuple header fails to compile.

$ clang --version

Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)

Target: x86_64-apple-darwin11.4.0

Thread model: posix

$ make compiler=clang arch=intel64 test

[cut uninteresting output ...]

clang++ -c -MMD -O2 -DUSE_PTHREAD -m64 -Wall -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -I../../src -I../../src/rml/include -I../../include -I. ../../src/test/test_eh_flow_graph.cpp

In file included from ../../src/test/test_eh_flow_graph.cpp:32:

In file included from ../../include/tbb/flow_graph.h:45:

../../include/tbb/compat/tuple:496:67: error: expected expression

get(tuple& t) { return t.get(); }

^

../../include/tbb/compat/tuple:500:73: error: expected expression

get(const tuple& t) { return t.get(); }

^

2 errors generated.

make[1]: *** [test_eh_flow_graph.o] Error 1

make: [test] Error 2 (ignored)

Apparently the compiler has a problem with the call to the tuple::get() instance method. It's not clear why; this code compiles with every other compiler I've tried.

I was able to work around the problem by replacing the call to tuple::get() with a call to internal::get_helper::get() (which is how tuple::get() is itself implemented). If anyone can come up with a cleaner workaround I'd be happy to hear it.

Here's the patch:

diff --git a/tbb40_20120613oss/include/tbb/compat/tuple b/tbb40_20120613oss/include/tbb/compat/tuple

index 0c8721c..120b55f 100644

--- a/tbb40_20120613oss/include/tbb/compat/tuple

+++ b/tbb40_20120613oss/include/tbb/compat/tuple

@@ -493,11 +493,11 @@ struct tuple_element {

template

inline static typename tuple_element >::type&

- get(tuple& t) { return t.get(); }

+ get(tuple& t) { return internal::get_helper::get(t); }

template

inline static typename tuple_element >::type const&

- get(const tuple& t) { return t.get(); }

+ get(const tuple& t) { return internal::get_helper::get(t); }

} // interface5

} // tbb

2 post / 0 nuovi
Ultimo contenuto
Per informazioni complete sulle ottimizzazioni del compilatore, consultare l'Avviso sull'ottimizzazione

Thank you for a report,

We have the issue on both Lion and Mountain Lion using August command line tools. It looks like a compiler bug.:)
Could you submit a patch via http://threadingbuildingblocks.org/contribution_first.php to include it to tbb update in case we do not find a better solution?

Thanks,
Vladimir

Lascia un commento

Eseguire l'accesso per aggiungere un commento. Non siete membri? Iscriviti oggi