mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 18:30:59 +08:00
PR tree-optimization/82800 - Incorrect warning on "may be used uninitialized in variadic template code
gcc/testsuite/ChangeLog: PR tree-optimization/82800 * g++.dg/warn/uninit-pr82800.C: New test.
This commit is contained in:
parent
8084ab15a3
commit
af7128621e
43
gcc/testsuite/g++.dg/warn/uninit-pr82800.C
Normal file
43
gcc/testsuite/g++.dg/warn/uninit-pr82800.C
Normal file
@ -0,0 +1,43 @@
|
||||
/* PR 82800 - Incorrect warning on "may be used uninitialized in
|
||||
variadic template code
|
||||
{ dg-do compile { target c++11 } }
|
||||
{ dg-options "-O2 -Wall" } */
|
||||
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
|
||||
extern "C" int rand ();
|
||||
|
||||
struct Maker
|
||||
{
|
||||
double makeConst()
|
||||
{
|
||||
return pick<double>(0, 0, 0, 0, 0, 0, 1); // { dg-bogus "uninitialized" }
|
||||
}
|
||||
|
||||
template<typename T, typename... Args>
|
||||
T pick(T first, Args... args)
|
||||
{
|
||||
return pickGivenNum<T>(rand(), first, args...);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T pickGivenNum(size_t num, T first)
|
||||
{
|
||||
if (num != 0) __builtin_abort();
|
||||
return first;
|
||||
}
|
||||
|
||||
template<typename T, typename... Args>
|
||||
T pickGivenNum(size_t num, T first, Args... args)
|
||||
{
|
||||
if (num == 0) return first;
|
||||
return pickGivenNum<T>(num - 1, args...);
|
||||
}
|
||||
};
|
||||
|
||||
int main ()
|
||||
{
|
||||
Maker maker;
|
||||
maker.makeConst();
|
||||
maker.makeConst();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user