Added test case in r193890.
On Fri, Nov 1, 2013 at 3:00 PM, David Blaikie <[email protected]> wrote: > Cool - perhaps add a test case for the non-type template parameter case as > well? Though it's not really necessary. Up to you. > > > On Fri, Nov 1, 2013 at 2:54 PM, Richard Trieu <[email protected]> wrote: > >> Committed in r193887 and r193888 >> >> >> On Fri, Nov 1, 2013 at 1:02 PM, David Blaikie <[email protected]> wrote: >> >>> >>> >>> >>> On Fri, Nov 1, 2013 at 12:15 PM, Arthur O'Dwyer < >>> [email protected]> wrote: >>> >>>> On Thu, Oct 31, 2013 at 5:52 PM, Richard Trieu <[email protected]> >>>> wrote: >>>> > On Thu, Oct 31, 2013 at 4:25 PM, David Blaikie <[email protected]> >>>> wrote: >>>> >> >>>> >> Could we just restrict these warnings to only be done on template >>>> >> patterns, not template specializations? (I know Ted's had some >>>> concern about >>>> >> doing work on template patterns in the past because he believed that >>>> might >>>> >> create too much work analyzing templates that are never instantiated, >>>> >> though) >>>> > >>>> > I think that would be possible and a cleaner way of approaching this. >>>> > Currently, Clang warns in both template patters and specializations. >>>> That >>>> > means if you have : >>>> > >>>> > template<int Num> >>>> > bool greater(unsigned Val) { >>>> > return Val >= 0; >>>> > } >>>> > >>>> > ... greater<0>(42); ... >>>> > ... greater<1>(42); ... >>>> > ... greater<2>(42); ... >>>> > >>>> > There would be four warnings on the return line. Ignoring the three >>>> > warnings in the specializations and only showing the one from the >>>> template >>>> > pattern would be best on cutting down the noise. >>>> >>>> Only for -Wtautological-compare, though, right? >>>> >>>> I imagine that there are plenty of warnings that would be useful to >>>> produce during template instantiation, but impossible to detect by >>>> just looking at the pattern (without checking dependent >>>> types/expressions). A trivial example would be >>>> -Wuninitialized for this code: >>>> >>>> template<typename T> T newval() { T t; return t; } >>>> >>>> Here, newval<int>() has undefined behavior, but newval<std::string>() >>>> is perfectly correct. >>>> >>>> So whereas -Wtautological-compare empirically gives almost 100% false >>>> positives on dependent expressions, -Wuninitialized probably gives >>>> 100% *true* positives. >>> >>> >>> Certainly. There are many warnings in each of these buckets, but >>> generally a given warning falls into only one - either it should be done on >>> instantiations or patterns. (there are some similar issues with macros and >>> other things (sizeof/decltype of implementation-provided types, etc)) >>> >> >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
