1 // { dg-do compile }
2 // { dg-options "-Wconversion-null" }
3 
4 #include <stddef.h>
5 
6 class Foo {
7  public:
8   template <typename T1, typename T2>
Compare(const T1 & expected,const T2 & actual)9   static void Compare(const T1& expected, const T2& actual) { }
10 
11   template <typename T1, typename T2>
Compare(const T1 & expected,T2 * actual)12   static void Compare(const T1& expected, T2* actual) { }
13 
14 };
15 
16 template<typename T1>
17 class Foo2 {
18  public:
19   Foo2(int x);
20   template<typename T2> void Bar(T2 y);
21 };
22 
func(T3 x)23 template<typename T3> void func(T3 x) { }
24 
25 typedef Foo2<int> MyFooType;
26 
func1(long int a)27 void func1(long int a) {
28   MyFooType *foo2 = new MyFooType(NULL); // { dg-warning "passing NULL to" }
29   foo2->Bar(a);
30   func(NULL);
31   func<int>(NULL);                       // { dg-warning "passing NULL to" }
32   func<int *>(NULL);
33 }
34 
35 int x = 1;
36 
37 int
main()38 main()
39 {
40   int *p = &x;
41 
42   Foo::Compare(0, *p);
43   Foo::Compare<long int, int>(NULL, p);  // { dg-warning "passing NULL to" }
44   Foo::Compare(NULL, p);
45   func1(NULL);                           // { dg-warning "passing NULL to" }
46 
47   return 0;
48 }
49