Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/wrappers/pr83814.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
line wrap: on
line source
/* Verify that our memset warnings don't crash when folding arguments within a template (PR c++/83814). */ // { dg-options "-Wno-int-to-pointer-cast -Wmemset-transposed-args -Wmemset-elt-size" } template <class> void test_1() { __builtin_memset (int() - char(), 0, 0); } template <class> void test_2() { __builtin_memset (0, 0, int() - char()); } template <class> void test_3 (unsigned a, int c) { __builtin_memset((char *)c + a, 0, a); } template <class> void test_4 (unsigned a, int c) { __builtin_memset(0, 0, (char *)c + a); } /* Verify that we warn for -Wmemset-transposed-args inside a template. */ char buf[1024]; template <class> void test_5 () { __builtin_memset (buf, sizeof buf, 0); // { dg-warning "transposed parameters" } } /* Adapted from c-c++-common/memset-array.c; verify that -Wmemset-elt-size works within a template. */ enum a { a_1, a_2, a_n }; int t1[20]; int t2[a_n]; struct s { int t[20]; }; template<class> void foo (struct s *s) { __builtin_memset (t1, 0, 20); // { dg-warning "element size" } // This case requires reading through an enum value: __builtin_memset (t2, 0, a_n); // { dg-warning "element size" } __builtin_memset (s->t, 0, 20); // { dg-warning "element size" } // These cases require folding of arg2 within a template: __builtin_memset (t2, 0, a_n + 0); // { dg-warning "element size" } __builtin_memset (t2, 0, a_n * 1); // { dg-warning "element size" } }