diff options
| author | Douglas Gregor <dgregor@apple.com> | 2008-12-05 18:15:24 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2008-12-05 18:15:24 +0000 | 
| commit | 5101c24f60997b3775624f5c9488ded8e9f3cdf2 (patch) | |
| tree | 2807802cd135f700026aa90f8d842508b2630d5a /clang/lib/Sema/SemaDeclObjC.cpp | |
| parent | 43c08918389ca2f928a94a4f2a5faa256a10e8e4 (diff) | |
| download | bcm5719-llvm-5101c24f60997b3775624f5c9488ded8e9f3cdf2.tar.gz bcm5719-llvm-5101c24f60997b3775624f5c9488ded8e9f3cdf2.zip | |
Representation of template type parameters and non-type template
parameters, with some semantic analysis:
  - Template parameters are introduced into template parameter scope
  - Complain about template parameter shadowing (except in Microsoft mode)
Note that we leak template parameter declarations like crazy, a
problem we'll remedy once we actually create proper declarations for
templates. 
Next up: dependent types and value-dependent/type-dependent
expressions.
llvm-svn: 60597
Diffstat (limited to 'clang/lib/Sema/SemaDeclObjC.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 9da662e4766..01a453d3be6 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -66,6 +66,13 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc,    // Check for another declaration kind with the same name.    Decl *PrevDecl = LookupDecl(ClassName, Decl::IDNS_Ordinary, TUScope); +  if (PrevDecl && isTemplateParameterDecl(PrevDecl)) { +    // Maybe we will complain about the shadowed template parameter. +    DiagnoseTemplateParameterShadow(ClassLoc, PrevDecl); +    // Just pretend that we didn't see the previous declaration. +    PrevDecl = 0; +  } +    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {      Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;      Diag(PrevDecl->getLocation(), diag::note_previous_definition); @@ -742,6 +749,13 @@ Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc,    for (unsigned i = 0; i != NumElts; ++i) {      // Check for another declaration kind with the same name.      Decl *PrevDecl = LookupDecl(IdentList[i], Decl::IDNS_Ordinary, TUScope); +    if (PrevDecl && isTemplateParameterDecl(PrevDecl)) { +      // Maybe we will complain about the shadowed template parameter. +      DiagnoseTemplateParameterShadow(AtClassLoc, PrevDecl); +      // Just pretend that we didn't see the previous declaration. +      PrevDecl = 0; +    } +      if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {        // GCC apparently allows the following idiom:        // | 

