diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-06-17 16:03:49 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-06-17 16:03:49 +0000 |
| commit | ffa20398a6c0c04a24133fdd7ef0a5bb6475a8e8 (patch) | |
| tree | 0e620e6df15dea11ee201ffd0645578b0ecb0a73 /clang | |
| parent | 630dec57a2af38cd240b5b124704501df8bb9d64 (diff) | |
| download | bcm5719-llvm-ffa20398a6c0c04a24133fdd7ef0a5bb6475a8e8.tar.gz bcm5719-llvm-ffa20398a6c0c04a24133fdd7ef0a5bb6475a8e8.zip | |
When pushing a copy of the TypeLoc information for a dependent
template specialization type, copy the location information but use
the new type. Fixes PR7385.
llvm-svn: 106224
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 3 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/nested-name-spec-template.cpp | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index d2995778fc6..910aadbdc83 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -3387,7 +3387,8 @@ QualType TreeTransform<Derived>:: NewTL.setKeywordLoc(TL.getKeywordLoc()); NewTL.setQualifierRange(TL.getQualifierRange()); } else { - TLB.pushFullCopy(TL); + TypeLoc NewTL(Result, TL.getOpaqueData()); + TLB.pushFullCopy(NewTL); } return Result; } diff --git a/clang/test/SemaTemplate/nested-name-spec-template.cpp b/clang/test/SemaTemplate/nested-name-spec-template.cpp index e1e7246bd7e..12ab4868091 100644 --- a/clang/test/SemaTemplate/nested-name-spec-template.cpp +++ b/clang/test/SemaTemplate/nested-name-spec-template.cpp @@ -72,3 +72,19 @@ namespace N1 { } template<typename T> T N1::f0() { } + +namespace PR7385 { + template< typename > struct has_xxx0 + { + template< typename > struct has_xxx0_introspect + { + template< typename > struct has_xxx0_substitute ; + template< typename V > + int int00( has_xxx0_substitute < typename V::template xxx< > > = 0 ); + }; + static const int value = has_xxx0_introspect<int>::value; // expected-error{{no member named 'value'}} + typedef int type; + }; + + has_xxx0<int>::type t; // expected-note{{instantiation of}} +} |

