On Sat, Jun 15, 2013 at 2:20 PM, Renato Golin <[email protected]>wrote:
> Hi Larisse, > > Seems this commit broke lots of buildbots... ;) > Yeah. That's weird. I am not exactly sure how the specific changes I made could cause that kind of damage, especially when I successfully ran all the regression tests before commiting... I was informed that buildbots haven't been the most reliable lately(?) However, I'm still not quite sure how to tell "flakes" from non-"flakes". Any idea? I just noticed that a couple of the failures have to do with a test case's expected warning message not matching some architecture-specific data. I have fixed the test case in question, and did some code-base resetting (directly mirroring the repository) over here. Hopefully that will fix at least a few of these... Thanks, -- Larisse. > cheers, > -renato > > > On 15 June 2013 21:17, Larisse Voufo <[email protected]> wrote: > >> Author: lvoufo >> Date: Sat Jun 15 15:17:46 2013 >> New Revision: 184048 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=184048&view=rev >> Log: >> Updated the support for contextual conversion tweaks (n3323) with a >> previously overlooked part: implicitly converting array sizes to size_t, >> rather than contextually converting them to some unique type. >> >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/include/clang/Sema/Sema.h >> cfe/trunk/lib/Sema/SemaExprCXX.cpp >> cfe/trunk/test/SemaCXX/cxx98-compat-pedantic.cpp >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=184048&r1=184047&r2=184048&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sat Jun 15 >> 15:17:46 2013 >> @@ -36,15 +36,15 @@ def err_typecheck_converted_constant_exp >> def err_typecheck_converted_constant_expression_disallowed : Error< >> "conversion from %0 to %1 is not allowed in a converted constant >> expression">; >> def err_expr_not_cce : Error< >> - "%select{case value|enumerator value|non-type template argument}0 " >> + "%select{case value|enumerator value|non-type template argument|array >> size}0 " >> "is not a constant expression">; >> def err_cce_narrowing : ExtWarn< >> - "%select{case value|enumerator value|non-type template argument}0 " >> + "%select{case value|enumerator value|non-type template argument|array >> size}0 " >> "%select{cannot be narrowed from type %2 to %3|" >> "evaluates to %2, which cannot be narrowed to type %3}1">, >> InGroup<CXX11Narrowing>, DefaultError; >> def err_cce_narrowing_sfinae : Error< >> - "%select{case value|enumerator value|non-type template argument}0 " >> + "%select{case value|enumerator value|non-type template argument|array >> size}0 " >> "%select{cannot be narrowed from type %2 to %3|" >> "evaluates to %2, which cannot be narrowed to type %3}1">; >> def err_ice_not_integral : Error< >> >> Modified: cfe/trunk/include/clang/Sema/Sema.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=184048&r1=184047&r2=184048&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Sema/Sema.h (original) >> +++ cfe/trunk/include/clang/Sema/Sema.h Sat Jun 15 15:17:46 2013 >> @@ -1938,9 +1938,10 @@ public: >> >> /// Contexts in which a converted constant expression is required. >> enum CCEKind { >> - CCEK_CaseValue, ///< Expression in a case label. >> - CCEK_Enumerator, ///< Enumerator value with fixed underlying type. >> - CCEK_TemplateArg ///< Value of a non-type template parameter. >> + CCEK_CaseValue, ///< Expression in a case label. >> + CCEK_Enumerator, ///< Enumerator value with fixed underlying type. >> + CCEK_TemplateArg, ///< Value of a non-type template parameter. >> + CCEK_NewExpr ///< Constant expression in a noptr-new-declarator. >> }; >> ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, >> llvm::APSInt &Value, >> CCEKind CCE); >> >> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=184048&r1=184047&r2=184048&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sat Jun 15 15:17:46 2013 >> @@ -1017,10 +1017,23 @@ Sema::ActOnCXXNew(SourceLocation StartLo >> DeclaratorChunk::ArrayTypeInfo &Array = D.getTypeObject(I).Arr; >> if (Expr *NumElts = (Expr *)Array.NumElts) { >> if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) >> { >> - Array.NumElts >> - = VerifyIntegerConstantExpression(NumElts, 0, >> - >> diag::err_new_array_nonconst) >> - .take(); >> + if (getLangOpts().CPlusPlus1y) { >> + // C++1y [expr.new]p6: Every constant-expression in a >> noptr-new-declarator >> + // shall be a converted constant expression (5.19) of type >> std::size_t >> + // and shall evaluate to a strictly positive value. >> + unsigned IntWidth = Context.getTargetInfo().getIntWidth(); >> + assert(IntWidth && "Builtin type of size 0?"); >> + llvm::APSInt Value(IntWidth); >> + Array.NumElts >> + = CheckConvertedConstantExpression(NumElts, >> Context.getSizeType(), Value, >> + CCEK_NewExpr) >> + .take(); >> + } else { >> + Array.NumElts >> + = VerifyIntegerConstantExpression(NumElts, 0, >> + >> diag::err_new_array_nonconst) >> + .take(); >> + } >> if (!Array.NumElts) >> return ExprError(); >> } >> @@ -1183,65 +1196,81 @@ Sema::BuildCXXNew(SourceRange Range, boo >> // C++1y [expr.new]p6: The expression [...] is implicitly converted to >> // std::size_t. (FIXME) >> if (ArraySize && !ArraySize->isTypeDependent()) { >> - class SizeConvertDiagnoser : public ICEConvertDiagnoser { >> - Expr *ArraySize; >> - >> - public: >> - SizeConvertDiagnoser(Expr *ArraySize) >> - : ICEConvertDiagnoser(/*AllowScopedEnumerations*/false, false, >> false), >> - ArraySize(ArraySize) {} >> - >> - virtual SemaDiagnosticBuilder diagnoseNotInt(Sema &S, >> SourceLocation Loc, >> - QualType T) { >> - return S.Diag(Loc, diag::err_array_size_not_integral) >> - << S.getLangOpts().CPlusPlus11 << T; >> - } >> - >> - virtual SemaDiagnosticBuilder diagnoseIncomplete( >> - Sema &S, SourceLocation Loc, QualType T) { >> - return S.Diag(Loc, diag::err_array_size_incomplete_type) >> - << T << ArraySize->getSourceRange(); >> - } >> - >> - virtual SemaDiagnosticBuilder diagnoseExplicitConv( >> - Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) { >> - return S.Diag(Loc, diag::err_array_size_explicit_conversion) << >> T << ConvTy; >> - } >> - >> - virtual SemaDiagnosticBuilder noteExplicitConv( >> - Sema &S, CXXConversionDecl *Conv, QualType ConvTy) { >> - return S.Diag(Conv->getLocation(), >> diag::note_array_size_conversion) >> - << ConvTy->isEnumeralType() << ConvTy; >> - } >> - >> - virtual SemaDiagnosticBuilder diagnoseAmbiguous( >> - Sema &S, SourceLocation Loc, QualType T) { >> - return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << >> T; >> - } >> - >> - virtual SemaDiagnosticBuilder noteAmbiguous( >> - Sema &S, CXXConversionDecl *Conv, QualType ConvTy) { >> - return S.Diag(Conv->getLocation(), >> diag::note_array_size_conversion) >> - << ConvTy->isEnumeralType() << ConvTy; >> - } >> + ExprResult ConvertedSize; >> + if (getLangOpts().CPlusPlus1y) { >> + unsigned IntWidth = Context.getTargetInfo().getIntWidth(); >> + assert(IntWidth && "Builtin type of size 0?"); >> + llvm::APSInt Value(IntWidth); >> + ConvertedSize = PerformImplicitConversion(ArraySize, >> Context.getSizeType(), >> + AA_Converting); >> + >> + if (!isSFINAEContext()) >> + // Diagnose the compatibility of this conversion. >> + Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion) >> + << ArraySize->getType() << 0 << Context.getSizeType(); >> + } else { >> + class SizeConvertDiagnoser : public ICEConvertDiagnoser { >> + protected: >> + Expr *ArraySize; >> + >> + public: >> + SizeConvertDiagnoser(Expr *ArraySize) >> + : ICEConvertDiagnoser(/*AllowScopedEnumerations*/false, >> false, false), >> + ArraySize(ArraySize) {} >> + >> + virtual SemaDiagnosticBuilder diagnoseNotInt(Sema &S, >> SourceLocation Loc, >> + QualType T) { >> + return S.Diag(Loc, diag::err_array_size_not_integral) >> + << S.getLangOpts().CPlusPlus11 << T; >> + } >> + >> + virtual SemaDiagnosticBuilder diagnoseIncomplete( >> + Sema &S, SourceLocation Loc, QualType T) { >> + return S.Diag(Loc, diag::err_array_size_incomplete_type) >> + << T << ArraySize->getSourceRange(); >> + } >> + >> + virtual SemaDiagnosticBuilder diagnoseExplicitConv( >> + Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) { >> + return S.Diag(Loc, diag::err_array_size_explicit_conversion) >> << T << ConvTy; >> + } >> + >> + virtual SemaDiagnosticBuilder noteExplicitConv( >> + Sema &S, CXXConversionDecl *Conv, QualType ConvTy) { >> + return S.Diag(Conv->getLocation(), >> diag::note_array_size_conversion) >> + << ConvTy->isEnumeralType() << ConvTy; >> + } >> + >> + virtual SemaDiagnosticBuilder diagnoseAmbiguous( >> + Sema &S, SourceLocation Loc, QualType T) { >> + return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) >> << T; >> + } >> + >> + virtual SemaDiagnosticBuilder noteAmbiguous( >> + Sema &S, CXXConversionDecl *Conv, QualType ConvTy) { >> + return S.Diag(Conv->getLocation(), >> diag::note_array_size_conversion) >> + << ConvTy->isEnumeralType() << ConvTy; >> + } >> >> - virtual SemaDiagnosticBuilder diagnoseConversion( >> - Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) { >> - return S.Diag(Loc, >> - S.getLangOpts().CPlusPlus11 >> - ? diag::warn_cxx98_compat_array_size_conversion >> - : diag::ext_array_size_conversion) >> - << T << ConvTy->isEnumeralType() << ConvTy; >> - } >> - } SizeDiagnoser(ArraySize); >> + virtual SemaDiagnosticBuilder diagnoseConversion( >> + Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) { >> + return S.Diag(Loc, >> + S.getLangOpts().CPlusPlus11 >> + ? diag::warn_cxx98_compat_array_size_conversion >> + : diag::ext_array_size_conversion) >> + << T << ConvTy->isEnumeralType() << ConvTy; >> + } >> + } SizeDiagnoser(ArraySize); >> >> - ExprResult ConvertedSize >> - = PerformContextualImplicitConversion(StartLoc, ArraySize, >> SizeDiagnoser); >> + ConvertedSize = PerformContextualImplicitConversion(StartLoc, >> ArraySize, >> + SizeDiagnoser); >> + } >> if (ConvertedSize.isInvalid()) >> return ExprError(); >> >> ArraySize = ConvertedSize.take(); >> QualType SizeType = ArraySize->getType(); >> + >> if (!SizeType->isIntegralOrUnscopedEnumerationType()) >> return ExprError(); >> >> >> Modified: cfe/trunk/test/SemaCXX/cxx98-compat-pedantic.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx98-compat-pedantic.cpp?rev=184048&r1=184047&r2=184048&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/cxx98-compat-pedantic.cpp (original) >> +++ cfe/trunk/test/SemaCXX/cxx98-compat-pedantic.cpp Sat Jun 15 15:17:46 >> 2013 >> @@ -1,10 +1,10 @@ >> -// RUN: %clang_cc1 -fsyntax-only -std=c++1y -DCXX1Y >> -Wc++98-compat-pedantic -verify %s >> -// RUN: %clang_cc1 -fsyntax-only -std=c++1y -DCXX1Y -Wc++98-compat >> -Werror %s >> +// RUN: %clang_cc1 -fsyntax-only -std=c++1y -DCXX1Y >> -Wc++98-compat-pedantic -verify %s -DCXX1Y2 >> +// RUN: %clang_cc1 -fsyntax-only -std=c++1y -DCXX1Y -Wc++98-compat >> -Werror %s -DCXX1Y2 >> // RUN: %clang_cc1 -fsyntax-only -std=c++11 -Wc++98-compat-pedantic >> -verify %s >> // RUN: %clang_cc1 -fsyntax-only -std=c++11 -Wc++98-compat -Werror %s >> // RUN: %clang_cc1 -fsyntax-only -std=c++98 -Werror %s >> >> -// RUN: %clang_cc1 -fsyntax-only -std=c++1y -Wc++98-compat-pedantic >> -verify %s -Wno-c++98-c++11-compat-pedantic >> +// RUN: %clang_cc1 -fsyntax-only -std=c++1y -Wc++98-compat-pedantic >> -verify %s -Wno-c++98-c++11-compat-pedantic -DCXX1Y2 >> >> // -Wc++98-compat-pedantic warns on C++11 features which we accept >> without a >> // warning in C++98 mode. >> @@ -32,7 +32,12 @@ void *FnVoidPtr = (void*)&dlsym; // expe >> struct ConvertToInt { >> operator int(); >> }; >> -int *ArraySizeConversion = new int[ConvertToInt()]; // expected-warning >> {{implicit conversion from array size expression of type 'ConvertToInt' to >> integral type 'int' is incompatible with C++98}} >> +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}} >> +#else >> +// expected-warning@-4 {{implicit conversion from array size expression >> of type 'ConvertToInt' to integral type 'int' is incompatible with C++98}} >> +#endif >> >> template<typename T> class ExternTemplate {}; >> extern template class ExternTemplate<int>; // expected-warning {{extern >> templates are incompatible with C++98}} >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
