summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-04-01 02:03:23 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-04-01 02:03:23 +0000
commit3d7e3daaa6ab3ed264cd0a602daf987d3ed7845c (patch)
treed0eac964b7ce2a887b917d84dea30498be9f1109 /clang/lib/Sema
parentdb6ed645297af623104ffee6f7d7268b6b1c6f1d (diff)
downloadbcm5719-llvm-3d7e3daaa6ab3ed264cd0a602daf987d3ed7845c.tar.gz
bcm5719-llvm-3d7e3daaa6ab3ed264cd0a602daf987d3ed7845c.zip
Fix an error in TreeTransform where we failed to copy the TemplateName's
location into a TemplateSpecializationTypeLoc. These were found using a hand-written program to inspect every source location in TemplateSpecializationTypeLocs and Valgrind. I don't know of any way to test them in Clang's existing test suite sadly. Example code that triggers the ElaboratedType case: template <typename T> struct X1 { template <typename U> struct X1_1 { int x; }; }; template <typename T, typename U> struct X2 { typename X1<T>::template X1_1<U> B; }; X2<char, int> x2; The other fix was simply spotted by inspection. I audited all constructions of [Dependent]TemplateSpecializationTypeLocs in TreeTransform.h, and the rest set the TemplateNameLoc properly. llvm-svn: 128702
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/TreeTransform.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index bd28991e4bb..74e918bf86f 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -4521,6 +4521,7 @@ TransformDependentTemplateSpecializationType(TypeLocBuilder &TLB,
// Copy information relevant to the template specialization.
TemplateSpecializationTypeLoc NamedTL
= TLB.push<TemplateSpecializationTypeLoc>(NamedT);
+ NamedTL.setTemplateNameLoc(TL.getNameLoc());
NamedTL.setLAngleLoc(TL.getLAngleLoc());
NamedTL.setRAngleLoc(TL.getRAngleLoc());
for (unsigned I = 0, E = NewTemplateArgs.size(); I != E; ++I)
@@ -4535,14 +4536,15 @@ TransformDependentTemplateSpecializationType(TypeLocBuilder &TLB,
= TLB.push<DependentTemplateSpecializationTypeLoc>(Result);
SpecTL.setKeywordLoc(TL.getKeywordLoc());
SpecTL.setQualifierLoc(QualifierLoc);
+ SpecTL.setNameLoc(TL.getNameLoc());
SpecTL.setLAngleLoc(TL.getLAngleLoc());
SpecTL.setRAngleLoc(TL.getRAngleLoc());
- SpecTL.setNameLoc(TL.getNameLoc());
for (unsigned I = 0, E = NewTemplateArgs.size(); I != E; ++I)
SpecTL.setArgLocInfo(I, NewTemplateArgs[I].getLocInfo());
} else {
TemplateSpecializationTypeLoc SpecTL
= TLB.push<TemplateSpecializationTypeLoc>(Result);
+ SpecTL.setTemplateNameLoc(TL.getNameLoc());
SpecTL.setLAngleLoc(TL.getLAngleLoc());
SpecTL.setRAngleLoc(TL.getRAngleLoc());
for (unsigned I = 0, E = NewTemplateArgs.size(); I != E; ++I)
OpenPOWER on IntegriCloud