Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/ext/attr-optimize.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// Bug c++/83871 - wrong code due to attributes on distinct template // specializations // Test to verify that an explicit template specifialization does not // "inherit" attribute optimize from a primary template declared with // one. // { dg-do compile } // { dg-options "-O2 -Wall -fdump-tree-optimized" } enum Special { }; void foptimize_none_primary_failed (); template <class T> void __attribute__ ((optimize ("no-printf-return-value"))) foptimize_none () { // The call to snprintf and the test should be retained. if (2 != __builtin_snprintf (0, 0, "%hhx", 0x12)) foptimize_none_primary_failed (); } void foptimize_none_special_failed (); template <> inline void foptimize_none<Special>() { // The whole if statement should be eliminated. if (3 != __builtin_snprintf (0, 0, "1%hhx", 0x12)) foptimize_none_special_failed (); } void test_primary () { foptimize_none<void>(); // { dg-final { scan-tree-dump-times "foptimize_none_primary_failed *\\(\\)" 1 "optimized" } } } void test_special () { // Should be eliminated. foptimize_none<Special>(); // { dg-final { scan-tree-dump-not "foptimize_none_special_failed *\\(\\)" "optimized" } } } // { dg-final { scan-tree-dump-times "__builtin_snprintf" 1 "optimized" } }