diff options
| author | Nick Lewycky <nicholas@mxc.ca> | 2010-07-26 16:56:01 +0000 | 
|---|---|---|
| committer | Nick Lewycky <nicholas@mxc.ca> | 2010-07-26 16:56:01 +0000 | 
| commit | 19b9f958e120186534c7a4967f0564e583ebb8ee (patch) | |
| tree | ae04196e641bfebb9e1653e42c50e657f0cf2773 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | d6009ffb8e6343b1446cf032adf6504928f081c7 (diff) | |
| download | bcm5719-llvm-19b9f958e120186534c7a4967f0564e583ebb8ee.tar.gz bcm5719-llvm-19b9f958e120186534c7a4967f0564e583ebb8ee.zip | |
Add source location information to C++ base specifiers.
llvm-svn: 109396
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 21 | 
1 files changed, 12 insertions, 9 deletions
| diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index d732746530f..34b0d96c087 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -447,8 +447,9 @@ CXXBaseSpecifier *  Sema::CheckBaseSpecifier(CXXRecordDecl *Class,                           SourceRange SpecifierRange,                           bool Virtual, AccessSpecifier Access, -                         QualType BaseType, -                         SourceLocation BaseLoc) { +                         TypeSourceInfo *TInfo) { +  QualType BaseType = TInfo->getType(); +    // C++ [class.union]p1:    //   A union shall not have base classes.    if (Class->isUnion()) { @@ -459,8 +460,10 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class,    if (BaseType->isDependentType())      return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual, -                                Class->getTagKind() == TTK_Class, -                                Access, BaseType); +                                          Class->getTagKind() == TTK_Class, +                                          Access, TInfo); + +  SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();    // Base specifiers must be record types.    if (!BaseType->isRecordType()) { @@ -503,8 +506,8 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class,    // Create the base specifier.    return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual, -                              Class->getTagKind() == TTK_Class, -                              Access, BaseType); +                                        Class->getTagKind() == TTK_Class, +                                        Access, TInfo);  }  void Sema::SetClassDeclAttributesFromBase(CXXRecordDecl *Class, @@ -591,10 +594,10 @@ Sema::ActOnBaseSpecifier(DeclPtrTy classdecl, SourceRange SpecifierRange,    if (!Class)      return true; -  QualType BaseType = GetTypeFromParser(basetype); +  TypeSourceInfo *TInfo = 0; +  GetTypeFromParser(basetype, &TInfo);    if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange, -                                                      Virtual, Access, -                                                      BaseType, BaseLoc)) +                                                      Virtual, Access, TInfo))      return BaseSpec;    return true; | 

