[cfe-commits] r140456 - in /cfe/trunk: include/clang/Sema/Initialization.h lib/Sema/SemaInit.cpp
Sebastian Redl
sebastian.redl at getdesigned.at
Sat Sep 24 10:47:52 PDT 2011
Author: cornedbee
Date: Sat Sep 24 12:47:52 2011
New Revision: 140456
URL: http://llvm.org/viewvc/llvm-project?rev=140456&view=rev
Log:
In Initialization, add step kind SK_ListConstructorCall (list-initialization
resolves to a constructor call in C++11) and failure kind
FK_ListInitializationFailed (early InitListChecker run failed).
Modified:
cfe/trunk/include/clang/Sema/Initialization.h
cfe/trunk/lib/Sema/SemaInit.cpp
Modified: cfe/trunk/include/clang/Sema/Initialization.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Initialization.h?rev=140456&r1=140455&r2=140456&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/Initialization.h (original)
+++ cfe/trunk/include/clang/Sema/Initialization.h Sat Sep 24 12:47:52 2011
@@ -526,8 +526,10 @@
SK_QualificationConversionLValue,
/// \brief Perform an implicit conversion sequence.
SK_ConversionSequence,
- /// \brief Perform list-initialization
+ /// \brief Perform list-initialization without a constructor
SK_ListInitialization,
+ /// \brief Perform list-initialization with a constructor.
+ SK_ListConstructorCall,
/// \brief Perform initialization via a constructor.
SK_ConstructorInitialization,
/// \brief Zero-initialize the object
@@ -563,6 +565,8 @@
/// \brief When Kind == SK_ResolvedOverloadedFunction or Kind ==
/// SK_UserConversion, the function that the expression should be
/// resolved to or the conversion function to call, respectively.
+ /// When Kind == SK_ConstructorInitialization or SK_ListConstruction,
+ /// the constructor to be called.
///
/// Always a FunctionDecl.
/// For conversion decls, the naming class is the source type.
@@ -571,12 +575,12 @@
FunctionDecl *Function;
DeclAccessPair FoundDecl;
} Function;
-
+
/// \brief When Kind = SK_ConversionSequence, the implicit conversion
/// sequence
ImplicitConversionSequence *ICS;
};
-
+
void Destroy();
};
@@ -634,7 +638,9 @@
/// \brief Default-initialization of a 'const' object.
FK_DefaultInitOfConst,
/// \brief Initialization of an incomplete type.
- FK_Incomplete
+ FK_Incomplete,
+ /// \brief List initialization failed at some point.
+ FK_ListInitializationFailed
};
private:
Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=140456&r1=140455&r2=140456&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Sat Sep 24 12:47:52 2011
@@ -2216,6 +2216,7 @@
case SK_QualificationConversionXValue:
case SK_QualificationConversionLValue:
case SK_ListInitialization:
+ case SK_ListConstructorCall:
case SK_ConstructorInitialization:
case SK_ZeroInitialization:
case SK_CAssignment:
@@ -2259,6 +2260,7 @@
case FK_Incomplete:
case FK_ArrayTypeMismatch:
case FK_NonConstantArrayInit:
+ case FK_ListInitializationFailed:
return false;
case FK_ReferenceInitOverloadFailed:
@@ -4232,6 +4234,7 @@
case SK_QualificationConversionXValue:
case SK_QualificationConversionRValue:
case SK_ConversionSequence:
+ case SK_ListConstructorCall:
case SK_ListInitialization:
case SK_CAssignment:
case SK_StringInit:
@@ -4511,6 +4514,9 @@
break;
}
+ case SK_ListConstructorCall:
+ assert(false && "List constructor calls not yet supported.");
+
case SK_ConstructorInitialization: {
unsigned NumArgs = Args.size();
CXXConstructorDecl *Constructor
@@ -5011,10 +5017,13 @@
}
break;
- case FK_Incomplete:
- S.RequireCompleteType(Kind.getLocation(), DestType,
- diag::err_init_incomplete_type);
- break;
+ case FK_Incomplete:
+ S.RequireCompleteType(Kind.getLocation(), DestType,
+ diag::err_init_incomplete_type);
+ break;
+
+ case FK_ListInitializationFailed:
+ assert(false && "Failed list initialization not yet handled.");
}
PrintInitLocationNote(S, Entity);
@@ -5109,6 +5118,9 @@
case FK_Incomplete:
OS << "initialization of incomplete type";
break;
+
+ case FK_ListInitializationFailed:
+ OS << "list initialization failed";
}
OS << '\n';
return;
@@ -5178,7 +5190,11 @@
break;
case SK_ListInitialization:
- OS << "list initialization";
+ OS << "list aggregate initialization";
+ break;
+
+ case SK_ListConstructorCall:
+ OS << "list initialization via constructor";
break;
case SK_ConstructorInitialization:
More information about the cfe-commits
mailing list