| /* PR c++/83871 - wrong code for attribute const and pure on distinct |
| template specializations |
| { dg-do compile } |
| { dg-options "-O1 -Wall -fdump-tree-optimized" } */ |
| |
| int __attribute__ ((const)) fconst_none (); |
| int fconst_none (); |
| |
| void func_const_none_failed (); |
| |
| void func_const_none () |
| { |
| int i0 = fconst_none (); |
| int i1 = fconst_none (); |
| if (i0 != i1) |
| func_const_none_failed (); |
| |
| // { dg-final { scan-tree-dump-not "func_const_none_failed" "optimized" } } |
| } |
| |
| |
| int fnone_const (); |
| int __attribute__ ((const)) fnone_const (); |
| |
| void func_none_const_failed (); |
| |
| void func_none_const () |
| { |
| int i0 = fnone_const (); |
| int i1 = fnone_const (); |
| if (i0 != i1) |
| func_none_const_failed (); |
| |
| // { dg-final { scan-tree-dump-not "func_none_const_failed" "optimized" } } |
| } |
| |
| template <class T> |
| int __attribute__ ((const)) fconst_none (T); |
| |
| template <class T> |
| int fconst_none (T); |
| |
| void templ_const_none_failed (); |
| |
| void template_const_none () |
| { |
| int i0 = fconst_none<int> (0); |
| int i1 = fconst_none<int> (0); |
| if (i0 != i1) |
| templ_const_none_failed (); |
| |
| // { dg-final { scan-tree-dump-not "templ_const_none_failed" "optimized" } } |
| } |
| |
| |
| template <class T> |
| int fnone_const (T); |
| |
| template <class T> |
| int __attribute__ ((const)) fnone_const (T); |
| |
| void templ_none_const_failed (); |
| |
| void test_fnone_const () |
| { |
| int i0 = fnone_const<int> (0); |
| int i1 = fnone_const<int> (0); |
| if (i0 != i1) |
| templ_none_const_failed (); |
| |
| // { dg-final { scan-tree-dump-not "templ_none_const_failed" "optimized" } } |
| } |