llvm-project/clang
Douglas Gregor fd7c225530 Make sure to put template parameters into their owning template's
DeclContext once we've created it. This mirrors what we do for
function parameters, where the parameters start out with
translation-unit context and then are adopted by the appropriate
DeclContext when it is created. Also give template parameters public
access and make sure that they don't show up for the purposes of name
lookup.

Fixes PR9400, a regression introduced by r126920, which implemented
substitution of default template arguments provided in template
template parameters (C++ core issue 150).

How on earth could the DeclContext of a template parameter affect the
handling of default template arguments?

I'm so glad you asked! The link is
Sema::getTemplateInstantiationArgs(), which determines the outer
template argument lists that correspond to a given declaration. When
we're instantiating a default template argument for a template
template parameter within the body of a template definition (not it's
instantiation, per core issue 150), we weren't getting any outer
template arguments because the context of the template template
parameter was the translation unit. Now that the context of the
template template parameter is its owning template, we get the
template arguments from the injected-class-name of the owning
template, so substitution works as it should.

llvm-svn: 127004
2011-03-04 17:52:15 +00:00
..
INPUTS
bindings/python python bindings: Add support for different kind of completion chunks 2011-02-05 17:54:10 +00:00
clang.xcodeproj In the clang.xcodeproj modify the 'clang' target to do nothing, not try to build anything. 2011-02-23 00:15:56 +00:00
docs Rename tok::eom to tok::eod. 2011-02-28 02:37:51 +00:00
examples [analyzer] Add LangOptions in CheckerManager. 2011-02-23 07:19:14 +00:00
include Make sure to put template parameters into their owning template's 2011-03-04 17:52:15 +00:00
lib Make sure to put template parameters into their owning template's 2011-03-04 17:52:15 +00:00
runtime build/compiler-rt: Fake Clang into using the right assembler to build the ARM 2011-02-11 01:29:49 +00:00
test Make sure to put template parameters into their owning template's 2011-03-04 17:52:15 +00:00
tools Fix the source range for a member access expression that includes a 2011-03-02 21:06:53 +00:00
unittests Put targets on folders, if the IDE supports the feature. 2011-02-20 22:06:44 +00:00
utils Minor fix for clang-completion-mode, from Dve Abrahams 2010-12-14 16:52:29 +00:00
www Update the www to indicate that auto is now implemented. 2011-02-23 00:41:16 +00:00
CMakeLists.txt CMake: [PR9321] Don't install include/clang/**/*.td. 2011-02-28 05:21:27 +00:00
INSTALL.txt
LICENSE.TXT
Makefile Add gTest unittests to clang, and write the first one. 2011-02-03 04:51:52 +00:00
ModuleInfo.txt
NOTES.txt A Release-Asserts build is now called a Release build. 2010-07-07 07:49:17 +00:00
README.txt Fix typo (test commit) 2010-06-17 12:39:05 +00:00
TODO.txt Test commit; added blank line to TODO.txt 2011-01-04 19:19:20 +00:00

README.txt

//===----------------------------------------------------------------------===//
// C Language Family Front-end
//===----------------------------------------------------------------------===//

Welcome to Clang.  This is a compiler front-end for the C family of languages
(C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM
compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things
beyond just compiling code: we intend for Clang to be host to a number of
different source level tools.  One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read
the relevant web sites.  Here are some pointers:

Information on Clang:              http://clang.llvm.org/
Building and using Clang:          http://clang.llvm.org/get_started.html
Clang Static Analyzer:             http://clang-analyzer.llvm.org/
Information on the LLVM project:   http://llvm.org/

If you have questions or comments about Clang, a great place to discuss them is
on the Clang development mailing list:
  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

If you find a bug in Clang, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/