forked from OSchip/llvm-project
parent
9fb823bbd4
commit
2bf7fdb723
|
@ -48,7 +48,7 @@ LANGOPT(MicrosoftMode , 1, 0, "Microsoft compatibility mode")
|
|||
LANGOPT(AsmBlocks , 1, 0, "Microsoft inline asm blocks")
|
||||
LANGOPT(Borland , 1, 0, "Borland extensions")
|
||||
LANGOPT(CPlusPlus , 1, 0, "C++")
|
||||
LANGOPT(CPlusPlus0x , 1, 0, "C++0x")
|
||||
LANGOPT(CPlusPlus11 , 1, 0, "C++0x")
|
||||
LANGOPT(CPlusPlus1y , 1, 0, "C++1y")
|
||||
LANGOPT(ObjC1 , 1, 0, "Objective-C 1")
|
||||
LANGOPT(ObjC2 , 1, 0, "Objective-C 2")
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace prec {
|
|||
|
||||
/// \brief Return the precedence of the specified binary operator token.
|
||||
prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
|
||||
bool CPlusPlus0x);
|
||||
bool CPlusPlus11);
|
||||
|
||||
} // end namespace clang
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ enum LangFeatures {
|
|||
C99 = (1 << 2),
|
||||
C11 = (1 << 3),
|
||||
CPlusPlus = (1 << 4),
|
||||
CPlusPlus0x = (1 << 5),
|
||||
CPlusPlus11 = (1 << 5),
|
||||
CPlusPlus1y = (1 << 6),
|
||||
Digraphs = (1 << 7),
|
||||
GNUMode = (1 << 8),
|
||||
|
@ -69,8 +69,8 @@ public:
|
|||
/// isCPlusPlus - Language is a C++ variant.
|
||||
bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
|
||||
|
||||
/// isCPlusPlus0x - Language is a C++0x variant.
|
||||
bool isCPlusPlus0x() const { return Flags & frontend::CPlusPlus0x; }
|
||||
/// isCPlusPlus11 - Language is a C++0x variant.
|
||||
bool isCPlusPlus11() const { return Flags & frontend::CPlusPlus11; }
|
||||
|
||||
/// isCPlusPlus1y - Language is a C++1y variant.
|
||||
bool isCPlusPlus1y() const { return Flags & frontend::CPlusPlus1y; }
|
||||
|
|
|
@ -96,23 +96,23 @@ LANGSTANDARD(gnucxx98, "gnu++98",
|
|||
|
||||
LANGSTANDARD(cxx0x, "c++0x",
|
||||
"ISO C++ 2011 with amendments",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | Digraphs)
|
||||
LineComment | CPlusPlus | CPlusPlus11 | Digraphs)
|
||||
LANGSTANDARD(cxx11, "c++11",
|
||||
"ISO C++ 2011 with amendments",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | Digraphs)
|
||||
LineComment | CPlusPlus | CPlusPlus11 | Digraphs)
|
||||
LANGSTANDARD(gnucxx0x, "gnu++0x",
|
||||
"ISO C++ 2011 with amendments and GNU extensions",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | Digraphs | GNUMode)
|
||||
LineComment | CPlusPlus | CPlusPlus11 | Digraphs | GNUMode)
|
||||
LANGSTANDARD(gnucxx11, "gnu++11",
|
||||
"ISO C++ 2011 with amendments and GNU extensions",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | Digraphs | GNUMode)
|
||||
LineComment | CPlusPlus | CPlusPlus11 | Digraphs | GNUMode)
|
||||
|
||||
LANGSTANDARD(cxx1y, "c++1y",
|
||||
"Working draft for ISO C++ 2014",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | CPlusPlus1y | Digraphs)
|
||||
LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus1y | Digraphs)
|
||||
LANGSTANDARD(gnucxx1y, "gnu++1y",
|
||||
"Working draft for ISO C++ 2014 with GNU extensions",
|
||||
LineComment | CPlusPlus | CPlusPlus0x | CPlusPlus1y | Digraphs |
|
||||
LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus1y | Digraphs |
|
||||
GNUMode)
|
||||
|
||||
// OpenCL
|
||||
|
|
|
@ -1812,7 +1812,7 @@ private:
|
|||
// an attribute is not allowed.
|
||||
bool CheckProhibitedCXX11Attribute() {
|
||||
assert(Tok.is(tok::l_square));
|
||||
if (!getLangOpts().CPlusPlus0x || NextToken().isNot(tok::l_square))
|
||||
if (!getLangOpts().CPlusPlus11 || NextToken().isNot(tok::l_square))
|
||||
return false;
|
||||
return DiagnoseProhibitedCXX11Attribute();
|
||||
}
|
||||
|
@ -1857,7 +1857,7 @@ private:
|
|||
AttributeList::Syntax Syntax);
|
||||
|
||||
void MaybeParseCXX0XAttributes(Declarator &D) {
|
||||
if (getLangOpts().CPlusPlus0x && isCXX11AttributeSpecifier()) {
|
||||
if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {
|
||||
ParsedAttributesWithRange attrs(AttrFactory);
|
||||
SourceLocation endLoc;
|
||||
ParseCXX11Attributes(attrs, &endLoc);
|
||||
|
@ -1866,7 +1866,7 @@ private:
|
|||
}
|
||||
void MaybeParseCXX0XAttributes(ParsedAttributes &attrs,
|
||||
SourceLocation *endLoc = 0) {
|
||||
if (getLangOpts().CPlusPlus0x && isCXX11AttributeSpecifier()) {
|
||||
if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {
|
||||
ParsedAttributesWithRange attrsWithRange(AttrFactory);
|
||||
ParseCXX11Attributes(attrsWithRange, endLoc);
|
||||
attrs.takeAllFrom(attrsWithRange);
|
||||
|
@ -1875,7 +1875,7 @@ private:
|
|||
void MaybeParseCXX0XAttributes(ParsedAttributesWithRange &attrs,
|
||||
SourceLocation *endLoc = 0,
|
||||
bool OuterMightBeMessageSend = false) {
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
isCXX11AttributeSpecifier(false, OuterMightBeMessageSend))
|
||||
ParseCXX11Attributes(attrs, endLoc);
|
||||
}
|
||||
|
|
|
@ -3433,7 +3433,7 @@ public:
|
|||
public:
|
||||
explicit ImplicitExceptionSpecification(Sema &Self)
|
||||
: Self(&Self), ComputedEST(EST_BasicNoexcept) {
|
||||
if (!Self.getLangOpts().CPlusPlus0x)
|
||||
if (!Self.getLangOpts().CPlusPlus11)
|
||||
ComputedEST = EST_DynamicNone;
|
||||
}
|
||||
|
||||
|
|
|
@ -1385,7 +1385,7 @@ bool VarDecl::isUsableInConstantExpressions(ASTContext &C) const {
|
|||
|
||||
// In C++11, any variable of reference type can be used in a constant
|
||||
// expression if it is initialized by a constant expression.
|
||||
if (Lang.CPlusPlus0x && getType()->isReferenceType())
|
||||
if (Lang.CPlusPlus11 && getType()->isReferenceType())
|
||||
return true;
|
||||
|
||||
// Only const objects can be used in constant expressions in C++. C++98 does
|
||||
|
@ -1401,7 +1401,7 @@ bool VarDecl::isUsableInConstantExpressions(ASTContext &C) const {
|
|||
|
||||
// Additionally, in C++11, non-volatile constexpr variables can be used in
|
||||
// constant expressions.
|
||||
return Lang.CPlusPlus0x && isConstexpr();
|
||||
return Lang.CPlusPlus11 && isConstexpr();
|
||||
}
|
||||
|
||||
/// Convert the initializer for this declaration to the elaborated EvaluatedStmt
|
||||
|
@ -1457,7 +1457,7 @@ APValue *VarDecl::evaluateValue(
|
|||
|
||||
// In C++11, we have determined whether the initializer was a constant
|
||||
// expression as a side-effect.
|
||||
if (getASTContext().getLangOpts().CPlusPlus0x && !Eval->CheckedICE) {
|
||||
if (getASTContext().getLangOpts().CPlusPlus11 && !Eval->CheckedICE) {
|
||||
Eval->CheckedICE = true;
|
||||
Eval->IsICE = Result && Notes.empty();
|
||||
}
|
||||
|
@ -1481,7 +1481,7 @@ bool VarDecl::checkInitIsICE() const {
|
|||
|
||||
// In C++11, evaluate the initializer to check whether it's a constant
|
||||
// expression.
|
||||
if (getASTContext().getLangOpts().CPlusPlus0x) {
|
||||
if (getASTContext().getLangOpts().CPlusPlus11) {
|
||||
llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
|
||||
evaluateValue(Notes);
|
||||
return Eval->IsICE;
|
||||
|
|
|
@ -500,7 +500,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
// C++0x [dcl.init.aggr]p1:
|
||||
// An aggregate is an array or a class with no user-provided
|
||||
// constructors [...].
|
||||
if (getASTContext().getLangOpts().CPlusPlus0x
|
||||
if (getASTContext().getLangOpts().CPlusPlus11
|
||||
? UserProvided : !Constructor->isImplicit())
|
||||
data().Aggregate = false;
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ static void computeDeclRefDependence(ASTContext &Ctx, NamedDecl *D, QualType T,
|
|||
// - an entity with reference type and is initialized with an
|
||||
// expression that is value-dependent [C++11]
|
||||
if (VarDecl *Var = dyn_cast<VarDecl>(D)) {
|
||||
if ((Ctx.getLangOpts().CPlusPlus0x ?
|
||||
if ((Ctx.getLangOpts().CPlusPlus11 ?
|
||||
Var->getType()->isLiteralType() :
|
||||
Var->getType()->isIntegralOrEnumerationType()) &&
|
||||
(Var->getType().isConstQualified() ||
|
||||
|
@ -3030,7 +3030,7 @@ Expr::isNullPointerConstant(ASTContext &Ctx,
|
|||
// test for the value 0. Don't use the C++11 constant expression semantics
|
||||
// for this, for now; once the dust settles on core issue 903, we might only
|
||||
// allow a literal 0 here in C++11 mode.
|
||||
if (Ctx.getLangOpts().CPlusPlus0x) {
|
||||
if (Ctx.getLangOpts().CPlusPlus11) {
|
||||
if (!isCXX98IntegralConstantExpr(Ctx))
|
||||
return NPCK_NotNull;
|
||||
} else {
|
||||
|
|
|
@ -738,7 +738,7 @@ namespace {
|
|||
bool checkSubobject(EvalInfo &Info, const Expr *E, CheckSubobjectKind CSK) {
|
||||
// Outside C++11, do not build a designator referring to a subobject of
|
||||
// any object: we won't use such a designator for anything.
|
||||
if (!Info.getLangOpts().CPlusPlus0x)
|
||||
if (!Info.getLangOpts().CPlusPlus11)
|
||||
Designator.setInvalid();
|
||||
return checkNullPointer(Info, E, CSK) &&
|
||||
Designator.checkSubobject(Info, E, CSK);
|
||||
|
@ -972,7 +972,7 @@ static bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc,
|
|||
// manufacture when checking potential constant expressions is conservatively
|
||||
// assumed to be global here.
|
||||
if (!IsGlobalLValue(Base)) {
|
||||
if (Info.getLangOpts().CPlusPlus0x) {
|
||||
if (Info.getLangOpts().CPlusPlus11) {
|
||||
const ValueDecl *VD = Base.dyn_cast<const ValueDecl*>();
|
||||
Info.Diag(Loc, diag::note_constexpr_non_global, 1)
|
||||
<< IsReferenceType << !Designator.Entries.empty()
|
||||
|
@ -1026,7 +1026,7 @@ static bool CheckLiteralType(EvalInfo &Info, const Expr *E) {
|
|||
return true;
|
||||
|
||||
// Prvalue constant expressions must be of literal types.
|
||||
if (Info.getLangOpts().CPlusPlus0x)
|
||||
if (Info.getLangOpts().CPlusPlus11)
|
||||
Info.Diag(E, diag::note_constexpr_nonliteral)
|
||||
<< E->getType();
|
||||
else
|
||||
|
@ -1527,7 +1527,7 @@ static bool ExtractSubobject(EvalInfo &Info, const Expr *E,
|
|||
// A diagnostic will have already been produced.
|
||||
return false;
|
||||
if (Sub.isOnePastTheEnd()) {
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus0x ?
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus11 ?
|
||||
(unsigned)diag::note_constexpr_read_past_end :
|
||||
(unsigned)diag::note_invalid_subexpr_in_const_expr);
|
||||
return false;
|
||||
|
@ -1549,7 +1549,7 @@ static bool ExtractSubobject(EvalInfo &Info, const Expr *E,
|
|||
if (CAT->getSize().ule(Index)) {
|
||||
// Note, it should not be possible to form a pointer with a valid
|
||||
// designator which points more than one past the end of the array.
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus0x ?
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus11 ?
|
||||
(unsigned)diag::note_constexpr_read_past_end :
|
||||
(unsigned)diag::note_invalid_subexpr_in_const_expr);
|
||||
return false;
|
||||
|
@ -1571,7 +1571,7 @@ static bool ExtractSubobject(EvalInfo &Info, const Expr *E,
|
|||
// Next subobject is a complex number.
|
||||
uint64_t Index = Sub.Entries[I].ArrayIndex;
|
||||
if (Index > 1) {
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus0x ?
|
||||
Info.Diag(E, Info.getLangOpts().CPlusPlus11 ?
|
||||
(unsigned)diag::note_constexpr_read_past_end :
|
||||
(unsigned)diag::note_invalid_subexpr_in_const_expr);
|
||||
return false;
|
||||
|
@ -1796,7 +1796,7 @@ static bool HandleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv,
|
|||
// We support folding of const floating-point types, in order to make
|
||||
// static const data members of such types (supported as an extension)
|
||||
// more useful.
|
||||
if (Info.getLangOpts().CPlusPlus0x) {
|
||||
if (Info.getLangOpts().CPlusPlus11) {
|
||||
Info.CCEDiag(Conv, diag::note_constexpr_ltor_non_constexpr, 1) << VD;
|
||||
Info.Note(VD->getLocation(), diag::note_declared_at);
|
||||
} else {
|
||||
|
@ -1804,7 +1804,7 @@ static bool HandleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv,
|
|||
}
|
||||
} else {
|
||||
// FIXME: Allow folding of values of any literal type in all languages.
|
||||
if (Info.getLangOpts().CPlusPlus0x) {
|
||||
if (Info.getLangOpts().CPlusPlus11) {
|
||||
Info.Diag(Conv, diag::note_constexpr_ltor_non_constexpr, 1) << VD;
|
||||
Info.Note(VD->getLocation(), diag::note_declared_at);
|
||||
} else {
|
||||
|
@ -2081,7 +2081,7 @@ static bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc,
|
|||
// call is a core constant expression whether or not the constructor is
|
||||
// constexpr.
|
||||
if (!CD->isConstexpr() && !IsValueInitialization) {
|
||||
if (Info.getLangOpts().CPlusPlus0x) {
|
||||
if (Info.getLangOpts().CPlusPlus11) {
|
||||
// FIXME: If DiagDecl is an implicitly-declared special member function,
|
||||
// we should be much more explicit about why it's not constexpr.
|
||||
Info.CCEDiag(Loc, diag::note_constexpr_invalid_function, 1)
|
||||
|
@ -2109,7 +2109,7 @@ static bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc,
|
|||
if (Definition && Definition->isConstexpr() && !Definition->isInvalidDecl())
|
||||
return true;
|
||||
|
||||
if (Info.getLangOpts().CPlusPlus0x) {
|
||||
if (Info.getLangOpts().CPlusPlus11) {
|
||||
const FunctionDecl *DiagDecl = Definition ? Definition : Declaration;
|
||||
// FIXME: If DiagDecl is an implicitly-declared special member function, we
|
||||
// should be much more explicit about why it's not constexpr.
|
||||
|
@ -4318,7 +4318,7 @@ bool IntExprEvaluator::VisitCallExpr(const CallExpr *E) {
|
|||
|
||||
case Builtin::BIstrlen:
|
||||
// A call to strlen is not a constant expression.
|
||||
if (Info.getLangOpts().CPlusPlus0x)
|
||||
if (Info.getLangOpts().CPlusPlus11)
|
||||
Info.CCEDiag(E, diag::note_constexpr_invalid_function)
|
||||
<< /*isConstexpr*/0 << /*isConstructor*/0 << "'strlen'";
|
||||
else
|
||||
|
@ -6192,12 +6192,12 @@ static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {
|
|||
return false;
|
||||
Result = Info.CurrentCall->Temporaries[E];
|
||||
} else if (E->getType()->isVoidType()) {
|
||||
if (!Info.getLangOpts().CPlusPlus0x)
|
||||
if (!Info.getLangOpts().CPlusPlus11)
|
||||
Info.CCEDiag(E, diag::note_constexpr_nonliteral)
|
||||
<< E->getType();
|
||||
if (!EvaluateVoid(E, Info))
|
||||
return false;
|
||||
} else if (Info.getLangOpts().CPlusPlus0x) {
|
||||
} else if (Info.getLangOpts().CPlusPlus11) {
|
||||
Info.Diag(E, diag::note_constexpr_nonliteral) << E->getType();
|
||||
return false;
|
||||
} else {
|
||||
|
@ -6267,7 +6267,7 @@ bool Expr::EvaluateAsRValue(EvalResult &Result, const ASTContext &Ctx) const {
|
|||
// FIXME: Evaluating values of large array and record types can cause
|
||||
// performance problems. Only do so in C++11 for now.
|
||||
if (isRValue() && (getType()->isArrayType() || getType()->isRecordType()) &&
|
||||
!Ctx.getLangOpts().CPlusPlus0x)
|
||||
!Ctx.getLangOpts().CPlusPlus11)
|
||||
return false;
|
||||
|
||||
EvalInfo Info(Ctx, Result);
|
||||
|
@ -6314,7 +6314,7 @@ bool Expr::EvaluateAsInitializer(APValue &Value, const ASTContext &Ctx,
|
|||
// FIXME: Evaluating initializers for large array and record types can cause
|
||||
// performance problems. Only do so in C++11 for now.
|
||||
if (isRValue() && (getType()->isArrayType() || getType()->isRecordType()) &&
|
||||
!Ctx.getLangOpts().CPlusPlus0x)
|
||||
!Ctx.getLangOpts().CPlusPlus11)
|
||||
return false;
|
||||
|
||||
Expr::EvalStatus EStatus;
|
||||
|
@ -6796,7 +6796,7 @@ static bool EvaluateCPlusPlus11IntegralConstantExpr(ASTContext &Ctx,
|
|||
}
|
||||
|
||||
bool Expr::isIntegerConstantExpr(ASTContext &Ctx, SourceLocation *Loc) const {
|
||||
if (Ctx.getLangOpts().CPlusPlus0x)
|
||||
if (Ctx.getLangOpts().CPlusPlus11)
|
||||
return EvaluateCPlusPlus11IntegralConstantExpr(Ctx, this, 0, Loc);
|
||||
|
||||
ICEDiag D = CheckICE(this, Ctx);
|
||||
|
@ -6809,7 +6809,7 @@ bool Expr::isIntegerConstantExpr(ASTContext &Ctx, SourceLocation *Loc) const {
|
|||
|
||||
bool Expr::isIntegerConstantExpr(llvm::APSInt &Value, ASTContext &Ctx,
|
||||
SourceLocation *Loc, bool isEvaluated) const {
|
||||
if (Ctx.getLangOpts().CPlusPlus0x)
|
||||
if (Ctx.getLangOpts().CPlusPlus11)
|
||||
return EvaluateCPlusPlus11IntegralConstantExpr(Ctx, this, &Value, Loc);
|
||||
|
||||
if (!isIntegerConstantExpr(Ctx, Loc))
|
||||
|
|
|
@ -940,7 +940,7 @@ bool Type::isIncompleteType(NamedDecl **Def) const {
|
|||
|
||||
bool QualType::isPODType(ASTContext &Context) const {
|
||||
// C++11 has a more relaxed definition of POD.
|
||||
if (Context.getLangOpts().CPlusPlus0x)
|
||||
if (Context.getLangOpts().CPlusPlus11)
|
||||
return isCXX11PODType(Context);
|
||||
|
||||
return isCXX98PODType(Context);
|
||||
|
|
|
@ -204,7 +204,7 @@ clang::analyze_format_string::ParseLengthModifier(FormatSpecifier &FS,
|
|||
case 'L': lmKind = LengthModifier::AsLongDouble; ++I; break;
|
||||
case 'q': lmKind = LengthModifier::AsQuad; ++I; break;
|
||||
case 'a':
|
||||
if (IsScanf && !LO.C99 && !LO.CPlusPlus0x) {
|
||||
if (IsScanf && !LO.C99 && !LO.CPlusPlus11) {
|
||||
// For scanf in C90, look at the next character to see if this should
|
||||
// be parsed as the GNU extension 'a' length modifier. If not, this
|
||||
// will be parsed as a conversion specifier.
|
||||
|
|
|
@ -496,7 +496,7 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
|
|||
}
|
||||
|
||||
// Handle size_t, ptrdiff_t, etc. that have dedicated length modifiers in C99.
|
||||
if (isa<TypedefType>(QT) && (LangOpt.C99 || LangOpt.CPlusPlus0x))
|
||||
if (isa<TypedefType>(QT) && (LangOpt.C99 || LangOpt.CPlusPlus11))
|
||||
namedTypeToLengthModifier(QT, LM);
|
||||
|
||||
// If fixing the length modifier was enough, we are done.
|
||||
|
|
|
@ -445,7 +445,7 @@ bool ScanfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
|
|||
}
|
||||
|
||||
// Handle size_t, ptrdiff_t, etc. that have dedicated length modifiers in C99.
|
||||
if (isa<TypedefType>(PT) && (LangOpt.C99 || LangOpt.CPlusPlus0x))
|
||||
if (isa<TypedefType>(PT) && (LangOpt.C99 || LangOpt.CPlusPlus11))
|
||||
namedTypeToLengthModifier(PT, LM);
|
||||
|
||||
// If fixing the length modifier was enough, we are done.
|
||||
|
|
|
@ -124,7 +124,7 @@ static void AddKeyword(StringRef Keyword,
|
|||
unsigned AddResult = 0;
|
||||
if (Flags == KEYALL) AddResult = 2;
|
||||
else if (LangOpts.CPlusPlus && (Flags & KEYCXX)) AddResult = 2;
|
||||
else if (LangOpts.CPlusPlus0x && (Flags & KEYCXX0X)) AddResult = 2;
|
||||
else if (LangOpts.CPlusPlus11 && (Flags & KEYCXX0X)) AddResult = 2;
|
||||
else if (LangOpts.C99 && (Flags & KEYC99)) AddResult = 2;
|
||||
else if (LangOpts.GNUKeywords && (Flags & KEYGNU)) AddResult = 1;
|
||||
else if (LangOpts.MicrosoftExt && (Flags & KEYMS)) AddResult = 1;
|
||||
|
|
|
@ -56,7 +56,7 @@ static bool hasFeature(StringRef Feature, const LangOptions &LangOpts,
|
|||
.Case("altivec", LangOpts.AltiVec)
|
||||
.Case("blocks", LangOpts.Blocks)
|
||||
.Case("cplusplus", LangOpts.CPlusPlus)
|
||||
.Case("cplusplus11", LangOpts.CPlusPlus0x)
|
||||
.Case("cplusplus11", LangOpts.CPlusPlus11)
|
||||
.Case("objc", LangOpts.ObjC1)
|
||||
.Case("objc_arc", LangOpts.ObjCAutoRefCount)
|
||||
.Case("opencl", LangOpts.OpenCL)
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
namespace clang {
|
||||
|
||||
prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
|
||||
bool CPlusPlus0x) {
|
||||
bool CPlusPlus11) {
|
||||
switch (Kind) {
|
||||
case tok::greater:
|
||||
// C++ [temp.names]p3:
|
||||
|
@ -34,7 +34,7 @@ prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
|
|||
// consecutive but distinct > tokens, the first of which is
|
||||
// taken as the end of the template-argument-list and completes
|
||||
// the template-id. [...]
|
||||
if (GreaterThanIsOperator || !CPlusPlus0x)
|
||||
if (GreaterThanIsOperator || !CPlusPlus11)
|
||||
return prec::Shift;
|
||||
return prec::Unknown;
|
||||
|
||||
|
|
|
@ -575,7 +575,7 @@ protected:
|
|||
if (Opts.MicrosoftExt) {
|
||||
Builder.defineMacro("_MSC_EXTENSIONS");
|
||||
|
||||
if (Opts.CPlusPlus0x) {
|
||||
if (Opts.CPlusPlus11) {
|
||||
Builder.defineMacro("_RVALUE_REFERENCES_V2_SUPPORTED");
|
||||
Builder.defineMacro("_RVALUE_REFERENCES_SUPPORTED");
|
||||
Builder.defineMacro("_NATIVE_NULLPTR_SUPPORTED");
|
||||
|
|
|
@ -310,7 +310,7 @@ static unsigned getDeclShowContexts(NamedDecl *ND,
|
|||
Contexts |= (1LL << CodeCompletionContext::CCC_EnumTag);
|
||||
|
||||
// Part of the nested-name-specifier in C++0x.
|
||||
if (LangOpts.CPlusPlus0x)
|
||||
if (LangOpts.CPlusPlus11)
|
||||
IsNestedNameSpecifier = true;
|
||||
} else if (RecordDecl *Record = dyn_cast<RecordDecl>(ND)) {
|
||||
if (Record->isUnion())
|
||||
|
|
|
@ -959,7 +959,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
|
|||
Opts.C99 = Std.isC99();
|
||||
Opts.C11 = Std.isC11();
|
||||
Opts.CPlusPlus = Std.isCPlusPlus();
|
||||
Opts.CPlusPlus0x = Std.isCPlusPlus0x();
|
||||
Opts.CPlusPlus11 = Std.isCPlusPlus11();
|
||||
Opts.CPlusPlus1y = Std.isCPlusPlus1y();
|
||||
Opts.Digraphs = Std.hasDigraphs();
|
||||
Opts.GNUMode = Std.isGNUMode();
|
||||
|
|
|
@ -307,7 +307,7 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
|
|||
// C++11 [cpp.predefined]p1:
|
||||
// The name __cplusplus is defined to the value 201103L when compiling a
|
||||
// C++ translation unit.
|
||||
if (LangOpts.CPlusPlus0x)
|
||||
if (LangOpts.CPlusPlus11)
|
||||
Builder.defineMacro("__cplusplus", "201103L");
|
||||
// C++03 [cpp.predefined]p1:
|
||||
// The name __cplusplus is defined to the value 199711L when compiling a
|
||||
|
@ -377,7 +377,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
|
|||
if (!LangOpts.GNUMode)
|
||||
Builder.defineMacro("__STRICT_ANSI__");
|
||||
|
||||
if (LangOpts.CPlusPlus0x)
|
||||
if (LangOpts.CPlusPlus11)
|
||||
Builder.defineMacro("__GXX_EXPERIMENTAL_CXX0X__");
|
||||
|
||||
if (LangOpts.ObjC1) {
|
||||
|
|
|
@ -1630,7 +1630,7 @@ const char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr) {
|
|||
unsigned Size;
|
||||
char C = getCharAndSize(CurPtr, Size);
|
||||
if (isIdentifierHead(C)) {
|
||||
if (!getLangOpts().CPlusPlus0x) {
|
||||
if (!getLangOpts().CPlusPlus11) {
|
||||
if (!isLexingRawMode())
|
||||
Diag(CurPtr,
|
||||
C == '_' ? diag::warn_cxx11_compat_user_defined_literal
|
||||
|
@ -2425,7 +2425,7 @@ bool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {
|
|||
// C99 5.1.1.2p2: If the file is non-empty and didn't end in a newline, issue
|
||||
// a pedwarn.
|
||||
if (CurPtr != BufferStart && (CurPtr[-1] != '\n' && CurPtr[-1] != '\r'))
|
||||
Diag(BufferEnd, LangOpts.CPlusPlus0x ? // C++11 [lex.phases] 2.2 p2
|
||||
Diag(BufferEnd, LangOpts.CPlusPlus11 ? // C++11 [lex.phases] 2.2 p2
|
||||
diag::warn_cxx98_compat_no_newline_eof : diag::ext_no_newline_eof)
|
||||
<< FixItHint::CreateInsertion(getSourceLocation(BufferEnd), "\n");
|
||||
|
||||
|
@ -2731,7 +2731,7 @@ LexNextToken:
|
|||
// Notify MIOpt that we read a non-whitespace/non-comment token.
|
||||
MIOpt.ReadToken();
|
||||
|
||||
if (LangOpts.CPlusPlus0x) {
|
||||
if (LangOpts.CPlusPlus11) {
|
||||
Char = getCharAndSize(CurPtr, SizeTmp);
|
||||
|
||||
// UTF-16 string literal
|
||||
|
@ -2783,7 +2783,7 @@ LexNextToken:
|
|||
// Notify MIOpt that we read a non-whitespace/non-comment token.
|
||||
MIOpt.ReadToken();
|
||||
|
||||
if (LangOpts.CPlusPlus0x) {
|
||||
if (LangOpts.CPlusPlus11) {
|
||||
Char = getCharAndSize(CurPtr, SizeTmp);
|
||||
|
||||
// UTF-32 string literal
|
||||
|
@ -2811,7 +2811,7 @@ LexNextToken:
|
|||
// Notify MIOpt that we read a non-whitespace/non-comment token.
|
||||
MIOpt.ReadToken();
|
||||
|
||||
if (LangOpts.CPlusPlus0x) {
|
||||
if (LangOpts.CPlusPlus11) {
|
||||
Char = getCharAndSize(CurPtr, SizeTmp);
|
||||
|
||||
if (Char == '"')
|
||||
|
@ -2834,7 +2834,7 @@ LexNextToken:
|
|||
tok::wide_string_literal);
|
||||
|
||||
// Wide raw string literal.
|
||||
if (LangOpts.CPlusPlus0x && Char == 'R' &&
|
||||
if (LangOpts.CPlusPlus11 && Char == 'R' &&
|
||||
getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == '"')
|
||||
return LexRawStringLiteral(Result,
|
||||
ConsumeChar(ConsumeChar(CurPtr, SizeTmp, Result),
|
||||
|
@ -3091,7 +3091,7 @@ LexNextToken:
|
|||
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);
|
||||
Kind = tok::lessequal;
|
||||
} else if (LangOpts.Digraphs && Char == ':') { // '<:' -> '['
|
||||
if (LangOpts.CPlusPlus0x &&
|
||||
if (LangOpts.CPlusPlus11 &&
|
||||
getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == ':') {
|
||||
// C++0x [lex.pptoken]p3:
|
||||
// Otherwise, if the next three characters are <:: and the subsequent
|
||||
|
|
|
@ -267,7 +267,7 @@ static bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf,
|
|||
// characters inside character and string literals
|
||||
if (UcnVal < 0xa0 &&
|
||||
(UcnVal != 0x24 && UcnVal != 0x40 && UcnVal != 0x60)) { // $, @, `
|
||||
bool IsError = (!Features.CPlusPlus0x || !in_char_string_literal);
|
||||
bool IsError = (!Features.CPlusPlus11 || !in_char_string_literal);
|
||||
if (Diags) {
|
||||
char BasicSCSChar = UcnVal;
|
||||
if (UcnVal >= 0x20 && UcnVal < 0x7f)
|
||||
|
@ -616,7 +616,7 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling,
|
|||
}
|
||||
|
||||
if (s != ThisTokEnd) {
|
||||
if (PP.getLangOpts().CPlusPlus0x && s == SuffixBegin && *s == '_') {
|
||||
if (PP.getLangOpts().CPlusPlus11 && s == SuffixBegin && *s == '_') {
|
||||
// We have a ud-suffix! By C++11 [lex.ext]p10, ud-suffixes not starting
|
||||
// with an '_' are ill-formed.
|
||||
saw_ud_suffix = true;
|
||||
|
|
|
@ -834,11 +834,11 @@ void Preprocessor::HandleLineDirective(Token &Tok) {
|
|||
// Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a
|
||||
// number greater than 2147483647". C90 requires that the line # be <= 32767.
|
||||
unsigned LineLimit = 32768U;
|
||||
if (LangOpts.C99 || LangOpts.CPlusPlus0x)
|
||||
if (LangOpts.C99 || LangOpts.CPlusPlus11)
|
||||
LineLimit = 2147483648U;
|
||||
if (LineNo >= LineLimit)
|
||||
Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;
|
||||
else if (LangOpts.CPlusPlus0x && LineNo >= 32768U)
|
||||
else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)
|
||||
Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);
|
||||
|
||||
int FilenameID = -1;
|
||||
|
@ -1644,7 +1644,7 @@ bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI, Token &Tok) {
|
|||
return true;
|
||||
case tok::ellipsis: // #define X(... -> C99 varargs
|
||||
if (!LangOpts.C99)
|
||||
Diag(Tok, LangOpts.CPlusPlus0x ?
|
||||
Diag(Tok, LangOpts.CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_variadic_macro :
|
||||
diag::ext_variadic_macro);
|
||||
|
||||
|
@ -1770,7 +1770,7 @@ void Preprocessor::HandleDefineDirective(Token &DefineTok) {
|
|||
|
||||
// Read the first token after the arg list for down below.
|
||||
LexUnexpandedToken(Tok);
|
||||
} else if (LangOpts.C99 || LangOpts.CPlusPlus0x) {
|
||||
} else if (LangOpts.C99 || LangOpts.CPlusPlus11) {
|
||||
// C99 requires whitespace between the macro definition and the body. Emit
|
||||
// a diagnostic for something like "#define X+".
|
||||
Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
|
||||
|
|
|
@ -230,7 +230,7 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT,
|
|||
if (!PP.getLangOpts().C99 && Literal.isLongLong) {
|
||||
if (PP.getLangOpts().CPlusPlus)
|
||||
PP.Diag(PeekTok,
|
||||
PP.getLangOpts().CPlusPlus0x ?
|
||||
PP.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);
|
||||
else
|
||||
PP.Diag(PeekTok, diag::ext_c99_longlong);
|
||||
|
|
|
@ -600,7 +600,7 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
|||
// Empty arguments are standard in C99 and C++0x, and are supported as an extension in
|
||||
// other modes.
|
||||
if (ArgTokens.size() == ArgTokenStart && !LangOpts.C99)
|
||||
Diag(Tok, LangOpts.CPlusPlus0x ?
|
||||
Diag(Tok, LangOpts.CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_empty_fnmacro_arg :
|
||||
diag::ext_empty_fnmacro_arg);
|
||||
|
||||
|
@ -834,41 +834,41 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
|
|||
.Case("c_generic_selections", LangOpts.C11)
|
||||
.Case("c_static_assert", LangOpts.C11)
|
||||
// C++11 features
|
||||
.Case("cxx_access_control_sfinae", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_alias_templates", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_alignas", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_atomic", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_attributes", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_auto_type", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_constexpr", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_decltype", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_decltype_incomplete_return_types", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_default_function_template_args", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_defaulted_functions", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_delegating_constructors", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_deleted_functions", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_explicit_conversions", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_generalized_initializers", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_implicit_moves", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_access_control_sfinae", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_alias_templates", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_alignas", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_atomic", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_attributes", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_auto_type", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_constexpr", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_decltype", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_decltype_incomplete_return_types", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_default_function_template_args", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_defaulted_functions", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_delegating_constructors", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_deleted_functions", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_explicit_conversions", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_generalized_initializers", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_implicit_moves", LangOpts.CPlusPlus11)
|
||||
//.Case("cxx_inheriting_constructors", false)
|
||||
.Case("cxx_inline_namespaces", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_lambdas", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_local_type_template_args", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_nonstatic_member_init", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_noexcept", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_nullptr", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_override_control", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_range_for", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_raw_string_literals", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_reference_qualified_functions", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_rvalue_references", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_strong_enums", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_static_assert", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_trailing_return", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_unicode_literals", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_unrestricted_unions", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_user_literals", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_variadic_templates", LangOpts.CPlusPlus0x)
|
||||
.Case("cxx_inline_namespaces", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_lambdas", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_local_type_template_args", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_nonstatic_member_init", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_noexcept", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_nullptr", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_override_control", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_range_for", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_raw_string_literals", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_reference_qualified_functions", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_rvalue_references", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_strong_enums", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_static_assert", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_trailing_return", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_unicode_literals", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_unrestricted_unions", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_user_literals", LangOpts.CPlusPlus11)
|
||||
.Case("cxx_variadic_templates", LangOpts.CPlusPlus11)
|
||||
// Type traits
|
||||
.Case("has_nothrow_assign", LangOpts.CPlusPlus)
|
||||
.Case("has_nothrow_copy", LangOpts.CPlusPlus)
|
||||
|
|
|
@ -20,17 +20,17 @@ using namespace clang;
|
|||
|
||||
/// IsStringPrefix - Return true if Str is a string prefix.
|
||||
/// 'L', 'u', 'U', or 'u8'. Including raw versions.
|
||||
static bool IsStringPrefix(StringRef Str, bool CPlusPlus0x) {
|
||||
static bool IsStringPrefix(StringRef Str, bool CPlusPlus11) {
|
||||
|
||||
if (Str[0] == 'L' ||
|
||||
(CPlusPlus0x && (Str[0] == 'u' || Str[0] == 'U' || Str[0] == 'R'))) {
|
||||
(CPlusPlus11 && (Str[0] == 'u' || Str[0] == 'U' || Str[0] == 'R'))) {
|
||||
|
||||
if (Str.size() == 1)
|
||||
return true; // "L", "u", "U", and "R"
|
||||
|
||||
// Check for raw flavors. Need to make sure the first character wasn't
|
||||
// already R. Need CPlusPlus0x check for "LR".
|
||||
if (Str[1] == 'R' && Str[0] != 'R' && Str.size() == 2 && CPlusPlus0x)
|
||||
// already R. Need CPlusPlus11 check for "LR".
|
||||
if (Str[1] == 'R' && Str[0] != 'R' && Str.size() == 2 && CPlusPlus11)
|
||||
return true; // "LR", "uR", "UR"
|
||||
|
||||
// Check for "u8" and "u8R"
|
||||
|
@ -54,17 +54,17 @@ bool TokenConcatenation::IsIdentifierStringPrefix(const Token &Tok) const {
|
|||
SourceManager &SM = PP.getSourceManager();
|
||||
const char *Ptr = SM.getCharacterData(SM.getSpellingLoc(Tok.getLocation()));
|
||||
return IsStringPrefix(StringRef(Ptr, Tok.getLength()),
|
||||
LangOpts.CPlusPlus0x);
|
||||
LangOpts.CPlusPlus11);
|
||||
}
|
||||
|
||||
if (Tok.getLength() < 256) {
|
||||
char Buffer[256];
|
||||
const char *TokPtr = Buffer;
|
||||
unsigned length = PP.getSpelling(Tok, TokPtr);
|
||||
return IsStringPrefix(StringRef(TokPtr, length), LangOpts.CPlusPlus0x);
|
||||
return IsStringPrefix(StringRef(TokPtr, length), LangOpts.CPlusPlus11);
|
||||
}
|
||||
|
||||
return IsStringPrefix(StringRef(PP.getSpelling(Tok)), LangOpts.CPlusPlus0x);
|
||||
return IsStringPrefix(StringRef(PP.getSpelling(Tok)), LangOpts.CPlusPlus11);
|
||||
}
|
||||
|
||||
TokenConcatenation::TokenConcatenation(Preprocessor &pp) : PP(pp) {
|
||||
|
@ -87,7 +87,7 @@ TokenConcatenation::TokenConcatenation(Preprocessor &pp) : PP(pp) {
|
|||
TokenInfo[tok::arrow ] |= aci_custom_firstchar;
|
||||
|
||||
// These tokens have custom code in C++11 mode.
|
||||
if (PP.getLangOpts().CPlusPlus0x) {
|
||||
if (PP.getLangOpts().CPlusPlus11) {
|
||||
TokenInfo[tok::string_literal ] |= aci_custom;
|
||||
TokenInfo[tok::wide_string_literal ] |= aci_custom;
|
||||
TokenInfo[tok::utf8_string_literal ] |= aci_custom;
|
||||
|
@ -206,7 +206,7 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevPrevTok,
|
|||
case tok::wide_char_constant:
|
||||
case tok::utf16_char_constant:
|
||||
case tok::utf32_char_constant:
|
||||
if (!PP.getLangOpts().CPlusPlus0x)
|
||||
if (!PP.getLangOpts().CPlusPlus11)
|
||||
return false;
|
||||
|
||||
// In C++11, a string or character literal followed by an identifier is a
|
||||
|
@ -241,7 +241,7 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevPrevTok,
|
|||
case tok::numeric_constant:
|
||||
return isalnum(FirstChar) || Tok.is(tok::numeric_constant) ||
|
||||
FirstChar == '+' || FirstChar == '-' || FirstChar == '.' ||
|
||||
(PP.getLangOpts().CPlusPlus0x && FirstChar == '_');
|
||||
(PP.getLangOpts().CPlusPlus11 && FirstChar == '_');
|
||||
case tok::period: // ..., .*, .1234
|
||||
return (FirstChar == '.' && PrevPrevTok.is(tok::period)) ||
|
||||
isdigit(FirstChar) ||
|
||||
|
|
|
@ -75,7 +75,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
|
|||
bool Delete = false;
|
||||
SourceLocation KWLoc;
|
||||
if (Tok.is(tok::kw_delete)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_deleted_function :
|
||||
diag::ext_deleted_function);
|
||||
|
||||
|
@ -83,7 +83,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
|
|||
Actions.SetDeclDeleted(FnD, KWLoc);
|
||||
Delete = true;
|
||||
} else if (Tok.is(tok::kw_default)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_defaulted_function :
|
||||
diag::ext_defaulted_function);
|
||||
|
||||
|
@ -322,7 +322,7 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {
|
|||
LM.DefaultArgs[I].Param);
|
||||
|
||||
ExprResult DefArgResult;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
DefArgResult = ParseBraceInitializer();
|
||||
} else
|
||||
|
@ -651,7 +651,7 @@ bool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {
|
|||
ConsumeBrace();
|
||||
// In C++03, this has to be the start of the function body, which
|
||||
// means the initializer is malformed; we'll diagnose it later.
|
||||
if (!getLangOpts().CPlusPlus0x)
|
||||
if (!getLangOpts().CPlusPlus11)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1284,7 +1284,7 @@ bool Parser::MightBeDeclarator(unsigned Context) {
|
|||
return getLangOpts().CPlusPlus;
|
||||
|
||||
case tok::l_square: // Might be an attribute on an unnamed bit-field.
|
||||
return Context == Declarator::MemberContext && getLangOpts().CPlusPlus0x &&
|
||||
return Context == Declarator::MemberContext && getLangOpts().CPlusPlus11 &&
|
||||
NextToken().is(tok::l_square);
|
||||
|
||||
case tok::colon: // Might be a typo for '::' or an unnamed bit-field.
|
||||
|
@ -1318,7 +1318,7 @@ bool Parser::MightBeDeclarator(unsigned Context) {
|
|||
(getLangOpts().CPlusPlus && Context == Declarator::FileContext);
|
||||
|
||||
case tok::identifier: // Possible virt-specifier.
|
||||
return getLangOpts().CPlusPlus0x && isCXX0XVirtSpecifier(NextToken());
|
||||
return getLangOpts().CPlusPlus11 && isCXX0XVirtSpecifier(NextToken());
|
||||
|
||||
default:
|
||||
return false;
|
||||
|
@ -1721,7 +1721,7 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D,
|
|||
Actions.AddInitializerToDecl(ThisDecl, Initializer.take(),
|
||||
/*DirectInit=*/true, TypeContainsAuto);
|
||||
}
|
||||
} else if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace) &&
|
||||
} else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace) &&
|
||||
(!CurParsedObjCImpl || !D.isFunctionDeclarator())) {
|
||||
// Parse C++0x braced-init-list.
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
|
@ -2058,7 +2058,7 @@ ExprResult Parser::ParseAlignArgument(SourceLocation Start,
|
|||
} else
|
||||
ER = ParseConstantExpression();
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::ellipsis))
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::ellipsis))
|
||||
EllipsisLoc = ConsumeToken();
|
||||
|
||||
return ER;
|
||||
|
@ -2581,7 +2581,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
|||
PrevSpec, DiagID);
|
||||
break;
|
||||
case tok::kw_auto:
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
if (isKnownToBeTypeSpecifier(GetLookAheadToken(1))) {
|
||||
isInvalid = DS.SetStorageClassSpec(Actions, DeclSpec::SCS_auto, Loc,
|
||||
PrevSpec, DiagID);
|
||||
|
@ -3155,7 +3155,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
|||
bool IsScopedUsingClassTag = false;
|
||||
|
||||
// In C++11, recognize 'enum class' and 'enum struct'.
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
(Tok.is(tok::kw_class) || Tok.is(tok::kw_struct))) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_scoped_enum);
|
||||
IsScopedUsingClassTag = Tok.is(tok::kw_class);
|
||||
|
@ -3187,7 +3187,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
|||
bool AllowDeclaration = DSC != DSC_trailing;
|
||||
|
||||
bool AllowFixedUnderlyingType = AllowDeclaration &&
|
||||
(getLangOpts().CPlusPlus0x || getLangOpts().MicrosoftExt ||
|
||||
(getLangOpts().CPlusPlus11 || getLangOpts().MicrosoftExt ||
|
||||
getLangOpts().ObjC2);
|
||||
|
||||
CXXScopeSpec &SS = DS.getTypeSpecScope();
|
||||
|
@ -3306,7 +3306,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
|||
SourceRange Range;
|
||||
BaseType = ParseTypeName(&Range);
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
Diag(StartLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type);
|
||||
} else if (!getLangOpts().ObjC2) {
|
||||
if (getLangOpts().CPlusPlus)
|
||||
|
@ -3365,7 +3365,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
|||
MultiTemplateParamsArg TParams;
|
||||
if (TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate &&
|
||||
TUK != Sema::TUK_Reference) {
|
||||
if (!getLangOpts().CPlusPlus0x || !SS.isSet()) {
|
||||
if (!getLangOpts().CPlusPlus11 || !SS.isSet()) {
|
||||
// Skip the rest of this declarator, up until the comma or semicolon.
|
||||
Diag(Tok, diag::err_enum_template);
|
||||
SkipUntil(tok::comma, true);
|
||||
|
@ -3523,12 +3523,12 @@ void Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {
|
|||
SourceLocation CommaLoc = ConsumeToken();
|
||||
|
||||
if (Tok.isNot(tok::identifier)) {
|
||||
if (!getLangOpts().C99 && !getLangOpts().CPlusPlus0x)
|
||||
if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)
|
||||
Diag(CommaLoc, getLangOpts().CPlusPlus ?
|
||||
diag::ext_enumerator_list_comma_cxx :
|
||||
diag::ext_enumerator_list_comma_c)
|
||||
<< FixItHint::CreateRemoval(CommaLoc);
|
||||
else if (getLangOpts().CPlusPlus0x)
|
||||
else if (getLangOpts().CPlusPlus11)
|
||||
Diag(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma)
|
||||
<< FixItHint::CreateRemoval(CommaLoc);
|
||||
}
|
||||
|
@ -4034,7 +4034,7 @@ bool Parser::isConstructorDeclarator() {
|
|||
void Parser::ParseTypeQualifierListOpt(DeclSpec &DS,
|
||||
bool VendorAttributesAllowed,
|
||||
bool CXX11AttributesAllowed) {
|
||||
if (getLangOpts().CPlusPlus0x && CXX11AttributesAllowed &&
|
||||
if (getLangOpts().CPlusPlus11 && CXX11AttributesAllowed &&
|
||||
isCXX11AttributeSpecifier()) {
|
||||
ParsedAttributesWithRange attrs(AttrFactory);
|
||||
ParseCXX11Attributes(attrs);
|
||||
|
@ -4258,7 +4258,7 @@ void Parser::ParseDeclaratorInternal(Declarator &D,
|
|||
// Complain about rvalue references in C++03, but then go on and build
|
||||
// the declarator.
|
||||
if (Kind == tok::ampamp)
|
||||
Diag(Loc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Loc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_rvalue_reference :
|
||||
diag::ext_rvalue_reference);
|
||||
|
||||
|
@ -4734,7 +4734,7 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
|
|||
|
||||
// Parse ref-qualifier[opt].
|
||||
if (Tok.is(tok::amp) || Tok.is(tok::ampamp)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_ref_qualifier :
|
||||
diag::ext_ref_qualifier);
|
||||
|
||||
|
@ -4750,7 +4750,7 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
|
|||
// and the end of the function-definition, member-declarator, or
|
||||
// declarator.
|
||||
bool IsCXX11MemberFunction =
|
||||
getLangOpts().CPlusPlus0x &&
|
||||
getLangOpts().CPlusPlus11 &&
|
||||
(D.getContext() == Declarator::MemberContext ||
|
||||
(D.getContext() == Declarator::FileContext &&
|
||||
D.getCXXScopeSpec().isValid() &&
|
||||
|
@ -4774,7 +4774,7 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
|
|||
|
||||
// Parse trailing-return-type[opt].
|
||||
LocalEndLoc = EndLoc;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::arrow)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_trailing_return_type);
|
||||
if (D.getDeclSpec().getTypeSpecType() == TST_auto)
|
||||
StartLoc = D.getDeclSpec().getTypeSpecTypeLoc();
|
||||
|
@ -5033,7 +5033,7 @@ void Parser::ParseParameterDeclarationClause(
|
|||
Param);
|
||||
|
||||
ExprResult DefArgResult;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
DefArgResult = ParseBraceInitializer();
|
||||
} else
|
||||
|
|
|
@ -157,7 +157,7 @@ Decl *Parser::ParseNamespace(unsigned Context,
|
|||
|
||||
// If we're still good, complain about inline namespaces in non-C++0x now.
|
||||
if (InlineLoc.isValid())
|
||||
Diag(InlineLoc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(InlineLoc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace);
|
||||
|
||||
// Enter a scope for the namespace.
|
||||
|
@ -504,7 +504,7 @@ Decl *Parser::ParseUsingDeclaration(unsigned Context,
|
|||
// Where can GNU attributes appear?
|
||||
ConsumeToken();
|
||||
|
||||
Diag(Tok.getLocation(), getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_alias_declaration :
|
||||
diag::ext_alias_declaration);
|
||||
|
||||
|
@ -1761,7 +1761,7 @@ void Parser::ParseOptionalCXX0XVirtSpecifierSeq(VirtSpecifiers &VS,
|
|||
Diag(Tok.getLocation(), diag::err_override_control_interface)
|
||||
<< VirtSpecifiers::getSpecifierName(Specifier);
|
||||
} else {
|
||||
Diag(Tok.getLocation(), getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_override_control_keyword :
|
||||
diag::ext_override_control_keyword)
|
||||
<< VirtSpecifiers::getSpecifierName(Specifier);
|
||||
|
@ -2020,7 +2020,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
// In C++11, a non-function declarator followed by an open brace is a
|
||||
// braced-init-list for an in-class member initialization, not an
|
||||
// erroneous function definition.
|
||||
if (Tok.is(tok::l_brace) && !getLangOpts().CPlusPlus0x) {
|
||||
if (Tok.is(tok::l_brace) && !getLangOpts().CPlusPlus11) {
|
||||
DefinitionKind = FDK_Definition;
|
||||
} else if (DeclaratorInfo.isFunctionDeclarator()) {
|
||||
if (Tok.is(tok::l_brace) || Tok.is(tok::colon) || Tok.is(tok::kw_try)) {
|
||||
|
@ -2184,7 +2184,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
// Handle the initializer.
|
||||
if (HasInClassInit != ICIS_NoInit) {
|
||||
// The initializer was deferred; parse it and cache the tokens.
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_nonstatic_member_init :
|
||||
diag::ext_nonstatic_member_init);
|
||||
|
||||
|
@ -2409,7 +2409,7 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
|
|||
Diag(FinalLoc, diag::err_override_control_interface)
|
||||
<< "final";
|
||||
} else {
|
||||
Diag(FinalLoc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(FinalLoc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_override_control_keyword :
|
||||
diag::ext_override_control_keyword) << "final";
|
||||
}
|
||||
|
@ -2693,7 +2693,7 @@ Parser::MemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {
|
|||
|
||||
|
||||
// Parse the '('.
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
|
||||
ExprResult InitList = ParseBraceInitializer();
|
||||
|
@ -2732,7 +2732,7 @@ Parser::MemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {
|
|||
EllipsisLoc);
|
||||
}
|
||||
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ? diag::err_expected_lparen_or_lbrace
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ? diag::err_expected_lparen_or_lbrace
|
||||
: diag::err_expected_lparen);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -221,7 +221,7 @@ ExprResult
|
|||
Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
|
||||
prec::Level NextTokPrec = getBinOpPrecedence(Tok.getKind(),
|
||||
GreaterThanIsOperator,
|
||||
getLangOpts().CPlusPlus0x);
|
||||
getLangOpts().CPlusPlus11);
|
||||
SourceLocation ColonLoc;
|
||||
|
||||
while (1) {
|
||||
|
@ -322,7 +322,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
|
|||
// they only appear on the RHS of assignments later.
|
||||
ExprResult RHS;
|
||||
bool RHSIsInitList = false;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
RHS = ParseBraceInitializer();
|
||||
RHSIsInitList = true;
|
||||
} else if (getLangOpts().CPlusPlus && NextTokPrec <= prec::Conditional)
|
||||
|
@ -337,7 +337,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
|
|||
// operator immediately to the right of the RHS.
|
||||
prec::Level ThisPrec = NextTokPrec;
|
||||
NextTokPrec = getBinOpPrecedence(Tok.getKind(), GreaterThanIsOperator,
|
||||
getLangOpts().CPlusPlus0x);
|
||||
getLangOpts().CPlusPlus11);
|
||||
|
||||
// Assignment and conditional expressions are right-associative.
|
||||
bool isRightAssoc = ThisPrec == prec::Conditional ||
|
||||
|
@ -365,7 +365,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
|
|||
LHS = ExprError();
|
||||
|
||||
NextTokPrec = getBinOpPrecedence(Tok.getKind(), GreaterThanIsOperator,
|
||||
getLangOpts().CPlusPlus0x);
|
||||
getLangOpts().CPlusPlus11);
|
||||
}
|
||||
assert(NextTokPrec <= ThisPrec && "Recursion didn't work!");
|
||||
|
||||
|
@ -1042,7 +1042,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
DeclSpec DS(AttrFactory);
|
||||
ParseCXXSimpleTypeSpecifier(DS);
|
||||
if (Tok.isNot(tok::l_paren) &&
|
||||
(!getLangOpts().CPlusPlus0x || Tok.isNot(tok::l_brace)))
|
||||
(!getLangOpts().CPlusPlus11 || Tok.isNot(tok::l_brace)))
|
||||
return ExprError(Diag(Tok, diag::err_expected_lparen_after_type)
|
||||
<< DS.getSourceRange());
|
||||
|
||||
|
@ -1227,7 +1227,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
return ExprError();
|
||||
}
|
||||
case tok::l_square:
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
if (getLangOpts().ObjC1) {
|
||||
// C++11 lambda expressions and Objective-C message sends both start with a
|
||||
// square bracket. There are three possibilities here:
|
||||
|
@ -1326,7 +1326,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
|
|||
T.consumeOpen();
|
||||
Loc = T.getOpenLocation();
|
||||
ExprResult Idx;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
Idx = ParseBraceInitializer();
|
||||
} else
|
||||
|
@ -2321,7 +2321,7 @@ bool Parser::ParseExpressionList(SmallVectorImpl<Expr*> &Exprs,
|
|||
}
|
||||
|
||||
ExprResult Expr;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
Expr = ParseBraceInitializer();
|
||||
} else
|
||||
|
|
|
@ -620,7 +620,7 @@ ExprResult Parser::ParseLambdaExpression() {
|
|||
///
|
||||
/// If we are not looking at a lambda expression, returns ExprError().
|
||||
ExprResult Parser::TryParseLambdaExpression() {
|
||||
assert(getLangOpts().CPlusPlus0x
|
||||
assert(getLangOpts().CPlusPlus11
|
||||
&& Tok.is(tok::l_square)
|
||||
&& "Not at the start of a possible lambda expression.");
|
||||
|
||||
|
@ -1288,7 +1288,7 @@ Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) {
|
|||
ParsedType TypeRep = Actions.ActOnTypeName(getCurScope(), DeclaratorInfo).get();
|
||||
|
||||
assert((Tok.is(tok::l_paren) ||
|
||||
(getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)))
|
||||
(getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)))
|
||||
&& "Expected '(' or '{'!");
|
||||
|
||||
if (Tok.is(tok::l_brace)) {
|
||||
|
@ -1416,7 +1416,7 @@ bool Parser::ParseCXXCondition(ExprResult &ExprOut,
|
|||
ConsumeToken();
|
||||
|
||||
ExprResult InitExpr = ExprError();
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace)) {
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
InitExpr = ParseBraceInitializer();
|
||||
|
@ -1851,7 +1851,7 @@ bool Parser::ParseUnqualifiedIdOperator(CXXScopeSpec &SS, bool EnteringContext,
|
|||
SymbolLocations[SymbolIdx++] = ConsumeToken();
|
||||
// Check for array new/delete.
|
||||
if (Tok.is(tok::l_square) &&
|
||||
(!getLangOpts().CPlusPlus0x || NextToken().isNot(tok::l_square))) {
|
||||
(!getLangOpts().CPlusPlus11 || NextToken().isNot(tok::l_square))) {
|
||||
// Consume the '[' and ']'.
|
||||
BalancedDelimiterTracker T(*this, tok::l_square);
|
||||
T.consumeOpen();
|
||||
|
@ -1928,7 +1928,7 @@ bool Parser::ParseUnqualifiedIdOperator(CXXScopeSpec &SS, bool EnteringContext,
|
|||
// operator string-literal identifier
|
||||
// operator user-defined-string-literal
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && isTokenStringLiteral()) {
|
||||
if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {
|
||||
Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);
|
||||
|
||||
SourceLocation DiagLoc;
|
||||
|
@ -2361,7 +2361,7 @@ Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) {
|
|||
Initializer = Actions.ActOnParenListExpr(ConstructorLParen,
|
||||
ConstructorRParen,
|
||||
ConstructorArgs);
|
||||
} else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus0x) {
|
||||
} else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) {
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_cxx98_compat_generalized_initializer_lists);
|
||||
Initializer = ParseBraceInitializer();
|
||||
|
|
|
@ -33,7 +33,7 @@ bool Parser::MayBeDesignationStart() {
|
|||
return true;
|
||||
|
||||
case tok::l_square: { // designator: array-designator
|
||||
if (!PP.getLangOpts().CPlusPlus0x)
|
||||
if (!PP.getLangOpts().CPlusPlus11)
|
||||
return true;
|
||||
|
||||
// C++11 lambda expressions and C99 designators can be ambiguous all the
|
||||
|
|
|
@ -1406,7 +1406,7 @@ StmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {
|
|||
FirstPart = Actions.ActOnDeclStmt(DG, DeclStart, Tok.getLocation());
|
||||
|
||||
if (ForRangeInit.ParsedForRangeDecl()) {
|
||||
Diag(ForRangeInit.ColonLoc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(ForRangeInit.ColonLoc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_for_range : diag::ext_for_range);
|
||||
|
||||
ForRange = true;
|
||||
|
@ -1451,7 +1451,7 @@ StmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {
|
|||
return StmtError();
|
||||
}
|
||||
Collection = ParseExpression();
|
||||
} else if (getLangOpts().CPlusPlus0x && Tok.is(tok::colon) && FirstPart.get()) {
|
||||
} else if (getLangOpts().CPlusPlus11 && Tok.is(tok::colon) && FirstPart.get()) {
|
||||
// User tried to write the reasonable, but ill-formed, for-range-statement
|
||||
// for (expr : expr) { ... }
|
||||
Diag(Tok, diag::err_for_range_expected_decl)
|
||||
|
@ -1647,7 +1647,7 @@ StmtResult Parser::ParseReturnStatement() {
|
|||
if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {
|
||||
R = ParseInitializer();
|
||||
if (R.isUsable())
|
||||
Diag(R.get()->getLocStart(), getLangOpts().CPlusPlus0x ?
|
||||
Diag(R.get()->getLocStart(), getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_generalized_initializer_lists :
|
||||
diag::ext_generalized_initializer_lists)
|
||||
<< R.get()->getSourceRange();
|
||||
|
|
|
@ -481,7 +481,7 @@ Decl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
|||
EllipsisLoc = ConsumeToken();
|
||||
|
||||
Diag(EllipsisLoc,
|
||||
getLangOpts().CPlusPlus0x
|
||||
getLangOpts().CPlusPlus11
|
||||
? diag::warn_cxx98_compat_variadic_templates
|
||||
: diag::ext_variadic_templates);
|
||||
}
|
||||
|
@ -568,7 +568,7 @@ Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
EllipsisLoc = ConsumeToken();
|
||||
|
||||
Diag(EllipsisLoc,
|
||||
getLangOpts().CPlusPlus0x
|
||||
getLangOpts().CPlusPlus11
|
||||
? diag::warn_cxx98_compat_variadic_templates
|
||||
: diag::ext_variadic_templates);
|
||||
}
|
||||
|
@ -743,7 +743,7 @@ bool Parser::ParseGreaterThanInTemplateList(SourceLocation &RAngleLoc,
|
|||
Hint2 = FixItHint::CreateInsertion(Next.getLocation(), " ");
|
||||
|
||||
unsigned DiagId = diag::err_two_right_angle_brackets_need_space;
|
||||
if (getLangOpts().CPlusPlus0x && Tok.is(tok::greatergreater))
|
||||
if (getLangOpts().CPlusPlus11 && Tok.is(tok::greatergreater))
|
||||
DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;
|
||||
else if (Tok.is(tok::greaterequal))
|
||||
DiagId = diag::err_right_angle_bracket_equal_needs_space;
|
||||
|
|
|
@ -295,7 +295,7 @@ bool Parser::isCXXConditionDeclaration() {
|
|||
if (Tok.is(tok::equal) ||
|
||||
Tok.is(tok::kw_asm) || Tok.is(tok::kw___attribute))
|
||||
TPR = TPResult::True();
|
||||
else if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace))
|
||||
else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace))
|
||||
TPR = TPResult::True();
|
||||
else
|
||||
TPR = TPResult::False();
|
||||
|
@ -379,7 +379,7 @@ bool Parser::isCXXTypeId(TentativeCXXTypeIdContext Context, bool &isAmbiguous) {
|
|||
// ',', this is a type-id. Otherwise, it's an expression.
|
||||
} else if (Context == TypeIdAsTemplateArgument &&
|
||||
(Tok.is(tok::greater) || Tok.is(tok::comma) ||
|
||||
(getLangOpts().CPlusPlus0x && Tok.is(tok::greatergreater)))) {
|
||||
(getLangOpts().CPlusPlus11 && Tok.is(tok::greatergreater)))) {
|
||||
TPR = TPResult::True();
|
||||
isAmbiguous = true;
|
||||
|
||||
|
@ -1222,7 +1222,7 @@ Parser::isCXXDeclarationSpecifier(Parser::TPResult BracedCastResult,
|
|||
if (isFollowedByParen)
|
||||
return TPResult::Ambiguous();
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && isFollowedByBrace)
|
||||
if (getLangOpts().CPlusPlus11 && isFollowedByBrace)
|
||||
return BracedCastResult;
|
||||
|
||||
return TPResult::True();
|
||||
|
@ -1254,7 +1254,7 @@ Parser::isCXXDeclarationSpecifier(Parser::TPResult BracedCastResult,
|
|||
// enum E : int { a = 4 }; // enum
|
||||
// enum E : int { 4 }; // bit-field
|
||||
// };
|
||||
if (getLangOpts().CPlusPlus0x && NextToken().is(tok::l_brace))
|
||||
if (getLangOpts().CPlusPlus11 && NextToken().is(tok::l_brace))
|
||||
return BracedCastResult;
|
||||
|
||||
if (isStartOfObjCClassMessageMissingOpenBracket())
|
||||
|
@ -1281,7 +1281,7 @@ Parser::isCXXDeclarationSpecifier(Parser::TPResult BracedCastResult,
|
|||
if (isFollowedByParen)
|
||||
return TPResult::Ambiguous();
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && isFollowedByBrace)
|
||||
if (getLangOpts().CPlusPlus11 && isFollowedByBrace)
|
||||
return BracedCastResult;
|
||||
|
||||
return TPResult::True();
|
||||
|
|
|
@ -218,7 +218,7 @@ void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, unsigned TST) {
|
|||
// C++11 allows extra semicolons at namespace scope, but not in any of the
|
||||
// other contexts.
|
||||
if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {
|
||||
if (getLangOpts().CPlusPlus0x)
|
||||
if (getLangOpts().CPlusPlus11)
|
||||
Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi)
|
||||
<< FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
|
||||
else
|
||||
|
@ -741,7 +741,7 @@ Parser::ParseExternalDeclaration(ParsedAttributesWithRange &attrs,
|
|||
// Extern templates
|
||||
SourceLocation ExternLoc = ConsumeToken();
|
||||
SourceLocation TemplateLoc = ConsumeToken();
|
||||
Diag(ExternLoc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(ExternLoc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_extern_template :
|
||||
diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);
|
||||
SourceLocation DeclEnd;
|
||||
|
@ -1049,7 +1049,7 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
|
|||
bool Delete = false;
|
||||
SourceLocation KWLoc;
|
||||
if (Tok.is(tok::kw_delete)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_deleted_function :
|
||||
diag::ext_deleted_function);
|
||||
|
||||
|
@ -1057,7 +1057,7 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
|
|||
Actions.SetDeclDeleted(Res, KWLoc);
|
||||
Delete = true;
|
||||
} else if (Tok.is(tok::kw_default)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus0x ?
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_defaulted_function :
|
||||
diag::ext_defaulted_function);
|
||||
|
||||
|
|
|
@ -827,7 +827,7 @@ static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC,
|
|||
//
|
||||
// NOTE: This an intermediate solution. There are on-going discussions on
|
||||
// how to properly support this warning outside of C++11 with an annotation.
|
||||
if (!AC.getASTContext().getLangOpts().CPlusPlus0x)
|
||||
if (!AC.getASTContext().getLangOpts().CPlusPlus11)
|
||||
return;
|
||||
|
||||
FallthroughMapper FM(S);
|
||||
|
@ -864,7 +864,7 @@ static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC,
|
|||
SourceLocation L = Label->getLocStart();
|
||||
if (L.isMacroID())
|
||||
continue;
|
||||
if (S.getLangOpts().CPlusPlus0x) {
|
||||
if (S.getLangOpts().CPlusPlus11) {
|
||||
const Stmt *Term = B.getTerminator();
|
||||
if (!(B.empty() && Term && isa<BreakStmt>(Term))) {
|
||||
Preprocessor &PP = S.getPreprocessor();
|
||||
|
|
|
@ -928,9 +928,9 @@ void DeclSpec::Finish(DiagnosticsEngine &D, Preprocessor &PP) {
|
|||
}
|
||||
// Diagnose if we've recovered from an ill-formed 'auto' storage class
|
||||
// specifier in a pre-C++0x dialect of C++.
|
||||
if (!PP.getLangOpts().CPlusPlus0x && TypeSpecType == TST_auto)
|
||||
if (!PP.getLangOpts().CPlusPlus11 && TypeSpecType == TST_auto)
|
||||
Diag(D, TSTLoc, diag::ext_auto_type_specifier);
|
||||
if (PP.getLangOpts().CPlusPlus && !PP.getLangOpts().CPlusPlus0x &&
|
||||
if (PP.getLangOpts().CPlusPlus && !PP.getLangOpts().CPlusPlus11 &&
|
||||
StorageClassSpec == SCS_auto)
|
||||
Diag(D, StorageClassSpecLoc, diag::warn_auto_storage_class)
|
||||
<< FixItHint::CreateRemoval(StorageClassSpecLoc);
|
||||
|
|
|
@ -674,7 +674,7 @@ static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) {
|
|||
/// Return true if a particular note should be downgraded to a compatibility
|
||||
/// warning in C++11 mode.
|
||||
static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) {
|
||||
return S.getLangOpts().CPlusPlus0x &&
|
||||
return S.getLangOpts().CPlusPlus11 &&
|
||||
InDiagNote == diag::note_protected_by_variable_non_pod;
|
||||
}
|
||||
|
||||
|
|
|
@ -683,7 +683,7 @@ void Sema::ActOnEndOfTranslationUnit() {
|
|||
|
||||
}
|
||||
|
||||
if (LangOpts.CPlusPlus0x &&
|
||||
if (LangOpts.CPlusPlus11 &&
|
||||
Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
|
||||
SourceLocation())
|
||||
!= DiagnosticsEngine::Ignored)
|
||||
|
@ -848,7 +848,7 @@ void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
|
|||
// Additionally, the AccessCheckingSFINAE flag can be used to temporarily
|
||||
// make access control a part of SFINAE for the purposes of checking
|
||||
// type traits.
|
||||
if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus0x)
|
||||
if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
|
||||
break;
|
||||
|
||||
SourceLocation Loc = Diags.getCurrentDiagLoc();
|
||||
|
|
|
@ -281,11 +281,11 @@ bool Sema::isAcceptableNestedNameSpecifier(NamedDecl *SD) {
|
|||
return true;
|
||||
else if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(SD)) {
|
||||
if (TD->getUnderlyingType()->isRecordType() ||
|
||||
(Context.getLangOpts().CPlusPlus0x &&
|
||||
(Context.getLangOpts().CPlusPlus11 &&
|
||||
TD->getUnderlyingType()->isEnumeralType()))
|
||||
return true;
|
||||
} else if (isa<RecordDecl>(SD) ||
|
||||
(Context.getLangOpts().CPlusPlus0x && isa<EnumDecl>(SD)))
|
||||
(Context.getLangOpts().CPlusPlus11 && isa<EnumDecl>(SD)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -534,7 +534,7 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
|
|||
NamedDecl *SD = Found.getAsSingle<NamedDecl>();
|
||||
if (isAcceptableNestedNameSpecifier(SD)) {
|
||||
if (!ObjectType.isNull() && !ObjectTypeSearchedInScope &&
|
||||
!getLangOpts().CPlusPlus0x) {
|
||||
!getLangOpts().CPlusPlus11) {
|
||||
// C++03 [basic.lookup.classref]p4:
|
||||
// [...] If the name is found in both contexts, the
|
||||
// class-name-or-namespace-name shall refer to the same entity.
|
||||
|
|
|
@ -1775,7 +1775,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
|
|||
// FIXME: Conditionally-supported behavior should be configurable in the
|
||||
// TargetInfo or similar.
|
||||
Self.Diag(OpRange.getBegin(),
|
||||
Self.getLangOpts().CPlusPlus0x ?
|
||||
Self.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj)
|
||||
<< OpRange;
|
||||
return TC_Success;
|
||||
|
@ -1784,7 +1784,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,
|
|||
if (DestType->isFunctionPointerType()) {
|
||||
// See above.
|
||||
Self.Diag(OpRange.getBegin(),
|
||||
Self.getLangOpts().CPlusPlus0x ?
|
||||
Self.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj)
|
||||
<< OpRange;
|
||||
return TC_Success;
|
||||
|
|
|
@ -2904,7 +2904,7 @@ CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,
|
|||
|
||||
EmitFormatDiagnostic(
|
||||
S.PDiag(DiagKind)
|
||||
<< S.getLangOpts().CPlusPlus0x
|
||||
<< S.getLangOpts().CPlusPlus11
|
||||
<< ExprTy
|
||||
<< CallType
|
||||
<< AT.getRepresentativeTypeName(S.Context)
|
||||
|
|
|
@ -1257,7 +1257,7 @@ static void AddTypeSpecifierResults(const LangOptions &LangOpts,
|
|||
Builder.AddPlaceholderChunk("name");
|
||||
Results.AddResult(Result(Builder.TakeString()));
|
||||
|
||||
if (LangOpts.CPlusPlus0x) {
|
||||
if (LangOpts.CPlusPlus11) {
|
||||
Results.AddResult(Result("auto", CCP_Type));
|
||||
Results.AddResult(Result("char16_t", CCP_Type));
|
||||
Results.AddResult(Result("char32_t", CCP_Type));
|
||||
|
@ -1907,7 +1907,7 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC,
|
|||
|
||||
// FIXME: Rethrow?
|
||||
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x) {
|
||||
if (SemaRef.getLangOpts().CPlusPlus11) {
|
||||
// nullptr
|
||||
Builder.AddResultTypeChunk("std::nullptr_t");
|
||||
Builder.AddTypedTextChunk("nullptr");
|
||||
|
@ -2931,7 +2931,7 @@ static void AddPrettyFunctionResults(const LangOptions &LangOpts,
|
|||
|
||||
Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
|
||||
Results.AddResult(Result("__FUNCTION__", CCP_Constant));
|
||||
if (LangOpts.C99 || LangOpts.CPlusPlus0x)
|
||||
if (LangOpts.C99 || LangOpts.CPlusPlus11)
|
||||
Results.AddResult(Result("__func__", CCP_Constant));
|
||||
Results.ExitScope();
|
||||
}
|
||||
|
@ -5164,7 +5164,7 @@ void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
|
|||
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
||||
CodeCompleter->getCodeCompletionTUInfo(),
|
||||
CodeCompletionContext::CCC_ObjCMessageReceiver,
|
||||
getLangOpts().CPlusPlus0x
|
||||
getLangOpts().CPlusPlus11
|
||||
? &ResultBuilder::IsObjCMessageReceiverOrLambdaCapture
|
||||
: &ResultBuilder::IsObjCMessageReceiver);
|
||||
|
||||
|
@ -5183,7 +5183,7 @@ void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
|
|||
AddSuperSendCompletion(*this, /*NeedSuperKeyword=*/true, 0, 0, Results);
|
||||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus0x)
|
||||
if (getLangOpts().CPlusPlus11)
|
||||
addThisCompletion(*this, Results);
|
||||
|
||||
Results.ExitScope();
|
||||
|
|
|
@ -4338,7 +4338,7 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
|
|||
// the program is ill-formed. C++11 drops this restriction.
|
||||
if (RD->isUnion())
|
||||
Diag(D.getIdentifierLoc(),
|
||||
getLangOpts().CPlusPlus0x
|
||||
getLangOpts().CPlusPlus11
|
||||
? diag::warn_cxx98_compat_static_data_member_in_union
|
||||
: diag::ext_static_data_member_in_union) << Name;
|
||||
// We conservatively disallow static data members in anonymous structs.
|
||||
|
@ -5199,7 +5199,7 @@ static FunctionDecl* CreateNewFunctionDecl(Sema &SemaRef, Declarator &D,
|
|||
// If the class is complete, then we now create the implicit exception
|
||||
// specification. If the class is incomplete or dependent, we can't do
|
||||
// it yet.
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x && !Record->isDependentType() &&
|
||||
if (SemaRef.getLangOpts().CPlusPlus11 && !Record->isDependentType() &&
|
||||
Record->getDefinition() && !Record->isBeingDefined() &&
|
||||
R->getAs<FunctionProtoType>()->getExceptionSpecType() == EST_None) {
|
||||
SemaRef.AdjustDestructorExceptionSpec(Record, NewDD);
|
||||
|
@ -5618,7 +5618,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
|
|||
const FunctionProtoType *FPT = R->getAs<FunctionProtoType>();
|
||||
if ((Name.getCXXOverloadedOperator() == OO_Delete ||
|
||||
Name.getCXXOverloadedOperator() == OO_Array_Delete) &&
|
||||
getLangOpts().CPlusPlus0x && FPT && !FPT->hasExceptionSpec()) {
|
||||
getLangOpts().CPlusPlus11 && FPT && !FPT->hasExceptionSpec()) {
|
||||
FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
|
||||
EPI.ExceptionSpecType = EST_BasicNoexcept;
|
||||
NewFD->setType(Context.getFunctionType(FPT->getResultType(),
|
||||
|
@ -6864,7 +6864,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
|
|||
} else if (DclT->isIntegralOrEnumerationType()) {
|
||||
// Check whether the expression is a constant expression.
|
||||
SourceLocation Loc;
|
||||
if (getLangOpts().CPlusPlus0x && DclT.isVolatileQualified())
|
||||
if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())
|
||||
// In C++11, a non-constexpr const static data member with an
|
||||
// in-class initializer cannot be volatile.
|
||||
Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);
|
||||
|
@ -6889,7 +6889,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
|
|||
} else if (DclT->isFloatingType()) { // also permits complex, which is ok
|
||||
Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
|
||||
<< DclT << Init->getSourceRange();
|
||||
if (getLangOpts().CPlusPlus0x)
|
||||
if (getLangOpts().CPlusPlus11)
|
||||
Diag(VDecl->getLocation(),
|
||||
diag::note_in_class_initializer_float_type_constexpr)
|
||||
<< FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
|
||||
|
@ -6901,7 +6901,7 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
|
|||
}
|
||||
|
||||
// Suggest adding 'constexpr' in C++11 for literal types.
|
||||
} else if (getLangOpts().CPlusPlus0x && DclT->isLiteralType()) {
|
||||
} else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType()) {
|
||||
Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type)
|
||||
<< DclT << Init->getSourceRange()
|
||||
<< FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
|
||||
|
@ -9174,7 +9174,7 @@ CreateNewDecl:
|
|||
// If this is an undefined enum, warn.
|
||||
if (TUK != TUK_Definition && !Invalid) {
|
||||
TagDecl *Def;
|
||||
if (getLangOpts().CPlusPlus0x && cast<EnumDecl>(New)->isFixed()) {
|
||||
if (getLangOpts().CPlusPlus11 && cast<EnumDecl>(New)->isFixed()) {
|
||||
// C++0x: 7.2p2: opaque-enum-declaration.
|
||||
// Conflicts are diagnosed above. Do nothing.
|
||||
}
|
||||
|
@ -9839,7 +9839,7 @@ bool Sema::CheckNontrivialField(FieldDecl *FD) {
|
|||
member = CXXDestructor;
|
||||
|
||||
if (member != CXXInvalid) {
|
||||
if (!getLangOpts().CPlusPlus0x &&
|
||||
if (!getLangOpts().CPlusPlus11 &&
|
||||
getLangOpts().ObjCAutoRefCount && RDecl->hasObjectMember()) {
|
||||
// Objective-C++ ARC: it is an error to have a non-trivial field of
|
||||
// a union. However, system headers in Objective-C programs
|
||||
|
@ -9855,12 +9855,12 @@ bool Sema::CheckNontrivialField(FieldDecl *FD) {
|
|||
}
|
||||
}
|
||||
|
||||
Diag(FD->getLocation(), getLangOpts().CPlusPlus0x ?
|
||||
Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member :
|
||||
diag::err_illegal_union_or_anon_struct_member)
|
||||
<< (int)FD->getParent()->isUnion() << FD->getDeclName() << member;
|
||||
DiagnoseNontrivial(RDecl, member);
|
||||
return !getLangOpts().CPlusPlus0x;
|
||||
return !getLangOpts().CPlusPlus11;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10259,7 +10259,7 @@ void Sema::ActOnFields(Scope* S,
|
|||
|
||||
if (!CXXRecord->isDependentType()) {
|
||||
// Adjust user-defined destructor exception spec.
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
CXXRecord->hasUserDeclaredDestructor())
|
||||
AdjustDestructorExceptionSpec(CXXRecord,CXXRecord->getDestructor());
|
||||
|
||||
|
@ -10439,7 +10439,7 @@ EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
|
|||
EltTy = Context.DependentTy;
|
||||
else {
|
||||
SourceLocation ExpLoc;
|
||||
if (getLangOpts().CPlusPlus0x && Enum->isFixed() &&
|
||||
if (getLangOpts().CPlusPlus11 && Enum->isFixed() &&
|
||||
!getLangOpts().MicrosoftMode) {
|
||||
// C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the
|
||||
// constant-expression in the enumerator-definition shall be a converted
|
||||
|
|
|
@ -2400,7 +2400,7 @@ MemInitResult
|
|||
Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
|
||||
CXXRecordDecl *ClassDecl) {
|
||||
SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
|
||||
if (!LangOpts.CPlusPlus0x)
|
||||
if (!LangOpts.CPlusPlus11)
|
||||
return Diag(NameLoc, diag::err_delegating_ctor)
|
||||
<< TInfo->getTypeLoc().getLocalSourceRange();
|
||||
Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
|
||||
|
@ -4008,7 +4008,7 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
|
|||
//
|
||||
// We delay this until we know whether an explicitly-defaulted (or deleted)
|
||||
// destructor for the class is trivial.
|
||||
if (LangOpts.CPlusPlus0x && !Record->isDependentType() &&
|
||||
if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
|
||||
!Record->isLiteral() && !Record->getNumVBases()) {
|
||||
for (CXXRecordDecl::method_iterator M = Record->method_begin(),
|
||||
MEnd = Record->method_end();
|
||||
|
@ -4066,7 +4066,7 @@ static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
|
|||
static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
|
||||
Sema::CXXSpecialMember CSM,
|
||||
bool ConstArg) {
|
||||
if (!S.getLangOpts().CPlusPlus0x)
|
||||
if (!S.getLangOpts().CPlusPlus11)
|
||||
return false;
|
||||
|
||||
// C++11 [dcl.constexpr]p4:
|
||||
|
@ -4706,7 +4706,7 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
|
|||
return false;
|
||||
CXXRecordDecl *RD = MD->getParent();
|
||||
assert(!RD->isDependentType() && "do deletion after instantiation");
|
||||
if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
|
||||
if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
|
||||
return false;
|
||||
|
||||
// C++11 [expr.lambda.prim]p19:
|
||||
|
@ -5394,7 +5394,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
DeclareImplicitCopyConstructor(ClassDecl);
|
||||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveConstructor()) {
|
||||
if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
|
||||
++ASTContext::NumImplicitMoveConstructors;
|
||||
|
||||
if (ClassDecl->needsOverloadResolutionForMoveConstructor())
|
||||
|
@ -5413,7 +5413,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
DeclareImplicitCopyAssignment(ClassDecl);
|
||||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveAssignment()) {
|
||||
if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
|
||||
++ASTContext::NumImplicitMoveAssignmentOperators;
|
||||
|
||||
// Likewise for the move assignment operator.
|
||||
|
@ -5880,7 +5880,7 @@ void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
|
|||
// C++0x explicit conversion operators.
|
||||
if (D.getDeclSpec().isExplicitSpecified())
|
||||
Diag(D.getDeclSpec().getExplicitSpecLoc(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_explicit_conversion_functions :
|
||||
diag::ext_explicit_conversion_functions)
|
||||
<< SourceRange(D.getDeclSpec().getExplicitSpecLoc());
|
||||
|
@ -6482,14 +6482,14 @@ Decl *Sema::ActOnUsingDeclaration(Scope *S,
|
|||
case UnqualifiedId::IK_ConstructorTemplateId:
|
||||
// C++11 inheriting constructors.
|
||||
Diag(Name.getLocStart(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
// FIXME: Produce warn_cxx98_compat_using_decl_constructor
|
||||
// instead once inheriting constructors work.
|
||||
diag::err_using_decl_constructor_unsupported :
|
||||
diag::err_using_decl_constructor)
|
||||
<< SS.getRange();
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) break;
|
||||
if (getLangOpts().CPlusPlus11) break;
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -6579,7 +6579,7 @@ bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
|
|||
// specialization. The UsingShadowDecl in D<T> then points directly
|
||||
// to A::foo, which will look well-formed when we instantiate.
|
||||
// The right solution is to not collapse the shadow-decl chain.
|
||||
if (!getLangOpts().CPlusPlus0x && CurContext->isRecord()) {
|
||||
if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
|
||||
DeclContext *OrigDC = Orig->getDeclContext();
|
||||
|
||||
// Handle enums and anonymous structs.
|
||||
|
@ -7068,7 +7068,7 @@ bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
|
|||
RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
|
||||
return true;
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// C++0x [namespace.udecl]p3:
|
||||
// In a using-declaration used as a member-declaration, the
|
||||
// nested-name-specifier shall name a base class of the class
|
||||
|
@ -7889,7 +7889,7 @@ void Sema::ActOnFinishCXXMemberDecls() {
|
|||
|
||||
void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
|
||||
CXXDestructorDecl *Destructor) {
|
||||
assert(getLangOpts().CPlusPlus0x &&
|
||||
assert(getLangOpts().CPlusPlus11 &&
|
||||
"adjusting dtor exception specs was introduced in c++11");
|
||||
|
||||
// C++11 [class.dtor]p3:
|
||||
|
@ -8027,7 +8027,7 @@ buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
|
|||
|
||||
// Prior to C++11, filter out any result that isn't a copy/move-assignment
|
||||
// operator.
|
||||
if (!S.getLangOpts().CPlusPlus0x) {
|
||||
if (!S.getLangOpts().CPlusPlus11) {
|
||||
LookupResult::Filter F = OpLookup.makeFilter();
|
||||
while (F.hasNext()) {
|
||||
NamedDecl *D = F.next();
|
||||
|
@ -10303,7 +10303,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
|
|||
std::string InsertionText = std::string(" ") + RD->getKindName();
|
||||
|
||||
Diag(TypeRange.getBegin(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_unelaborated_friend_type :
|
||||
diag::ext_unelaborated_friend_type)
|
||||
<< (unsigned) RD->getTagKind()
|
||||
|
@ -10312,7 +10312,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
|
|||
InsertionText);
|
||||
} else {
|
||||
Diag(FriendLoc,
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_nonclass_type_friend :
|
||||
diag::ext_nonclass_type_friend)
|
||||
<< T
|
||||
|
@ -10320,7 +10320,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
|
|||
}
|
||||
} else if (T->getAs<EnumType>()) {
|
||||
Diag(FriendLoc,
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_enum_friend :
|
||||
diag::ext_enum_friend)
|
||||
<< T
|
||||
|
@ -10333,7 +10333,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
|
|||
// friend elaborated-type-specifier ;
|
||||
// friend simple-type-specifier ;
|
||||
// friend typename-specifier ;
|
||||
if (getLangOpts().CPlusPlus0x && LocStart != FriendLoc)
|
||||
if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
|
||||
Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
|
||||
|
||||
// If the type specifier in a friend declaration designates a (possibly
|
||||
|
@ -10666,7 +10666,7 @@ Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
|
|||
// we do, too.
|
||||
if (!Previous.empty() && DC->Equals(CurContext))
|
||||
Diag(DS.getFriendSpecLoc(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_friend_is_member :
|
||||
diag::err_friend_is_member);
|
||||
|
||||
|
@ -10714,7 +10714,7 @@ Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
|
|||
// class that is not a member of the class . . .
|
||||
if (DC->Equals(CurContext))
|
||||
Diag(DS.getFriendSpecLoc(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_friend_is_member :
|
||||
diag::err_friend_is_member);
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {
|
|||
// If a declaration of a function has an implicit
|
||||
// exception-specification, other declarations of the function shall
|
||||
// not specify an exception-specification.
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
hasImplicitExceptionSpec(Old) != hasImplicitExceptionSpec(New)) {
|
||||
Diag(New->getLocation(), diag::ext_implicit_exception_spec_mismatch)
|
||||
<< hasImplicitExceptionSpec(Old);
|
||||
|
@ -454,7 +454,7 @@ bool Sema::CheckEquivalentExceptionSpec(const PartialDiagnostic &DiagID,
|
|||
// As a special compatibility feature, under C++0x we accept no spec and
|
||||
// throw(std::bad_alloc) as equivalent for operator new and operator new[].
|
||||
// This is because the implicit declaration changed, but old code would break.
|
||||
if (getLangOpts().CPlusPlus0x && IsOperatorNew) {
|
||||
if (getLangOpts().CPlusPlus11 && IsOperatorNew) {
|
||||
const FunctionProtoType *WithExceptions = 0;
|
||||
if (OldEST == EST_None && NewEST == EST_Dynamic)
|
||||
WithExceptions = New;
|
||||
|
@ -785,7 +785,7 @@ bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType)
|
|||
|
||||
bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
|
||||
const CXXMethodDecl *Old) {
|
||||
if (getLangOpts().CPlusPlus0x && isa<CXXDestructorDecl>(New)) {
|
||||
if (getLangOpts().CPlusPlus11 && isa<CXXDestructorDecl>(New)) {
|
||||
// Don't check uninstantiated template destructors at all. We can only
|
||||
// synthesize correct specs after the template is instantiated.
|
||||
if (New->getParent()->isDependentType())
|
||||
|
|
|
@ -639,7 +639,7 @@ Sema::VarArgKind Sema::isValidVarArgType(const QualType &Ty) {
|
|||
// having a non-trivial copy constructor, a non-trivial move constructor,
|
||||
// or a non-trivial destructor, with no corresponding parameter,
|
||||
// is conditionally-supported with implementation-defined semantics.
|
||||
if (getLangOpts().CPlusPlus0x && !Ty->isDependentType())
|
||||
if (getLangOpts().CPlusPlus11 && !Ty->isDependentType())
|
||||
if (CXXRecordDecl *Record = Ty->getAsCXXRecordDecl())
|
||||
if (!Record->hasNonTrivialCopyConstructor() &&
|
||||
!Record->hasNonTrivialMoveConstructor() &&
|
||||
|
@ -672,7 +672,7 @@ bool Sema::variadicArgumentPODCheck(const Expr *E, VariadicCallType CT) {
|
|||
|
||||
return DiagRuntimeBehavior(E->getLocStart(), 0,
|
||||
PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg)
|
||||
<< getLangOpts().CPlusPlus0x << Ty << CT);
|
||||
<< getLangOpts().CPlusPlus11 << Ty << CT);
|
||||
}
|
||||
}
|
||||
// c++ rules are enforced elsewhere.
|
||||
|
@ -2830,7 +2830,7 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {
|
|||
if (!getLangOpts().C99 && Literal.isLongLong) {
|
||||
if (getLangOpts().CPlusPlus)
|
||||
Diag(Tok.getLocation(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);
|
||||
else
|
||||
Diag(Tok.getLocation(), diag::ext_c99_longlong);
|
||||
|
@ -8316,7 +8316,7 @@ static void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr,
|
|||
ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
|
||||
BinaryOperatorKind Opc,
|
||||
Expr *LHSExpr, Expr *RHSExpr) {
|
||||
if (getLangOpts().CPlusPlus0x && isa<InitListExpr>(RHSExpr)) {
|
||||
if (getLangOpts().CPlusPlus11 && isa<InitListExpr>(RHSExpr)) {
|
||||
// The syntax only allows initializer lists on the RHS of assignment,
|
||||
// so we don't need to worry about accepting invalid code for
|
||||
// non-assignment operators.
|
||||
|
@ -9206,9 +9206,9 @@ ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
|
|||
// If type is not a standard-layout class (Clause 9), the results are
|
||||
// undefined.
|
||||
if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {
|
||||
bool IsSafe = LangOpts.CPlusPlus0x? CRD->isStandardLayout() : CRD->isPOD();
|
||||
bool IsSafe = LangOpts.CPlusPlus11? CRD->isStandardLayout() : CRD->isPOD();
|
||||
unsigned DiagID =
|
||||
LangOpts.CPlusPlus0x? diag::warn_offsetof_non_standardlayout_type
|
||||
LangOpts.CPlusPlus11? diag::warn_offsetof_non_standardlayout_type
|
||||
: diag::warn_offsetof_non_pod_type;
|
||||
|
||||
if (!IsSafe && !DidWarnAboutNonPOD &&
|
||||
|
@ -9976,7 +9976,7 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
|
|||
bool AllowFold) {
|
||||
SourceLocation DiagLoc = E->getLocStart();
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// C++11 [expr.const]p5:
|
||||
// If an expression of literal class type is used in a context where an
|
||||
// integral constant expression is required, then that class type shall
|
||||
|
@ -10103,7 +10103,7 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
|
|||
|
||||
// Circumvent ICE checking in C++11 to avoid evaluating the expression twice
|
||||
// in the non-ICE case.
|
||||
if (!getLangOpts().CPlusPlus0x && E->isIntegerConstantExpr(Context)) {
|
||||
if (!getLangOpts().CPlusPlus11 && E->isIntegerConstantExpr(Context)) {
|
||||
if (Result)
|
||||
*Result = E->EvaluateKnownConstInt(Context);
|
||||
return Owned(E);
|
||||
|
@ -10121,7 +10121,7 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
|
|||
// In C++11, we can rely on diagnostics being produced for any expression
|
||||
// which is not a constant expression. If no diagnostics were produced, then
|
||||
// this is a constant expression.
|
||||
if (Folded && getLangOpts().CPlusPlus0x && Notes.empty()) {
|
||||
if (Folded && getLangOpts().CPlusPlus11 && Notes.empty()) {
|
||||
if (Result)
|
||||
*Result = EvalResult.Val.getInt();
|
||||
return Owned(E);
|
||||
|
|
|
@ -1140,7 +1140,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
|
|||
virtual DiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc,
|
||||
QualType T) {
|
||||
return S.Diag(Loc, diag::err_array_size_not_integral)
|
||||
<< S.getLangOpts().CPlusPlus0x << T;
|
||||
<< S.getLangOpts().CPlusPlus11 << T;
|
||||
}
|
||||
|
||||
virtual DiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc,
|
||||
|
@ -1178,7 +1178,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
|
|||
QualType T,
|
||||
QualType ConvTy) {
|
||||
return S.Diag(Loc,
|
||||
S.getLangOpts().CPlusPlus0x
|
||||
S.getLangOpts().CPlusPlus11
|
||||
? diag::warn_cxx98_compat_array_size_conversion
|
||||
: diag::ext_array_size_conversion)
|
||||
<< T << ConvTy->isEnumeralType() << ConvTy;
|
||||
|
@ -1214,7 +1214,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
|
|||
if (Value < llvm::APSInt(
|
||||
llvm::APInt::getNullValue(Value.getBitWidth()),
|
||||
Value.isUnsigned())) {
|
||||
if (getLangOpts().CPlusPlus0x)
|
||||
if (getLangOpts().CPlusPlus11)
|
||||
Diag(ArraySize->getLocStart(),
|
||||
diag::warn_typecheck_negative_array_new_size)
|
||||
<< ArraySize->getSourceRange();
|
||||
|
@ -1226,7 +1226,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
|
|||
unsigned ActiveSizeBits =
|
||||
ConstantArrayType::getNumAddressingBits(Context, AllocType, Value);
|
||||
if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
|
||||
if (getLangOpts().CPlusPlus0x)
|
||||
if (getLangOpts().CPlusPlus11)
|
||||
Diag(ArraySize->getLocStart(),
|
||||
diag::warn_array_new_too_large)
|
||||
<< Value.toString(10)
|
||||
|
@ -1637,7 +1637,7 @@ bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
|
|||
// as a placement deallocation function, would have been
|
||||
// selected as a match for the allocation function, the program
|
||||
// is ill-formed.
|
||||
if (NumPlaceArgs && getLangOpts().CPlusPlus0x &&
|
||||
if (NumPlaceArgs && getLangOpts().CPlusPlus11 &&
|
||||
isNonPlacementDeallocationFunction(OperatorDelete)) {
|
||||
Diag(StartLoc, diag::err_placement_new_non_placement_delete)
|
||||
<< SourceRange(PlaceArgs[0]->getLocStart(),
|
||||
|
@ -1813,7 +1813,7 @@ void Sema::DeclareGlobalNewDelete() {
|
|||
// lookup.
|
||||
// Note that the C++0x versions of operator delete are deallocation functions,
|
||||
// and thus are implicitly noexcept.
|
||||
if (!StdBadAlloc && !getLangOpts().CPlusPlus0x) {
|
||||
if (!StdBadAlloc && !getLangOpts().CPlusPlus11) {
|
||||
// The "std::bad_alloc" class has not yet been declared, so build it
|
||||
// implicitly.
|
||||
StdBadAlloc = CXXRecordDecl::Create(Context, TTK_Class,
|
||||
|
@ -1876,20 +1876,20 @@ void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,
|
|||
bool HasBadAllocExceptionSpec
|
||||
= (Name.getCXXOverloadedOperator() == OO_New ||
|
||||
Name.getCXXOverloadedOperator() == OO_Array_New);
|
||||
if (HasBadAllocExceptionSpec && !getLangOpts().CPlusPlus0x) {
|
||||
if (HasBadAllocExceptionSpec && !getLangOpts().CPlusPlus11) {
|
||||
assert(StdBadAlloc && "Must have std::bad_alloc declared");
|
||||
BadAllocType = Context.getTypeDeclType(getStdBadAlloc());
|
||||
}
|
||||
|
||||
FunctionProtoType::ExtProtoInfo EPI;
|
||||
if (HasBadAllocExceptionSpec) {
|
||||
if (!getLangOpts().CPlusPlus0x) {
|
||||
if (!getLangOpts().CPlusPlus11) {
|
||||
EPI.ExceptionSpecType = EST_Dynamic;
|
||||
EPI.NumExceptions = 1;
|
||||
EPI.Exceptions = &BadAllocType;
|
||||
}
|
||||
} else {
|
||||
EPI.ExceptionSpecType = getLangOpts().CPlusPlus0x ?
|
||||
EPI.ExceptionSpecType = getLangOpts().CPlusPlus11 ?
|
||||
EST_BasicNoexcept : EST_DynamicNone;
|
||||
}
|
||||
|
||||
|
@ -5436,7 +5436,7 @@ ExprResult Sema::IgnoredValueConversions(Expr *E) {
|
|||
// normally, we don't need to do anything to handle it, but if it is a
|
||||
// volatile lvalue with a special form, we perform an lvalue-to-rvalue
|
||||
// conversion.
|
||||
if (getLangOpts().CPlusPlus0x && E->isGLValue() &&
|
||||
if (getLangOpts().CPlusPlus11 && E->isGLValue() &&
|
||||
E->getType().isVolatileQualified() &&
|
||||
IsSpecialDiscardedValue(E)) {
|
||||
ExprResult Res = DefaultLvalueConversion(E);
|
||||
|
|
|
@ -121,7 +121,7 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef,
|
|||
return IMA_Static;
|
||||
|
||||
bool IsCXX11UnevaluatedField = false;
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x && isField) {
|
||||
if (SemaRef.getLangOpts().CPlusPlus11 && isField) {
|
||||
// C++11 [expr.prim.general]p12:
|
||||
// An id-expression that denotes a non-static data member or non-static
|
||||
// member function of a class can only be used:
|
||||
|
|
|
@ -178,7 +178,7 @@ static std::string getScalarZeroExpressionForType(const Type& T, const Sema& S)
|
|||
if (T.isBooleanType() && S.LangOpts.CPlusPlus)
|
||||
return "false";
|
||||
if (T.isPointerType() || T.isMemberPointerType()) {
|
||||
if (S.LangOpts.CPlusPlus0x)
|
||||
if (S.LangOpts.CPlusPlus11)
|
||||
return "nullptr";
|
||||
if (isMacroDefined(S, "NULL"))
|
||||
return "NULL";
|
||||
|
@ -205,7 +205,7 @@ std::string Sema::getFixItZeroInitializerForType(QualType T) const {
|
|||
const CXXRecordDecl *RD = T->getAsCXXRecordDecl();
|
||||
if (!RD || !RD->hasDefinition())
|
||||
return std::string();
|
||||
if (LangOpts.CPlusPlus0x && !RD->hasUserProvidedDefaultConstructor())
|
||||
if (LangOpts.CPlusPlus11 && !RD->hasUserProvidedDefaultConstructor())
|
||||
return "{}";
|
||||
if (RD->isAggregate())
|
||||
return " = {}";
|
||||
|
|
|
@ -901,11 +901,11 @@ void InitListChecker::CheckScalarType(const InitializedEntity &Entity,
|
|||
if (Index >= IList->getNumInits()) {
|
||||
if (!VerifyOnly)
|
||||
SemaRef.Diag(IList->getLocStart(),
|
||||
SemaRef.getLangOpts().CPlusPlus0x ?
|
||||
SemaRef.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_empty_scalar_initializer :
|
||||
diag::err_empty_scalar_initializer)
|
||||
<< IList->getSourceRange();
|
||||
hadError = !SemaRef.getLangOpts().CPlusPlus0x;
|
||||
hadError = !SemaRef.getLangOpts().CPlusPlus11;
|
||||
++Index;
|
||||
++StructuredIndex;
|
||||
return;
|
||||
|
@ -985,7 +985,7 @@ void InitListChecker::CheckReferenceType(const InitializedEntity &Entity,
|
|||
}
|
||||
|
||||
Expr *expr = IList->getInit(Index);
|
||||
if (isa<InitListExpr>(expr) && !SemaRef.getLangOpts().CPlusPlus0x) {
|
||||
if (isa<InitListExpr>(expr) && !SemaRef.getLangOpts().CPlusPlus11) {
|
||||
if (!VerifyOnly)
|
||||
SemaRef.Diag(IList->getLocStart(), diag::err_init_non_aggr_init_list)
|
||||
<< DeclType << IList->getSourceRange();
|
||||
|
@ -2984,7 +2984,7 @@ static void TryReferenceListInitialization(Sema &S,
|
|||
InitializationSequence &Sequence)
|
||||
{
|
||||
// First, catch C++03 where this isn't possible.
|
||||
if (!S.getLangOpts().CPlusPlus0x) {
|
||||
if (!S.getLangOpts().CPlusPlus11) {
|
||||
Sequence.SetFailed(InitializationSequence::FK_ReferenceBindingToInitList);
|
||||
return;
|
||||
}
|
||||
|
@ -3068,7 +3068,7 @@ static void TryListInitialization(Sema &S,
|
|||
// C++11 [dcl.init.list]p3:
|
||||
// - If T is an aggregate, aggregate initialization is performed.
|
||||
if (!DestType->isAggregateType()) {
|
||||
if (S.getLangOpts().CPlusPlus0x) {
|
||||
if (S.getLangOpts().CPlusPlus11) {
|
||||
// - Otherwise, if the initializer list has no elements and T is a
|
||||
// class type with a default constructor, the object is
|
||||
// value-initialized.
|
||||
|
@ -3099,7 +3099,7 @@ static void TryListInitialization(Sema &S,
|
|||
InitListChecker CheckInitList(S, Entity, InitList,
|
||||
DestType, /*VerifyOnly=*/true,
|
||||
Kind.getKind() != InitializationKind::IK_DirectList ||
|
||||
!S.getLangOpts().CPlusPlus0x);
|
||||
!S.getLangOpts().CPlusPlus11);
|
||||
if (CheckInitList.HadError()) {
|
||||
Sequence.SetFailed(InitializationSequence::FK_ListInitializationFailed);
|
||||
return;
|
||||
|
@ -3461,9 +3461,9 @@ static void TryReferenceInitializationCore(Sema &S,
|
|||
//
|
||||
// The constructor that would be used to make the copy shall
|
||||
// be callable whether or not the copy is actually done.
|
||||
if (!S.getLangOpts().CPlusPlus0x && !S.getLangOpts().MicrosoftExt)
|
||||
if (!S.getLangOpts().CPlusPlus11 && !S.getLangOpts().MicrosoftExt)
|
||||
Sequence.AddExtraneousCopyToTemporary(cv2T2);
|
||||
else if (S.getLangOpts().CPlusPlus0x)
|
||||
else if (S.getLangOpts().CPlusPlus11)
|
||||
CheckCXX98CompatAccessibleCopy(S, Entity, Initializer);
|
||||
}
|
||||
|
||||
|
@ -3594,7 +3594,7 @@ static void TryValueInitialization(Sema &S,
|
|||
if (const RecordType *RT = T->getAs<RecordType>()) {
|
||||
if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) {
|
||||
bool NeedZeroInitialization = true;
|
||||
if (!S.getLangOpts().CPlusPlus0x) {
|
||||
if (!S.getLangOpts().CPlusPlus11) {
|
||||
// C++98:
|
||||
// -- if T is a class type (clause 9) with a user-declared constructor
|
||||
// (12.1), then the default constructor for T is called (and the
|
||||
|
@ -3631,7 +3631,7 @@ static void TryValueInitialization(Sema &S,
|
|||
// C++11 doesn't need this handling, because value-initialization does not
|
||||
// occur recursively there, and the implicit default constructor is
|
||||
// defined as deleted in the problematic cases.
|
||||
if (!S.getLangOpts().CPlusPlus0x &&
|
||||
if (!S.getLangOpts().CPlusPlus11 &&
|
||||
ClassDecl->hasUninitializedReferenceMember()) {
|
||||
Sequence.SetFailed(InitializationSequence::FK_TooManyInitsForReference);
|
||||
return;
|
||||
|
@ -4580,7 +4580,7 @@ static ExprResult CopyObject(Sema &S,
|
|||
static void CheckCXX98CompatAccessibleCopy(Sema &S,
|
||||
const InitializedEntity &Entity,
|
||||
Expr *CurInitExpr) {
|
||||
assert(S.getLangOpts().CPlusPlus0x);
|
||||
assert(S.getLangOpts().CPlusPlus11);
|
||||
|
||||
const RecordType *Record = CurInitExpr->getType()->getAs<RecordType>();
|
||||
if (!Record)
|
||||
|
@ -4875,7 +4875,7 @@ InitializationSequence::Perform(Sema &S,
|
|||
if (Steps.empty())
|
||||
return S.Owned((Expr *)0);
|
||||
|
||||
if (S.getLangOpts().CPlusPlus0x && Entity.getType()->isReferenceType() &&
|
||||
if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() &&
|
||||
Args.size() == 1 && isa<InitListExpr>(Args[0]) &&
|
||||
Entity.getKind() != InitializedEntity::EK_Parameter) {
|
||||
// Produce a C++98 compatibility warning if we are initializing a reference
|
||||
|
@ -5205,7 +5205,7 @@ InitializationSequence::Perform(Sema &S,
|
|||
InitListChecker PerformInitList(S, IsTemporary ? TempEntity : Entity,
|
||||
InitList, Ty, /*VerifyOnly=*/false,
|
||||
Kind.getKind() != InitializationKind::IK_DirectList ||
|
||||
!S.getLangOpts().CPlusPlus0x);
|
||||
!S.getLangOpts().CPlusPlus11);
|
||||
if (PerformInitList.HadError())
|
||||
return ExprError();
|
||||
|
||||
|
@ -5833,7 +5833,7 @@ bool InitializationSequence::Diagnose(Sema &S,
|
|||
InitListChecker DiagnoseInitList(S, Entity, InitList,
|
||||
DestType, /*VerifyOnly=*/false,
|
||||
Kind.getKind() != InitializationKind::IK_DirectList ||
|
||||
!S.getLangOpts().CPlusPlus0x);
|
||||
!S.getLangOpts().CPlusPlus11);
|
||||
assert(DiagnoseInitList.HadError() &&
|
||||
"Inconsistent init list check result.");
|
||||
break;
|
||||
|
@ -6191,7 +6191,7 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
|
|||
// narrowing conversion even if the value is a constant and can be
|
||||
// represented exactly as an integer.
|
||||
S.Diag(PostInit->getLocStart(),
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11?
|
||||
diag::warn_init_list_type_narrowing
|
||||
: S.isSFINAEContext()?
|
||||
diag::err_init_list_type_narrowing_sfinae
|
||||
|
@ -6204,7 +6204,7 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
|
|||
case NK_Constant_Narrowing:
|
||||
// A constant value was narrowed.
|
||||
S.Diag(PostInit->getLocStart(),
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11?
|
||||
diag::warn_init_list_constant_narrowing
|
||||
: S.isSFINAEContext()?
|
||||
diag::err_init_list_constant_narrowing_sfinae
|
||||
|
@ -6217,7 +6217,7 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
|
|||
case NK_Variable_Narrowing:
|
||||
// A variable's value may have been narrowed.
|
||||
S.Diag(PostInit->getLocStart(),
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().MicrosoftExt || !S.getLangOpts().CPlusPlus11?
|
||||
diag::warn_init_list_variable_narrowing
|
||||
: S.isSFINAEContext()?
|
||||
diag::err_init_list_variable_narrowing_sfinae
|
||||
|
|
|
@ -553,7 +553,7 @@ void Sema::ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class) {
|
|||
if (Class->needsImplicitCopyAssignment())
|
||||
DeclareImplicitCopyAssignment(Class);
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// If the move constructor has not yet been declared, do so now.
|
||||
if (Class->needsImplicitMoveConstructor())
|
||||
DeclareImplicitMoveConstructor(Class); // might not actually do it
|
||||
|
@ -603,7 +603,7 @@ static void DeclareImplicitMemberFunctionsWithName(Sema &S,
|
|||
S.DeclareImplicitDefaultConstructor(Class);
|
||||
if (Record->needsImplicitCopyConstructor())
|
||||
S.DeclareImplicitCopyConstructor(Class);
|
||||
if (S.getLangOpts().CPlusPlus0x &&
|
||||
if (S.getLangOpts().CPlusPlus11 &&
|
||||
Record->needsImplicitMoveConstructor())
|
||||
S.DeclareImplicitMoveConstructor(Class);
|
||||
}
|
||||
|
@ -625,7 +625,7 @@ static void DeclareImplicitMemberFunctionsWithName(Sema &S,
|
|||
CXXRecordDecl *Class = const_cast<CXXRecordDecl *>(Record);
|
||||
if (Record->needsImplicitCopyAssignment())
|
||||
S.DeclareImplicitCopyAssignment(Class);
|
||||
if (S.getLangOpts().CPlusPlus0x &&
|
||||
if (S.getLangOpts().CPlusPlus11 &&
|
||||
Record->needsImplicitMoveAssignment())
|
||||
S.DeclareImplicitMoveAssignment(Class);
|
||||
}
|
||||
|
@ -2289,13 +2289,13 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
|
|||
Name = Context.DeclarationNames.getCXXConstructorName(CanTy);
|
||||
if (RD->needsImplicitCopyConstructor())
|
||||
DeclareImplicitCopyConstructor(RD);
|
||||
if (getLangOpts().CPlusPlus0x && RD->needsImplicitMoveConstructor())
|
||||
if (getLangOpts().CPlusPlus11 && RD->needsImplicitMoveConstructor())
|
||||
DeclareImplicitMoveConstructor(RD);
|
||||
} else {
|
||||
Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
|
||||
if (RD->needsImplicitCopyAssignment())
|
||||
DeclareImplicitCopyAssignment(RD);
|
||||
if (getLangOpts().CPlusPlus0x && RD->needsImplicitMoveAssignment())
|
||||
if (getLangOpts().CPlusPlus11 && RD->needsImplicitMoveAssignment())
|
||||
DeclareImplicitMoveAssignment(RD);
|
||||
}
|
||||
|
||||
|
@ -2448,7 +2448,7 @@ DeclContext::lookup_result Sema::LookupConstructors(CXXRecordDecl *Class) {
|
|||
DeclareImplicitDefaultConstructor(Class);
|
||||
if (Class->needsImplicitCopyConstructor())
|
||||
DeclareImplicitCopyConstructor(Class);
|
||||
if (getLangOpts().CPlusPlus0x && Class->needsImplicitMoveConstructor())
|
||||
if (getLangOpts().CPlusPlus11 && Class->needsImplicitMoveConstructor())
|
||||
DeclareImplicitMoveConstructor(Class);
|
||||
}
|
||||
|
||||
|
@ -3555,7 +3555,7 @@ static void AddKeywordsToConsumer(Sema &SemaRef,
|
|||
Consumer.addKeywordResult("typename");
|
||||
Consumer.addKeywordResult("wchar_t");
|
||||
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x) {
|
||||
if (SemaRef.getLangOpts().CPlusPlus11) {
|
||||
Consumer.addKeywordResult("char16_t");
|
||||
Consumer.addKeywordResult("char32_t");
|
||||
Consumer.addKeywordResult("constexpr");
|
||||
|
@ -3594,7 +3594,7 @@ static void AddKeywordsToConsumer(Sema &SemaRef,
|
|||
cast<CXXMethodDecl>(SemaRef.CurContext)->isInstance())
|
||||
Consumer.addKeywordResult("this");
|
||||
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x) {
|
||||
if (SemaRef.getLangOpts().CPlusPlus11) {
|
||||
Consumer.addKeywordResult("alignof");
|
||||
Consumer.addKeywordResult("nullptr");
|
||||
}
|
||||
|
@ -3651,7 +3651,7 @@ static void AddKeywordsToConsumer(Sema &SemaRef,
|
|||
if (SemaRef.getLangOpts().CPlusPlus) {
|
||||
Consumer.addKeywordResult("using");
|
||||
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x)
|
||||
if (SemaRef.getLangOpts().CPlusPlus11)
|
||||
Consumer.addKeywordResult("static_assert");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3208,7 +3208,7 @@ static ImplicitConversionSequence::CompareKind
|
|||
compareConversionFunctions(Sema &S,
|
||||
FunctionDecl *Function1,
|
||||
FunctionDecl *Function2) {
|
||||
if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus0x)
|
||||
if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
|
||||
return ImplicitConversionSequence::Indistinguishable;
|
||||
|
||||
// Objective-C++:
|
||||
|
@ -4224,7 +4224,7 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
|
|||
// allow the use of rvalue references in C++98/03 for the benefit of
|
||||
// standard library implementors; therefore, we need the xvalue check here.
|
||||
ICS.Standard.DirectBinding =
|
||||
S.getLangOpts().CPlusPlus0x ||
|
||||
S.getLangOpts().CPlusPlus11 ||
|
||||
(InitCategory.isPRValue() && !T2->isRecordType());
|
||||
ICS.Standard.IsLvalueReference = !isRValRef;
|
||||
ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
|
||||
|
@ -4868,7 +4868,7 @@ static bool CheckConvertedConstantConversions(Sema &S,
|
|||
ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
|
||||
llvm::APSInt &Value,
|
||||
CCEKind CCE) {
|
||||
assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11");
|
||||
assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
|
||||
assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
|
||||
|
||||
if (checkPlaceholderForOverload(*this, From))
|
||||
|
@ -7462,7 +7462,7 @@ public:
|
|||
S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
|
||||
}
|
||||
|
||||
if (S.getLangOpts().CPlusPlus0x) {
|
||||
if (S.getLangOpts().CPlusPlus11) {
|
||||
for (BuiltinCandidateTypeSet::iterator
|
||||
Enum = CandidateTypes[ArgIdx].enumeration_begin(),
|
||||
EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
|
||||
|
|
|
@ -314,7 +314,7 @@ Sema::ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
|
|||
return StmtError();
|
||||
}
|
||||
|
||||
if (!getLangOpts().CPlusPlus0x) {
|
||||
if (!getLangOpts().CPlusPlus11) {
|
||||
// C99 6.8.4.2p3: The expression shall be an integer constant.
|
||||
// However, GCC allows any evaluatable integer expression.
|
||||
if (!LHSVal->isTypeDependent() && !LHSVal->isValueDependent()) {
|
||||
|
@ -712,7 +712,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
|
|||
|
||||
llvm::APSInt LoVal;
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// C++11 [stmt.switch]p2: the constant-expression shall be a converted
|
||||
// constant expression of the promoted type of the switch condition.
|
||||
ExprResult ConvLo =
|
||||
|
@ -832,7 +832,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
|
|||
Expr *Hi = CR->getRHS();
|
||||
llvm::APSInt HiVal;
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// C++11 [stmt.switch]p2: the constant-expression shall be a converted
|
||||
// constant expression of the promoted type of the switch condition.
|
||||
ExprResult ConvHi =
|
||||
|
|
|
@ -356,7 +356,7 @@ void Sema::LookupTemplateName(LookupResult &Found,
|
|||
}
|
||||
|
||||
if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope &&
|
||||
!(getLangOpts().CPlusPlus0x && !Found.empty())) {
|
||||
!(getLangOpts().CPlusPlus11 && !Found.empty())) {
|
||||
// C++03 [basic.lookup.classref]p1:
|
||||
// [...] If the lookup in the class of the object expression finds a
|
||||
// template, the name is also looked up in the context of the entire
|
||||
|
@ -1171,7 +1171,7 @@ static bool DiagnoseDefaultTemplateArgument(Sema &S,
|
|||
// template-argument, that declaration shall be a definition and shall be
|
||||
// the only declaration of the function template in the translation unit.
|
||||
// (C++98/03 doesn't have this wording; see DR226).
|
||||
S.Diag(ParamLoc, S.getLangOpts().CPlusPlus0x ?
|
||||
S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_parameter_default_in_function_template
|
||||
: diag::ext_template_parameter_default_in_function_template)
|
||||
<< DefArgRange;
|
||||
|
@ -2359,7 +2359,7 @@ TemplateNameKind Sema::ActOnDependentTemplateName(Scope *S,
|
|||
TemplateTy &Result) {
|
||||
if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())
|
||||
Diag(TemplateKWLoc,
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_outside_of_template :
|
||||
diag::ext_template_outside_of_template)
|
||||
<< FixItHint::CreateRemoval(TemplateKWLoc);
|
||||
|
@ -2972,7 +2972,7 @@ bool Sema::CheckTemplateArgument(NamedDecl *Param,
|
|||
// We have a template template parameter but the template
|
||||
// argument does not refer to a template.
|
||||
Diag(Arg.getLocation(), diag::err_template_arg_must_be_template)
|
||||
<< getLangOpts().CPlusPlus0x;
|
||||
<< getLangOpts().CPlusPlus11;
|
||||
return true;
|
||||
|
||||
case TemplateArgument::Declaration:
|
||||
|
@ -3486,7 +3486,7 @@ bool UnnamedLocalNoLinkageFinder::VisitAtomicType(const AtomicType* T) {
|
|||
bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {
|
||||
if (Tag->getDeclContext()->isFunctionOrMethod()) {
|
||||
S.Diag(SR.getBegin(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_arg_local_type :
|
||||
diag::ext_template_arg_local_type)
|
||||
<< S.Context.getTypeDeclType(Tag) << SR;
|
||||
|
@ -3495,7 +3495,7 @@ bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {
|
|||
|
||||
if (!Tag->getDeclName() && !Tag->getTypedefNameForAnonDecl()) {
|
||||
S.Diag(SR.getBegin(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_arg_unnamed_type :
|
||||
diag::ext_template_arg_unnamed_type) << SR;
|
||||
S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);
|
||||
|
@ -3549,7 +3549,7 @@ bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param,
|
|||
//
|
||||
// C++11 allows these, and even in C++03 we allow them as an extension with
|
||||
// a warning.
|
||||
if (LangOpts.CPlusPlus0x ?
|
||||
if (LangOpts.CPlusPlus11 ?
|
||||
Diags.getDiagnosticLevel(diag::warn_cxx98_compat_template_arg_unnamed_type,
|
||||
SR.getBegin()) != DiagnosticsEngine::Ignored ||
|
||||
Diags.getDiagnosticLevel(diag::warn_cxx98_compat_template_arg_local_type,
|
||||
|
@ -3576,7 +3576,7 @@ isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param,
|
|||
if (Arg->isValueDependent() || Arg->isTypeDependent())
|
||||
return NPV_NotNullPointer;
|
||||
|
||||
if (!S.getLangOpts().CPlusPlus0x)
|
||||
if (!S.getLangOpts().CPlusPlus11)
|
||||
return NPV_NotNullPointer;
|
||||
|
||||
// Determine whether we have a constant expression.
|
||||
|
@ -3704,7 +3704,7 @@ CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S,
|
|||
while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
|
||||
if (!Invalid && !ExtraParens) {
|
||||
S.Diag(Arg->getLocStart(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_arg_extra_parens :
|
||||
diag::ext_template_arg_extra_parens)
|
||||
<< Arg->getSourceRange();
|
||||
|
@ -3794,7 +3794,7 @@ CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S,
|
|||
|
||||
// Address / reference template args must have external linkage in C++98.
|
||||
if (Entity->getLinkage() == InternalLinkage) {
|
||||
S.Diag(Arg->getLocStart(), S.getLangOpts().CPlusPlus0x ?
|
||||
S.Diag(Arg->getLocStart(), S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_arg_object_internal :
|
||||
diag::ext_template_arg_object_internal)
|
||||
<< !Func << Entity << Arg->getSourceRange();
|
||||
|
@ -4010,7 +4010,7 @@ static bool CheckTemplateArgumentPointerToMember(Sema &S,
|
|||
while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
|
||||
if (!Invalid && !ExtraParens) {
|
||||
S.Diag(Arg->getLocStart(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_template_arg_extra_parens :
|
||||
diag::ext_template_arg_extra_parens)
|
||||
<< Arg->getSourceRange();
|
||||
|
@ -4139,7 +4139,7 @@ ExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
return ExprError();
|
||||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus0x) {
|
||||
if (getLangOpts().CPlusPlus11) {
|
||||
// We can't check arbitrary value-dependent arguments.
|
||||
// FIXME: If there's no viable conversion to the template parameter type,
|
||||
// we should be able to diagnose that prior to instantiation.
|
||||
|
@ -4960,11 +4960,11 @@ static bool CheckTemplateSpecializationScope(Sema &S,
|
|||
EntityKind = 4;
|
||||
else if (isa<RecordDecl>(Specialized))
|
||||
EntityKind = 5;
|
||||
else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus0x)
|
||||
else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)
|
||||
EntityKind = 6;
|
||||
else {
|
||||
S.Diag(Loc, diag::err_template_spec_unknown_kind)
|
||||
<< S.getLangOpts().CPlusPlus0x;
|
||||
<< S.getLangOpts().CPlusPlus11;
|
||||
S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
|
||||
return true;
|
||||
}
|
||||
|
@ -5035,17 +5035,17 @@ static bool CheckTemplateSpecializationScope(Sema &S,
|
|||
// An explicit specialization shall be declared in a namespace enclosing
|
||||
// the specialized template.
|
||||
if (!DC->InEnclosingNamespaceSetOf(SpecializedContext)) {
|
||||
bool IsCPlusPlus0xExtension = DC->Encloses(SpecializedContext);
|
||||
bool IsCPlusPlus11Extension = DC->Encloses(SpecializedContext);
|
||||
if (isa<TranslationUnitDecl>(SpecializedContext)) {
|
||||
assert(!IsCPlusPlus0xExtension &&
|
||||
assert(!IsCPlusPlus11Extension &&
|
||||
"DC encloses TU but isn't in enclosing namespace set");
|
||||
S.Diag(Loc, diag::err_template_spec_decl_out_of_scope_global)
|
||||
<< EntityKind << Specialized;
|
||||
} else if (isa<NamespaceDecl>(SpecializedContext)) {
|
||||
int Diag;
|
||||
if (!IsCPlusPlus0xExtension)
|
||||
if (!IsCPlusPlus11Extension)
|
||||
Diag = diag::err_template_spec_decl_out_of_scope;
|
||||
else if (!S.getLangOpts().CPlusPlus0x)
|
||||
else if (!S.getLangOpts().CPlusPlus11)
|
||||
Diag = diag::ext_template_spec_decl_out_of_scope;
|
||||
else
|
||||
Diag = diag::warn_cxx98_compat_template_spec_decl_out_of_scope;
|
||||
|
@ -5055,7 +5055,7 @@ static bool CheckTemplateSpecializationScope(Sema &S,
|
|||
|
||||
S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
|
||||
ComplainedAboutScope =
|
||||
!(IsCPlusPlus0xExtension && S.getLangOpts().CPlusPlus0x);
|
||||
!(IsCPlusPlus11Extension && S.getLangOpts().CPlusPlus11);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5796,7 +5796,7 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
|
|||
// In C++98/03 mode, we only give an extension warning here, because it
|
||||
// is not harmful to try to explicitly instantiate something that
|
||||
// has been explicitly specialized.
|
||||
Diag(NewLoc, getLangOpts().CPlusPlus0x ?
|
||||
Diag(NewLoc, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_explicit_instantiation_after_specialization :
|
||||
diag::ext_explicit_instantiation_after_specialization)
|
||||
<< PrevDecl;
|
||||
|
@ -6250,19 +6250,19 @@ static bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D,
|
|||
if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {
|
||||
if (WasQualifiedName)
|
||||
S.Diag(InstLoc,
|
||||
S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().CPlusPlus11?
|
||||
diag::err_explicit_instantiation_out_of_scope :
|
||||
diag::warn_explicit_instantiation_out_of_scope_0x)
|
||||
<< D << NS;
|
||||
else
|
||||
S.Diag(InstLoc,
|
||||
S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().CPlusPlus11?
|
||||
diag::err_explicit_instantiation_unqualified_wrong_namespace :
|
||||
diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x)
|
||||
<< D << NS;
|
||||
} else
|
||||
S.Diag(InstLoc,
|
||||
S.getLangOpts().CPlusPlus0x?
|
||||
S.getLangOpts().CPlusPlus11?
|
||||
diag::err_explicit_instantiation_must_be_global :
|
||||
diag::warn_explicit_instantiation_must_be_global_0x)
|
||||
<< D;
|
||||
|
@ -6656,7 +6656,7 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S,
|
|||
// well.
|
||||
if (D.getDeclSpec().isInlineSpecified())
|
||||
Diag(D.getDeclSpec().getInlineSpecLoc(),
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::err_explicit_instantiation_inline :
|
||||
diag::warn_explicit_instantiation_inline_0x)
|
||||
<< FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
|
||||
|
@ -6913,7 +6913,7 @@ Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
|
|||
|
||||
if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())
|
||||
Diag(TypenameLoc,
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_typename_outside_of_template :
|
||||
diag::ext_typename_outside_of_template)
|
||||
<< FixItHint::CreateRemoval(TypenameLoc);
|
||||
|
@ -6952,7 +6952,7 @@ Sema::ActOnTypenameType(Scope *S,
|
|||
SourceLocation RAngleLoc) {
|
||||
if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())
|
||||
Diag(TypenameLoc,
|
||||
getLangOpts().CPlusPlus0x ?
|
||||
getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_typename_outside_of_template :
|
||||
diag::ext_typename_outside_of_template)
|
||||
<< FixItHint::CreateRemoval(TypenameLoc);
|
||||
|
|
|
@ -2391,7 +2391,7 @@ Sema::SubstituteExplicitTemplateArguments(
|
|||
}
|
||||
|
||||
CXXThisScopeRAII ThisScope(*this, ThisContext, ThisTypeQuals,
|
||||
getLangOpts().CPlusPlus0x);
|
||||
getLangOpts().CPlusPlus11);
|
||||
|
||||
ResultType = SubstType(Proto->getResultType(),
|
||||
MultiLevelTemplateArgumentList(*ExplicitArgumentList),
|
||||
|
@ -3758,15 +3758,15 @@ static bool isAtLeastAsSpecializedAs(Sema &S,
|
|||
// first argument of the free function, which seems to match
|
||||
// existing practice.
|
||||
SmallVector<QualType, 4> Args1;
|
||||
unsigned Skip1 = !S.getLangOpts().CPlusPlus0x && IsNonStatic2 && !Method1;
|
||||
if (S.getLangOpts().CPlusPlus0x && IsNonStatic1 && !Method2)
|
||||
unsigned Skip1 = !S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !Method1;
|
||||
if (S.getLangOpts().CPlusPlus11 && IsNonStatic1 && !Method2)
|
||||
AddImplicitObjectParameterType(S.Context, Method1, Args1);
|
||||
Args1.insert(Args1.end(),
|
||||
Proto1->arg_type_begin() + Skip1, Proto1->arg_type_end());
|
||||
|
||||
SmallVector<QualType, 4> Args2;
|
||||
Skip2 = !S.getLangOpts().CPlusPlus0x && IsNonStatic1 && !Method2;
|
||||
if (S.getLangOpts().CPlusPlus0x && IsNonStatic2 && !Method1)
|
||||
Skip2 = !S.getLangOpts().CPlusPlus11 && IsNonStatic1 && !Method2;
|
||||
if (S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !Method1)
|
||||
AddImplicitObjectParameterType(S.Context, Method2, Args2);
|
||||
Args2.insert(Args2.end(),
|
||||
Proto2->arg_type_begin() + Skip2, Proto2->arg_type_end());
|
||||
|
@ -3835,7 +3835,7 @@ static bool isAtLeastAsSpecializedAs(Sema &S,
|
|||
unsigned NumParams = std::min(NumCallArguments,
|
||||
std::min(Proto1->getNumArgs(),
|
||||
Proto2->getNumArgs()));
|
||||
if (S.getLangOpts().CPlusPlus0x && IsNonStatic2 && !IsNonStatic1)
|
||||
if (S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !IsNonStatic1)
|
||||
::MarkUsedTemplateParameters(S.Context, Method2->getThisType(S.Context),
|
||||
false,
|
||||
TemplateParams->getDepth(), UsedParameters);
|
||||
|
|
|
@ -1287,7 +1287,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
|
|||
//
|
||||
// If -Wc++98-compat is enabled, we go through the motions of checking for a
|
||||
// redefinition, but don't instantiate the function.
|
||||
if ((!SemaRef.getLangOpts().CPlusPlus0x ||
|
||||
if ((!SemaRef.getLangOpts().CPlusPlus11 ||
|
||||
SemaRef.Diags.getDiagnosticLevel(
|
||||
diag::warn_cxx98_compat_friend_redefinition,
|
||||
Function->getLocation())
|
||||
|
@ -1298,11 +1298,11 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
|
|||
if (Function->isDefined(Definition) &&
|
||||
Definition->getTemplateSpecializationKind() == TSK_Undeclared) {
|
||||
SemaRef.Diag(Function->getLocation(),
|
||||
SemaRef.getLangOpts().CPlusPlus0x ?
|
||||
SemaRef.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_friend_redefinition :
|
||||
diag::err_redefinition) << Function->getDeclName();
|
||||
SemaRef.Diag(Definition->getLocation(), diag::note_previous_definition);
|
||||
if (!SemaRef.getLangOpts().CPlusPlus0x)
|
||||
if (!SemaRef.getLangOpts().CPlusPlus11)
|
||||
Function->setInvalidDecl();
|
||||
}
|
||||
// Check for redefinitions due to other instantiations of this or
|
||||
|
@ -1314,7 +1314,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
|
|||
continue;
|
||||
switch (R->getFriendObjectKind()) {
|
||||
case Decl::FOK_None:
|
||||
if (!SemaRef.getLangOpts().CPlusPlus0x &&
|
||||
if (!SemaRef.getLangOpts().CPlusPlus11 &&
|
||||
!queuedInstantiation && R->isUsed(false)) {
|
||||
if (MemberSpecializationInfo *MSInfo
|
||||
= Function->getMemberSpecializationInfo()) {
|
||||
|
@ -1333,12 +1333,12 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
|
|||
= R->getTemplateInstantiationPattern())
|
||||
if (RPattern->isDefined(RPattern)) {
|
||||
SemaRef.Diag(Function->getLocation(),
|
||||
SemaRef.getLangOpts().CPlusPlus0x ?
|
||||
SemaRef.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_friend_redefinition :
|
||||
diag::err_redefinition)
|
||||
<< Function->getDeclName();
|
||||
SemaRef.Diag(R->getLocation(), diag::note_previous_definition);
|
||||
if (!SemaRef.getLangOpts().CPlusPlus0x)
|
||||
if (!SemaRef.getLangOpts().CPlusPlus11)
|
||||
Function->setInvalidDecl();
|
||||
break;
|
||||
}
|
||||
|
@ -2427,7 +2427,7 @@ static void InstantiateExceptionSpec(Sema &SemaRef, FunctionDecl *New,
|
|||
ThisTypeQuals = Method->getTypeQualifiers();
|
||||
}
|
||||
Sema::CXXThisScopeRAII ThisScope(SemaRef, ThisContext, ThisTypeQuals,
|
||||
SemaRef.getLangOpts().CPlusPlus0x);
|
||||
SemaRef.getLangOpts().CPlusPlus11);
|
||||
|
||||
// The function has an exception specification or a "noreturn"
|
||||
// attribute. Substitute into each of the exception types.
|
||||
|
@ -2615,7 +2615,7 @@ TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
|
|||
|
||||
// DR1330: In C++11, defer instantiation of a non-trivial
|
||||
// exception specification.
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x &&
|
||||
if (SemaRef.getLangOpts().CPlusPlus11 &&
|
||||
EPI.ExceptionSpecType != EST_None &&
|
||||
EPI.ExceptionSpecType != EST_DynamicNone &&
|
||||
EPI.ExceptionSpecType != EST_BasicNoexcept) {
|
||||
|
|
|
@ -713,7 +713,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
|
|||
if (!S.getLangOpts().C99) {
|
||||
if (S.getLangOpts().CPlusPlus)
|
||||
S.Diag(DS.getTypeSpecWidthLoc(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);
|
||||
else
|
||||
S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);
|
||||
|
@ -732,7 +732,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
|
|||
if (!S.getLangOpts().C99) {
|
||||
if (S.getLangOpts().CPlusPlus)
|
||||
S.Diag(DS.getTypeSpecWidthLoc(),
|
||||
S.getLangOpts().CPlusPlus0x ?
|
||||
S.getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);
|
||||
else
|
||||
S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);
|
||||
|
@ -1365,7 +1365,7 @@ QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
|
|||
|
||||
// C99 6.7.5.2p1: The size expression shall have integer type.
|
||||
// C++11 allows contextual conversions to such types.
|
||||
if (!getLangOpts().CPlusPlus0x &&
|
||||
if (!getLangOpts().CPlusPlus11 &&
|
||||
ArraySize && !ArraySize->isTypeDependent() &&
|
||||
!ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {
|
||||
Diag(ArraySize->getLocStart(), diag::err_array_size_non_int)
|
||||
|
@ -1386,7 +1386,7 @@ QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
|
|||
isArraySizeVLA(*this, ArraySize, ConstVal)) {
|
||||
// Even in C++11, don't allow contextual conversions in the array bound
|
||||
// of a VLA.
|
||||
if (getLangOpts().CPlusPlus0x &&
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
!ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {
|
||||
Diag(ArraySize->getLocStart(), diag::err_array_size_non_int)
|
||||
<< ArraySize->getType() << ArraySize->getSourceRange();
|
||||
|
@ -1878,7 +1878,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state,
|
|||
// type (this is checked later) and we can skip this. In other languages
|
||||
// using auto, we need to check regardless.
|
||||
if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
|
||||
(!SemaRef.getLangOpts().CPlusPlus0x || !D.isFunctionDeclarator())) {
|
||||
(!SemaRef.getLangOpts().CPlusPlus11 || !D.isFunctionDeclarator())) {
|
||||
int Error = -1;
|
||||
|
||||
switch (D.getContext()) {
|
||||
|
@ -1944,7 +1944,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state,
|
|||
// contains a trailing return type. That is only legal at the outermost
|
||||
// level. Check all declarator chunks (outermost first) anyway, to give
|
||||
// better diagnostics.
|
||||
if (SemaRef.getLangOpts().CPlusPlus0x && Error != -1) {
|
||||
if (SemaRef.getLangOpts().CPlusPlus11 && Error != -1) {
|
||||
for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
|
||||
unsigned chunkIndex = e - i - 1;
|
||||
state.setCurrentChunkIndex(chunkIndex);
|
||||
|
@ -2177,7 +2177,7 @@ static void warnAboutAmbiguousFunction(Sema &S, Declarator &D,
|
|||
<< FixItHint::CreateRemoval(ParenRange);
|
||||
else {
|
||||
std::string Init = S.getFixItZeroInitializerForType(RT);
|
||||
if (Init.empty() && S.LangOpts.CPlusPlus0x)
|
||||
if (Init.empty() && S.LangOpts.CPlusPlus11)
|
||||
Init = "{}";
|
||||
if (!Init.empty())
|
||||
S.Diag(DeclType.Loc, diag::note_empty_parens_zero_initialize)
|
||||
|
@ -2826,7 +2826,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
|
|||
T = Context.getPackExpansionType(T, llvm::Optional<unsigned>());
|
||||
else
|
||||
S.Diag(D.getEllipsisLoc(),
|
||||
LangOpts.CPlusPlus0x
|
||||
LangOpts.CPlusPlus11
|
||||
? diag::warn_cxx98_compat_variadic_templates
|
||||
: diag::ext_variadic_templates);
|
||||
break;
|
||||
|
|
|
@ -2804,7 +2804,7 @@ TreeTransform<Derived>::TransformNestedNameSpecifierLoc(
|
|||
return NestedNameSpecifierLoc();
|
||||
|
||||
if (TL.getType()->isDependentType() || TL.getType()->isRecordType() ||
|
||||
(SemaRef.getLangOpts().CPlusPlus0x &&
|
||||
(SemaRef.getLangOpts().CPlusPlus11 &&
|
||||
TL.getType()->isEnumeralType())) {
|
||||
assert(!TL.getType().hasLocalQualifiers() &&
|
||||
"Can't get cv-qualifiers here");
|
||||
|
|
Loading…
Reference in New Issue