From 0bb5199941d6058b866afe01956cca36e64cc247 Mon Sep 17 00:00:00 2001 From: Larisse Voufo Date: Tue, 18 Jun 2013 01:27:47 +0000 Subject: [PATCH] r184100 Fix -- Updated test cases for contextual conversion git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184165 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExprCXX.cpp | 6 ++--- .../cxx1y-contextual-conversion-tweaks.cpp | 22 ++++++++++++++++++- test/SemaCXX/cxx98-compat-pedantic.cpp | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 40af2075c3..d723c1fe77 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -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: diff --git a/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp b/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp index f00bf1ea31..58bbbb2a04 100644 --- a/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp +++ b/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp @@ -154,4 +154,24 @@ 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 { + + typedef decltype(sizeof(int)) size_t; + + struct Foo { + operator size_t(); // @162 + operator unsigned short(); // @163 + }; + + void bar() { + Foo x; + int *p = new int[x]; // @168 + } +} + +#ifdef CXX1Y +#else +//expected-error@168 {{ambiguous conversion of array size expression of type 'extended_examples_array_bounds::Foo' to an integral or enumeration type}} +//expected-note@162 {{conversion to integral type 'size_t'}} +//expected-note@163 {{conversion to integral type 'unsigned short' declared here}} +#endif diff --git a/test/SemaCXX/cxx98-compat-pedantic.cpp b/test/SemaCXX/cxx98-compat-pedantic.cpp index 5fe7980994..50ce6a4900 100644 --- a/test/SemaCXX/cxx98-compat-pedantic.cpp +++ b/test/SemaCXX/cxx98-compat-pedantic.cpp @@ -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 -- 2.40.0