diff options
author | Anders Carlsson <andersca@mac.com> | 2009-08-27 17:14:02 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-08-27 17:14:02 +0000 |
commit | 5ec4abf2684ddef0b50fbc6fde3d579f3ad8faba (patch) | |
tree | 6fef24b4a94576804a4881209866bd7671238953 /clang/lib/Sema | |
parent | 962c3747818be49934894f1a36dd2ec06b8031f1 (diff) | |
download | bcm5719-llvm-5ec4abf2684ddef0b50fbc6fde3d579f3ad8faba.tar.gz bcm5719-llvm-5ec4abf2684ddef0b50fbc6fde3d579f3ad8faba.zip |
Revert the flags change for now, I have a better idea for this.
llvm-svn: 80255
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/Sema.h | 12 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 18 |
4 files changed, 15 insertions, 31 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 8a8e9456ca2..a5a0723256f 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -721,17 +721,13 @@ public: bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old); /// C++ Overloading. - enum OverloadResolutionFlags { - ORF_None = 0x0, - ORF_SuppressUserConversions = 0x1, - ORF_AllowExplicit = 0x2, - ORF_ForceRValue = 0x4 - }; - bool IsOverload(FunctionDecl *New, Decl* OldD, OverloadedFunctionDecl::function_iterator &MatchedDecl); ImplicitConversionSequence - TryImplicitConversion(Expr* From, QualType ToType, unsigned Flags = ORF_None); + TryImplicitConversion(Expr* From, QualType ToType, + bool SuppressUserConversions = false, + bool AllowExplicit = false, + bool ForceRValue = false); bool IsStandardConversion(Expr *From, QualType ToType, StandardConversionSequence& SCS); bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType); diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index be45a2d56d9..c5eda94b6a6 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3144,10 +3144,7 @@ Sema::CheckReferenceInit(Expr *&Init, QualType DeclType, // the argument expression. Any difference in top-level // cv-qualification is subsumed by the initialization itself // and does not constitute a conversion. - *ICS = TryImplicitConversion(Init, T1, - SuppressUserConversions ? - ORF_SuppressUserConversions : - ORF_None); + *ICS = TryImplicitConversion(Init, T1, SuppressUserConversions); // Of course, that's still a reference binding. if (ICS->ConversionKind == ImplicitConversionSequence::StandardConversion) { ICS->Standard.ReferenceBinding = true; diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 1d05008cbe9..85924948da7 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -881,19 +881,14 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType, const char *Flavor, bool AllowExplicit, bool Elidable) { - unsigned Flags = ORF_None; - if (AllowExplicit) - Flags |= ORF_AllowExplicit; - ImplicitConversionSequence ICS; ICS.ConversionKind = ImplicitConversionSequence::BadConversion; if (Elidable && getLangOptions().CPlusPlus0x) { - Flags |= ORF_ForceRValue; - - ICS = TryImplicitConversion(From, ToType, Flags); + ICS = TryImplicitConversion(From, ToType, /*SuppressUserConversions*/false, + AllowExplicit, /*ForceRValue*/true); } if (ICS.ConversionKind == ImplicitConversionSequence::BadConversion) { - ICS = TryImplicitConversion(From, ToType, Flags); + ICS = TryImplicitConversion(From, ToType, false, AllowExplicit); } return PerformImplicitConversion(From, ToType, ICS, Flavor); } diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 2c8c7317975..dde5c287236 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -408,11 +408,10 @@ Sema::IsOverload(FunctionDecl *New, Decl* OldD, /// If @p ForceRValue, then overloading is performed as if From was an rvalue, /// no matter its actual lvalueness. ImplicitConversionSequence -Sema::TryImplicitConversion(Expr* From, QualType ToType, unsigned Flags) { - bool SuppressUserConversions = Flags & ORF_SuppressUserConversions; - bool AllowExplicit = Flags & ORF_AllowExplicit; - bool ForceRValue = Flags & ORF_ForceRValue; - +Sema::TryImplicitConversion(Expr* From, QualType ToType, + bool SuppressUserConversions, + bool AllowExplicit, bool ForceRValue) +{ ImplicitConversionSequence ICS; if (IsStandardConversion(From, ToType, ICS.Standard)) ICS.ConversionKind = ImplicitConversionSequence::StandardConversion; @@ -1930,11 +1929,8 @@ Sema::TryCopyInitialization(Expr *From, QualType ToType, /*AllowExplicit=*/false, ForceRValue); return ICS; } else { - unsigned Flags = ORF_None; - if (SuppressUserConversions) Flags |= ORF_SuppressUserConversions; - if (ForceRValue) Flags |= ORF_ForceRValue; - - return TryImplicitConversion(From, ToType, Flags); + return TryImplicitConversion(From, ToType, SuppressUserConversions, + ForceRValue); } } @@ -2068,7 +2064,7 @@ Sema::PerformObjectArgumentInitialization(Expr *&From, CXXMethodDecl *Method) { /// TryContextuallyConvertToBool - Attempt to contextually convert the /// expression From to bool (C++0x [conv]p3). ImplicitConversionSequence Sema::TryContextuallyConvertToBool(Expr *From) { - return TryImplicitConversion(From, Context.BoolTy, ORF_AllowExplicit); + return TryImplicitConversion(From, Context.BoolTy, false, true); } /// PerformContextuallyConvertToBool - Perform a contextual conversion |