diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-08-19 01:28:28 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-08-19 01:28:28 +0000 |
| commit | c7148c974d79a6a6b449add3d757bac60d34d934 (patch) | |
| tree | a4045dadee6a523fabff1e516fb3a1f866bdd585 /clang/lib/Sema/SemaExprCXX.cpp | |
| parent | e918926d314f0c1dc2ee8c557ea7a8d4b4193220 (diff) | |
| download | bcm5719-llvm-c7148c974d79a6a6b449add3d757bac60d34d934.tar.gz bcm5719-llvm-c7148c974d79a6a6b449add3d757bac60d34d934.zip | |
Use Sema's LocInfoType to pass and preserve type source info through the Parser.
llvm-svn: 79395
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 2705d9900b4..7c3f7ecaabd 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -31,7 +31,8 @@ Sema::ActOnCXXConversionFunctionExpr(Scope *S, SourceLocation OperatorLoc, TypeTy *Ty, bool HasTrailingLParen, const CXXScopeSpec &SS, bool isAddressOfOperand) { - QualType ConvType = QualType::getFromOpaquePtr(Ty); + //FIXME: Preserve type source info. + QualType ConvType = GetTypeFromParser(Ty); CanQualType ConvTypeCanon = Context.getCanonicalType(ConvType); DeclarationName ConvName = Context.DeclarationNames.getCXXConversionFunctionName(ConvTypeCanon); @@ -62,7 +63,11 @@ Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, NamespaceDecl *StdNs = GetStdNamespace(); if (!StdNs) return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid)); - + + if (isType) + // FIXME: Preserve type source info. + TyOrExpr = GetTypeFromParser(TyOrExpr).getAsOpaquePtr(); + IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info"); Decl *TypeInfoDecl = LookupQualifiedName(StdNs, TypeInfoII, LookupTagName); RecordDecl *TypeInfoRecordDecl = dyn_cast_or_null<RecordDecl>(TypeInfoDecl); @@ -179,7 +184,8 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep, SourceLocation *CommaLocs, SourceLocation RParenLoc) { assert(TypeRep && "Missing type!"); - QualType Ty = QualType::getFromOpaquePtr(TypeRep); + // FIXME: Preserve type source info. + QualType Ty = GetTypeFromParser(TypeRep); unsigned NumExprs = exprs.size(); Expr **Exprs = (Expr**)exprs.get(); SourceLocation TyBeginLoc = TypeRange.getBegin(); @@ -1051,7 +1057,7 @@ Sema::OwningExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait OTT, SourceLocation LParen, TypeTy *Ty, SourceLocation RParen) { - QualType T = QualType::getFromOpaquePtr(Ty); + QualType T = GetTypeFromParser(Ty); // According to http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html // all traits except __is_class, __is_enum and __is_union require a the type |

