Updated test cases for contextual conversion

llvm-svn: 184100
This commit is contained in:
Larisse Voufo 2013-06-17 18:41:38 +00:00
parent 55ab87f151
commit 249f9277a4
3 changed files with 23 additions and 5 deletions

View File

@ -1205,9 +1205,9 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
AA_Converting);
if (!isSFINAEContext())
// Diagnose the compatibility of this conversion.
Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion)
<< ArraySize->getType() << 0 << Context.getSizeType();
// Diagnose the compatibility of this conversion.
Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion)
<< ArraySize->getType() << 0 << "'size_t'";
} else {
class SizeConvertDiagnoser : public ICEConvertDiagnoser {
protected:

View File

@ -154,4 +154,22 @@ namespace extended_examples_cxx1y {
//expected-error@143 {{cannot initialize object parameter of type 'extended_examples_cxx1y::D' with an expression of type 'extended_examples_cxx1y::D'}}
#endif
// FIXME: Extend with more examples, including [expr.const] and [expr.new].
namespace extended_examples_array_bounds {
struct Foo {
operator unsigned long(); // @160
operator unsigned short(); // @161
};
void bar() {
Foo x;
int *p = new int[x]; // @166
}
}
#ifdef CXX1Y
#else
//expected-error@166 {{ambiguous conversion of array size expression of type 'extended_examples_array_bounds::Foo' to an integral or enumeration type}}
//expected-note@160 {{conversion to integral type 'unsigned long' declared here}}
//expected-note@161 {{conversion to integral type 'unsigned short' declared here}}
#endif

View File

@ -34,7 +34,7 @@ struct ConvertToInt {
};
int *ArraySizeConversion = new int[ConvertToInt()];
#ifdef CXX1Y2
// expected-warning@-2 {{implicit conversion from array size expression of type 'ConvertToInt' to integral type}} // 'unsigned long' is incompatible with C++98}}
// expected-warning@-2 {{implicit conversion from array size expression of type 'ConvertToInt' to integral type 'size_t' is incompatible with C++98}}
#else
// expected-warning@-4 {{implicit conversion from array size expression of type 'ConvertToInt' to integral type 'int' is incompatible with C++98}}
#endif