cmd, out, err, rc = self.compile(os.devnull, out=os.devnull,
flags=flags)
return rc == 0
+
+ def addCompileFlagIfSupported(self, flag):
+ if isinstance(flag, list):
+ flags = list(flag)
+ else:
+ flags = [flag]
+ if self.hasCompileFlag(flags):
+ self.compile_flags += flags
+ return True
+ else:
+ return False
def configure_warnings(self):
enable_warnings = self.get_lit_bool('enable_warnings', False)
if enable_warnings:
- self.cxx.compile_flags += ['-Wsystem-headers', '-Wall', '-Werror']
- if ('clang' in self.config.available_features or
- 'apple-clang' in self.config.available_features):
- self.cxx.compile_flags += ['-Wno-user-defined-literals']
+ self.cxx.compile_flags += ['-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER',
+ '-Wall', '-Werror']
+ self.cxx.addCompileFlagIfSupported('-Wno-user-defined-literals')
def configure_sanitizer(self):
san = self.get_lit_conf('use_sanitizer', '').strip()
// test new_handler
#include <new>
+#include <type_traits>
+#include <cassert>
void f() {}
int main()
{
+ static_assert(std::is_same<std::new_handler, void(*)()>::value, "");
std::new_handler p = f;
+ assert(p == &f);
}
std::set_new_handler(new_handler);
try
{
- void*volatile vp = operator new[] (std::numeric_limits<std::size_t>::max());
+ void* volatile vp = operator new[] (std::numeric_limits<std::size_t>::max());
+ ((void)vp);
assert(false);
}
catch (std::bad_alloc&)
try
{
void* vp = operator new (std::numeric_limits<std::size_t>::max());
+ ((void)vp);
assert(false);
}
catch (std::bad_alloc&)
// test terminate_handler
#include <exception>
+#include <type_traits>
+#include <cassert>
void f() {}
int main()
{
+ static_assert(std::is_same<std::terminate_handler, void(*)()>::value, "");
std::terminate_handler p = f;
+ assert(p == &f);
}
int main()
{
- std::sig_atomic_t sig;
+ std::sig_atomic_t sig = 0;
+ ((void)sig);
typedef void (*func)(int);
static_assert((std::is_same<decltype(std::signal(0, (func)0)), func>::value), "");
static_assert((std::is_same<decltype(std::raise(0)), int>::value), "");
int main()
{
std::va_list va;
+ ((void)va);
}
#include <cstdlib>
#include <type_traits>
+#include <cassert>
#ifndef EXIT_FAILURE
#error EXIT_FAILURE not defined
#error RAND_MAX not defined
#endif
+template <class TestType, class IntType>
+void test_div_struct() {
+ TestType obj;
+ static_assert(sizeof(obj) >= sizeof(IntType) * 2, ""); // >= to account for alignment.
+ static_assert(std::is_same<decltype(obj.quot), IntType>::value, "");
+ static_assert(std::is_same<decltype(obj.rem), IntType>::value, "");
+ ((void) obj);
+};
+
int main()
{
std::size_t s = 0;
- std::div_t d;
- std::ldiv_t ld;
- std::lldiv_t lld;
+ ((void)s);
+ static_assert(std::is_same<std::size_t, decltype(sizeof(int))>::value, "");
+ test_div_struct<std::div_t, int>();
+ test_div_struct<std::ldiv_t, long>();
+ test_div_struct<std::lldiv_t, long long>();
char** endptr = 0;
static_assert((std::is_same<decltype(std::atof("")), double>::value), "");
static_assert((std::is_same<decltype(std::atoi("")), int>::value), "");
int main()
{
std::clock_t c = 0;
+ ((void)c);
std::size_t s = 0;
std::time_t t = 0;
std::tm tm = {0};