blob: 9a978d9e6f7a2a0a1753fe079733ff552cbdacb3 [file] [edit]
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm-only -verify \
// RUN: -stack-protector 3 -Wignored-attributes %s
// Test that 'stack_protector_ignore' attributes coming from system header
// macros don't trigger -Wignored-attributes under -fstack-protector-all.
// The attribute is not actionable at the expansion site: the user cannot
// remove it without editing the system header.
#ifdef IS_SYSHEADER
#pragma clang system_header
#define SANITY(a) (a / 0)
#define BUFFER_WITH_IGNORED_ATTR \
__extension__({ \
__attribute__((stack_protector_ignore)) char _buf[64]; \
_buf[0] = 0; \
})
#else
#define IS_SYSHEADER
#include __FILE__
void testSanity(void) {
// Validate that the test is set up correctly.
int i = SANITY(0); // expected-warning {{division by zero is undefined}}
(void)i;
}
void testSystemMacro(void) {
// no -Wignored-attributes in system macro expansion
BUFFER_WITH_IGNORED_ATTR;
}
void testUserCode(void) {
// Written directly in user code, so it is still diagnosed.
__attribute__((stack_protector_ignore))
char buf[64]; // expected-warning {{'stack_protector_ignore' attribute ignored due to '-fstack-protector-all' option}}
(void)buf;
}
#endif