llvm-project/clang
Nico Weber c097337493 Always build a new TypeSourceInfo for function templates with parameters
RecursiveASTVisitor::TraverseFunctionHelper() traverses a function's
ParmVarDecls by going to the function's getTypeSourceInfo if it exists, and
`DEF_TRAVERSE_TYPELOC(FunctionProtoType` then goes to the function's
ParmVarDecls.

For a function template that doesn't have parameters that explicitly depend on
the template parameter, we used to be clever and not build a new
TypeSourceInfo. That meant that when an instantiation of such a template is
visited, its TypeSourceInfo would point to the ParmVarDecls of the template,
not of the instantiation, which then confused clients of RecursiveASTVisitor.

So don't be clever for function templates that have parameters, even if none of
the parameters depend on the type.

Fixes PR26257.
http://reviews.llvm.org/D16478

llvm-svn: 259428
2016-02-01 22:31:51 +00:00
..
INPUTS
bindings libclang: expose dllexport, dllimport attributes 2015-12-10 18:45:18 +00:00
cmake [CMake] Support a simple case for bootstrap builds to generate PGO data 2016-01-05 23:51:42 +00:00
docs docs: Clarify that cfi-unrelated-cast is based on lifetime. 2016-02-01 18:55:50 +00:00
examples Remove autoconf support 2016-01-26 21:30:40 +00:00
include Undoing commit r259366 to debug buildbot failure. 2016-02-01 22:02:05 +00:00
lib Always build a new TypeSourceInfo for function templates with parameters 2016-02-01 22:31:51 +00:00
runtime Remove autoconf support 2016-01-26 21:30:40 +00:00
test Undoing commit r259366 to debug buildbot failure. 2016-02-01 22:02:05 +00:00
tools Class Property: class property and instance property can have the same name. 2016-01-28 18:49:28 +00:00
unittests Always build a new TypeSourceInfo for function templates with parameters 2016-02-01 22:31:51 +00:00
utils No need to use utostr when putting integers into a raw_ostream. NFC 2016-01-31 00:20:26 +00:00
www Mark DR1250 as implemented 2016-02-01 01:33:17 +00:00
.arcconfig Revert r242365. 2015-07-16 00:32:26 +00:00
.clang-format
.clang-tidy
.gitignore Add the clang debug info test directory to .gitignore as it's managed separately. 2016-01-29 01:35:55 +00:00
CMakeLists.txt [CMake] Don't apply Export set to clang tools 2016-01-19 23:01:38 +00:00
CODE_OWNERS.TXT Remove references to autotools build. 2016-01-30 00:54:42 +00:00
INSTALL.txt Honor system specific paths of MAN pages 2015-11-20 18:49:02 +00:00
LICENSE.TXT
ModuleInfo.txt
NOTES.txt
README.txt Update mailing list references to lists.llvm.org 2015-08-05 03:55:23 +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.llvm.org/mailman/listinfo/cfe-dev

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