+2008-07-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/lib/libstdc++.exp (check_v3_target_stdint): New.
+ * testsuite/lib/dg-options.exp (dg-require-cstdint): New.
+ * testsuite/20_util/ratio/cons/cons1.cc: Use it.
+ * testsuite/20_util/ratio/cons/cons_overflow.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops1.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops2.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops3.cc: Likewise.
+ * testsuite/20_util/ratio/operations/ops_overflow.cc: Likewise.
+ * testsuite/20_util/ratio/comparisons/comp1.cc: Likewise.
+ * testsuite/20_util/ratio/comparisons/comp2.cc: Likewise.
+
+ * include/std/type_traits: Fix comment typo.
+
2008-07-06 Roger Sayle <roger@eyesopen.com>
* include/std/system_error (is_error_code_enum): Use identifier
: public integral_constant<bool, __has_trivial_destructor(_Tp)>
{ };
- /// has_nothrow_default_destructor
+ /// has_nothrow_default_constructor
template<typename _Tp>
struct has_nothrow_default_constructor
: public integral_constant<bool, __has_nothrow_constructor(_Tp)>
{ };
- /// has_nothrow_copy_destructor
+ /// has_nothrow_copy_constructor
template<typename _Tp>
struct has_nothrow_copy_constructor
: public integral_constant<bool, __has_nothrow_copy(_Tp)>
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// Copyright (C) 2008 Free Software Foundation
//
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
VERIFY(( std::ratio_equal<std::ratio<2,6>, std::ratio<1,3>>::value == 1 ));
VERIFY(( std::ratio_equal<std::ratio<2,6>, std::ratio<1,4>>::value == 0 ));
- VERIFY(( std::ratio_not_equal<std::ratio<2,6>,
- std::ratio<1,3>>::value == 0 ));
- VERIFY(( std::ratio_not_equal<std::ratio<2,6>,
- std::ratio<1,4>>::value == 1 ));
+ VERIFY( (std::ratio_not_equal<std::ratio<2,6>,
+ std::ratio<1,3>>::value == 0) );
+ VERIFY( (std::ratio_not_equal<std::ratio<2,6>,
+ std::ratio<1,4>>::value == 1) );
}
void
{
bool test __attribute__((unused)) = true;
- VERIFY(( std::ratio_less<std::ratio<1,4>, std::ratio<1,3>>::value == 1 ));
- VERIFY(( std::ratio_less<std::ratio<-1,3>, std::ratio<1,3>>::value == 1 ));
+ VERIFY( (std::ratio_less<std::ratio<1,4>, std::ratio<1,3>>::value == 1) );
+ VERIFY( (std::ratio_less<std::ratio<-1,3>, std::ratio<1,3>>::value == 1) );
- VERIFY(( std::ratio_less<std::ratio<1,3>, std::ratio<1,4>>::value == 0 ));
- VERIFY(( std::ratio_less<std::ratio<1,3>, std::ratio<-1,3>>::value == 0 ));
+ VERIFY( (std::ratio_less<std::ratio<1,3>, std::ratio<1,4>>::value == 0) );
+ VERIFY( (std::ratio_less<std::ratio<1,3>, std::ratio<-1,3>>::value == 0) );
- VERIFY(( std::ratio_less_equal<std::ratio<-1,3>,
- std::ratio<-1,3>>::value == 1 ));
- VERIFY(( std::ratio_less_equal<std::ratio<1,4>,
- std::ratio<1,3>>::value == 1 ));
+ VERIFY( (std::ratio_less_equal<std::ratio<-1,3>,
+ std::ratio<-1,3>>::value == 1) );
+ VERIFY( ( std::ratio_less_equal<std::ratio<1,4>,
+ std::ratio<1,3>>::value == 1) );
- VERIFY(( std::ratio_less_equal<std::ratio<1,4>,
- std::ratio<-1,3>>::value == 0 ));
- VERIFY(( std::ratio_less_equal<std::ratio<1,3>,
- std::ratio<-1,3>>::value == 0 ));
+ VERIFY( (std::ratio_less_equal<std::ratio<1,4>,
+ std::ratio<-1,3>>::value == 0) );
+ VERIFY( (std::ratio_less_equal<std::ratio<1,3>,
+ std::ratio<-1,3>>::value == 0) );
- VERIFY(( std::ratio_greater<std::ratio<1,3>, std::ratio<1,4>>::value == 1 ));
- VERIFY(( std::ratio_greater<std::ratio<1,3>, std::ratio<-1,3>>::value == 1 ));
+ VERIFY( (std::ratio_greater<std::ratio<1,3>, std::ratio<1,4>>::value == 1) );
+ VERIFY( (std::ratio_greater<std::ratio<1,3>, std::ratio<-1,3>>::value == 1) );
- VERIFY(( std::ratio_greater<std::ratio<1,4>, std::ratio<1,3>>::value == 0 ));
- VERIFY(( std::ratio_greater<std::ratio<-1,3>, std::ratio<1,3>>::value == 0 ));
+ VERIFY( (std::ratio_greater<std::ratio<1,4>, std::ratio<1,3>>::value == 0) );
+ VERIFY( (std::ratio_greater<std::ratio<-1,3>, std::ratio<1,3>>::value == 0) );
- VERIFY(( std::ratio_greater_equal<std::ratio<1,3>,
- std::ratio<1,3>>::value == 1 ));
- VERIFY(( std::ratio_greater_equal<std::ratio<1,3>,
- std::ratio<-1,3>>::value == 1 ));
-
- VERIFY(( std::ratio_greater_equal<std::ratio<-1,3>,
- std::ratio<1,3>>::value == 0 ));
- VERIFY(( std::ratio_greater_equal<std::ratio<1,4>,
- std::ratio<1,3>>::value == 0 ));
-}
+ VERIFY( (std::ratio_greater_equal<std::ratio<1,3>,
+ std::ratio<1,3>>::value == 1) );
+ VERIFY( (std::ratio_greater_equal<std::ratio<1,3>,
+ std::ratio<-1,3>>::value == 1) );
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
+ VERIFY( (std::ratio_greater_equal<std::ratio<-1,3>,
+ std::ratio<1,3>>::value == 0) );
+ VERIFY( (std::ratio_greater_equal<std::ratio<1,4>,
+ std::ratio<1,3>>::value == 0) );
+}
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
test02();
-#endif
return 0;
}
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// Copyright (C) 2008 Free Software Foundation
//
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
static const std::intmax_t M = INTMAX_MAX;
void
{
bool test __attribute__((unused)) = true;
- //no overflow with same denominator
- VERIFY(( std::ratio_less<std::ratio<M - 2, M>,
- std::ratio<M - 1, M>>::value == 1 ) );
+ // No overflow with same denominator
+ VERIFY( (std::ratio_less<std::ratio<M - 2, M>,
+ std::ratio<M - 1, M>>::value == 1) );
- VERIFY(( std::ratio_less<std::ratio<M - 1, M>,
- std::ratio<M - 2, M>>::value == 0 ) );
-
- //no overflow if signs differ
- VERIFY(( std::ratio_less<std::ratio<-M, M - 1>,
- std::ratio<M - 1, M - 2>>::value == 1 ) );
+ VERIFY( (std::ratio_less<std::ratio<M - 1, M>,
+ std::ratio<M - 2, M>>::value == 0) );
+
+ // No overflow if signs differ
+ VERIFY( (std::ratio_less<std::ratio<-M, M - 1>,
+ std::ratio<M - 1, M - 2>>::value == 1) );
- VERIFY(( std::ratio_less<std::ratio<M - 1, M - 2>,
- std::ratio<-M, M - 1>>::value == 0 ) );
+ VERIFY( (std::ratio_less<std::ratio<M - 1, M - 2>,
+ std::ratio<-M, M - 1>>::value == 0) );
}
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
-
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
-#endif
return 0;
}
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
VERIFY( r3.den == r0.den );
}
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
-
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
return 0;
}
-// { dg-options "-std=gnu++0x" }
// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// Copyright (C) 2008 Free Software Foundation
//
#include <ratio>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
std::ratio<1,0> r1;
}
-// { dg-error "instantiated from here" "" { target *-*-* } 36 }
-// { dg-error "instantiated from here" "" { target *-*-* } 42 }
-// { dg-error "instantiated from here" "" { target *-*-* } 48 }
+// { dg-error "instantiated from here" "" { target *-*-* } 35 }
+// { dg-error "instantiated from here" "" { target *-*-* } 41 }
+// { dg-error "instantiated from here" "" { target *-*-* } 47 }
// { dg-error "denominator cannot be zero" "" { target *-*-* } 150 }
// { dg-error "out of range" "" { target *-*-* } 151 }
// { dg-excess-errors "In instantiation of" }
-
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
std::ratio_add<std::ratio<3,8>, std::ratio<5,12>>::type r;
- VERIFY( r.num == 19);
- VERIFY( r.den == 24);
+ VERIFY( r.num == 19 );
+ VERIFY( r.den == 24 );
}
void
bool test __attribute__((unused)) = true;
std::ratio_subtract<std::ratio<3,8>, std::ratio<5,12>>::type r;
- VERIFY( r.num == -1);
- VERIFY( r.den == 24);
+ VERIFY( r.num == -1 );
+ VERIFY( r.den == 24 );
}
void
bool test __attribute__((unused)) = true;
std::ratio_multiply<std::ratio<3,8>, std::ratio<5,12>>::type r;
- VERIFY( r.num == 5);
- VERIFY( r.den == 32);
+ VERIFY( r.num == 5 );
+ VERIFY( r.den == 32 );
}
void
bool test __attribute__((unused)) = true;
std::ratio_divide<std::ratio<3,8>, std::ratio<5,12>>::type r;
- VERIFY( r.num == 9);
- VERIFY( r.den == 10);
+ VERIFY( r.num == 9 );
+ VERIFY( r.den == 10 );
}
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
-
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
test02();
test03();
test04();
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
return 0;
}
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
typedef std::ratio<1, INTMAX_MAX> one_over_max;
typedef std::ratio<2, INTMAX_MAX> two_over_max;
typedef std::ratio<INTMAX_MAX, 1> max_over_one;
std::ratio<INTMAX_MAX / 2, INTMAX_MAX / 2>,
std::ratio<INTMAX_MAX / 2 , INTMAX_MAX / 2 + 1>>::type r2;
- VERIFY( r2.num == INTMAX_MAX);
- VERIFY( r2.den == (INTMAX_MAX / 2) + 1);
+ VERIFY( r2.num == INTMAX_MAX );
+ VERIFY( r2.den == (INTMAX_MAX / 2) + 1 );
}
void
std::ratio<INTMAX_MAX / 2, INTMAX_MAX / 2>,
std::ratio<INTMAX_MAX / 2 , INTMAX_MAX / 2 + 1>>::type r2;
- VERIFY( r2.num == 1);
- VERIFY( r2.den == (INTMAX_MAX / 2) + 1);
+ VERIFY( r2.num == 1 );
+ VERIFY( r2.den == (INTMAX_MAX / 2) + 1 );
}
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
-
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
test02();
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
return 0;
}
// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
#include <ratio>
#include <testsuite_hooks.h>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
std::ratio<2, INTMAX_MAX>,
std::ratio<INTMAX_MAX, 2>>::type r1;
- VERIFY( r1.num == 1);
- VERIFY( r1.den == 1);
+ VERIFY( r1.num == 1 );
+ VERIFY( r1.den == 1 );
std::ratio_multiply<
std::ratio<INTMAX_MAX, 2>,
std::ratio<2 , INTMAX_MAX - 1>>::type r2;
- VERIFY( r2.num == INTMAX_MAX);
- VERIFY( r2.den == INTMAX_MAX - 1);
+ VERIFY( r2.num == INTMAX_MAX );
+ VERIFY( r2.den == INTMAX_MAX - 1 );
}
void
std::ratio<INTMAX_MAX, 2>,
std::ratio<INTMAX_MAX, 2>>::type r1;
- VERIFY( r1.num == 1);
- VERIFY( r1.den == 1);
+ VERIFY( r1.num == 1 );
+ VERIFY( r1.den == 1 );
std::ratio_divide<
std::ratio<INTMAX_MAX-1, 2>,
std::ratio<INTMAX_MAX, 2>>::type r2;
- VERIFY( r2.num == INTMAX_MAX - 1);
- VERIFY( r2.den == INTMAX_MAX);
+ VERIFY( r2.num == INTMAX_MAX - 1 );
+ VERIFY( r2.den == INTMAX_MAX );
}
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
-
int main()
{
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
test01();
test02();
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
return 0;
}
-// { dg-options "-std=gnu++0x" }
// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
// 2008-07-03 Chris Fairles <chris.fairles@gmail.com>
#include <ratio>
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-
void
test01()
{
std::ratio_multiply<std::ratio<INTMAX_MAX>, std::ratio<INTMAX_MAX>>::type r2;
}
-// { dg-error "instantiated from here" "" { target *-*-* } 31 }
+// { dg-error "instantiated from here" "" { target *-*-* } 30 }
+// { dg-error "instantiated from here" "" { target *-*-* } 36 }
// { dg-error "instantiated from here" "" { target *-*-* } 37 }
-// { dg-error "instantiated from here" "" { target *-*-* } 38 }
// { dg-error "overflow in addition" "" { target *-*-* } 127 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 95 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 97 }
// { dg-error "overflow in multiplication" "" { target *-*-* } 99 }
// { dg-excess-errors "In instantiation of" }
// { dg-excess-errors "out of range" }
-
-#endif //_GLIBCXX_USE_C99_STDINT_TR1
}
return
}
+
+proc dg-require-cstdint { args } {
+ if { ![ check_v3_target_cstdint ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
# libstdc++ "tool init file" for DejaGNU
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
} else {
set et_debug_mode 0
- # Set up, compile, and execute a C++ test program that depends
+ # Set up and compile a C++ test program that depends
# on debug mode working.
set src debug_mode[pid].cc
set exe debug_mode[pid].exe
} else {
set et_parallel_mode 0
- # Set up, compile, and execute a C++ test program that depends
+ # Set up and compile a C++ test program that depends
# on parallel mode working.
set src parallel_mode[pid].cc
set exe parallel_mode[pid].exe
verbose "check_v3_target_parallel_mode: $et_parallel_mode" 2
return $et_parallel_mode
}
+
+proc check_v3_target_cstdint { } {
+ global cxxflags
+ global DEFAULT_CXXFLAGS
+ global et_cstdint
+
+ global tool
+
+ if { ![info exists et_cstdint_target_name] } {
+ set et_cstdint_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_cstdint_target_name } {
+ verbose "check_v3_target_cstdint: `$et_cstdint_target_name'" 2
+ set et_cstdint_target_name $current_target
+ if [info exists et_cstdint] {
+ verbose "check_v3_target_cstdint: removing cached result" 2
+ unset et_cstdint
+ }
+ }
+
+ if [info exists et_cstdint] {
+ verbose "check_v3_target_cstdint: using cached result" 2
+ } else {
+ set et_cstdint 0
+
+ # Set up and compile a C++0x test program that depends
+ # on the C99 stdint facilities to be available.
+ set src cstdint[pid].cc
+ set exe cstdint[pid].exe
+
+ set f [open $src "w"]
+ puts $f "#include <cstdint>"
+ puts $f "int main()"
+ puts $f "#ifdef _GLIBCXX_USE_C99_STDINT_TR1"
+ puts $f "{ return 0; }"
+ puts $f "#endif"
+ close $f
+
+ set cxxflags_saved $cxxflags
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -std=gnu++0x -Werror"
+
+ set lines [v3_target_compile $src $exe executable ""]
+ set cxxflags $cxxflags_saved
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, compilation succeeded.
+ set et_cstdint 1
+ } else {
+ verbose "check_v3_target_cstdint: compilation failed" 2
+ }
+ }
+ verbose "check_v3_target_cstdint: $et_cstdint" 2
+ return $et_cstdint
+}