Filed under http://llvm.org/bugs/show_bug.cgi?id=16936
On 22:50 Tue 13 Aug , Andreas Schäfer wrote: > Dear clang developers, > > I was investigating whether our computer simulation library > LibGeoDecomp would work with clang++, when I noticed that some of the > unit tests were failing. Apparently clang++ handles partial > specialization of member function templates in combination with > inheritance differently from other compilers (e.g. g++ and icpc). > > I've tried to come up with a minimal test program which reproduces the > odd behavior (attached). Having been pruned so much, the program > itself doesn't make much sense. It was originally part of our code > which handles boundary conditions. IMHO the program should yield the > output "function2" twice, but with clang++ I get "function5" for the > first invocation. Is this a bug in clang++, or is this simply > undefined behavior? > > Reproduction: > ------------- > > icpc test3.cpp -o test && ./test && echo "-------------------------" && g++ > test3.cpp -o test && ./test && echo "------------" && clang++ test3.cpp -o > test && ./test > > Output: > ------- > > function2 > function2 > ------------------------- > function2 > function2 > ------------ > function5 > function2 > > Thanks! > -Andreas > > > -- > ========================================================== > Andreas Schäfer > HPC and Grid Computing > Chair of Computer Science 3 > Friedrich-Alexander-Universität Erlangen-Nürnberg, Germany > +49 9131 85-27910 > PGP/GPG key via keyserver > http://www.libgeodecomp.org > ========================================================== > > (\___/) > (+'.'+) > (")_(") > This is Bunny. Copy and paste Bunny into your > signature to help him gain world domination! > #include <iostream> > > template<int X=0, int Y=0, int Z=0> > class FixedCoord > {}; > > template<typename CELL, bool FLAG> > class MyWest > { > public: > void access(MyWest) const > { > std::cout << "function1\n"; > } > }; > > template<typename CELL> > class MyWest<CELL, true> > { > public: > const CELL access(FixedCoord<-1, -1, 0>, const CELL **lines) const > { > std::cout << "function2\n"; > return 2; > } > }; > > template<typename CELL, bool FLAG> > class MyTop > { > public: > void access(MyTop) const > { > std::cout << "function3\n"; > } > }; > > template<typename CELL> > class MyTop<CELL, true> > { > public: > template<int X> > const CELL access(FixedCoord< X, -1, 0>, const CELL **lines) const > { > std::cout << "function4\n"; > return 4; > } > }; > > template<typename CELL, bool BOUNDARY_WEST, bool BOUNDARY_TOP> > class MyLinePointerNeighborhood : > public MyWest< CELL, BOUNDARY_WEST>, > public MyTop< CELL, BOUNDARY_TOP> > { > public: > using MyWest< CELL, BOUNDARY_WEST >::access; > using MyTop< CELL, BOUNDARY_TOP >::access; > > MyLinePointerNeighborhood(const CELL **lines) : > lines(lines) > {} > > template<int X, int Y, int Z> > const CELL access(FixedCoord<X, Y, Z>, const CELL **lines) const > { > std::cout << "function5\n"; > return 5; > } > > template<int X, int Y, int Z> > const CELL operator[](FixedCoord<X, Y, Z>) const > { > return access(FixedCoord<X, Y, Z>(), lines); > } > > private: > const CELL **lines; > }; > > int main(int argc, char **argv) > { > int foo = -1; > > const int *pointers[] = { > &foo > }; > > MyLinePointerNeighborhood<int, true, false> hood(pointers); > hood[FixedCoord<-1, -1>()]; > hood.access(FixedCoord<-1, -1>(), pointers); > > return 0; > } > _______________________________________________ > cfe-users mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users -- ========================================================== Andreas Schäfer HPC and Grid Computing Chair of Computer Science 3 Friedrich-Alexander-Universität Erlangen-Nürnberg, Germany +49 9131 85-27910 PGP/GPG key via keyserver http://www.libgeodecomp.org ========================================================== (\___/) (+'.'+) (")_(") This is Bunny. Copy and paste Bunny into your signature to help him gain world domination!
signature.asc
Description: Digital signature
_______________________________________________ cfe-users mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users
