Viewing file: attr-optimize.C (1.22 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// 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" } }
|