[llvm-branch-commits] [cfe-branch] r155582 - in /cfe/branches/release_31: ./ lib/Sema/SemaTemplate.cpp test/SemaCXX/warn-unreachable.cpp test/SemaTemplate/dependent-names.cpp
Bill Wendling
isanbard at gmail.com
Wed Apr 25 13:21:37 PDT 2012
Author: void
Date: Wed Apr 25 15:21:37 2012
New Revision: 155582
URL: http://llvm.org/viewvc/llvm-project?rev=155582&view=rev
Log:
Merging r155576:
------------------------------------------------------------------------
r155576 | akirtzidis | 2012-04-25 11:39:17 -0700 (Wed, 25 Apr 2012) | 4 lines
When resolving default template arguments, it should be done in the declaration context
of the template what we are going to instantiate.
Fixes various crashes of rdar://11242625 & http://llvm.org/PR11421.
------------------------------------------------------------------------
Modified:
cfe/branches/release_31/ (props changed)
cfe/branches/release_31/lib/Sema/SemaTemplate.cpp
cfe/branches/release_31/test/SemaCXX/warn-unreachable.cpp (props changed)
cfe/branches/release_31/test/SemaTemplate/dependent-names.cpp
Propchange: cfe/branches/release_31/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 25 15:21:37 2012
@@ -1,3 +1,3 @@
/cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:155076,155279,155342,155534-155535
+/cfe/trunk:155076,155279,155342,155534-155535,155576
/cfe/trunk/test/SemaTemplate:126920
Modified: cfe/branches/release_31/lib/Sema/SemaTemplate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_31/lib/Sema/SemaTemplate.cpp?rev=155582&r1=155581&r2=155582&view=diff
==============================================================================
--- cfe/branches/release_31/lib/Sema/SemaTemplate.cpp (original)
+++ cfe/branches/release_31/lib/Sema/SemaTemplate.cpp Wed Apr 25 15:21:37 2012
@@ -2496,6 +2496,7 @@
Converted.size(),
SourceRange(TemplateLoc, RAngleLoc));
+ Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
ArgType = SemaRef.SubstType(ArgType, AllTemplateArgs,
Param->getDefaultArgumentLoc(),
Param->getDeclName());
@@ -2544,6 +2545,7 @@
Converted.size(),
SourceRange(TemplateLoc, RAngleLoc));
+ Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
return SemaRef.SubstExpr(Param->getDefaultArgument(), AllTemplateArgs);
}
@@ -2591,6 +2593,7 @@
Converted.size(),
SourceRange(TemplateLoc, RAngleLoc));
+ Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
// Substitute into the nested-name-specifier first,
QualifierLoc = Param->getDefaultArgument().getTemplateQualifierLoc();
if (QualifierLoc) {
Propchange: cfe/branches/release_31/test/SemaCXX/warn-unreachable.cpp
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 25 15:21:37 2012
@@ -1,2 +1,2 @@
/cfe/branches/type-system-rewrite/test/SemaCXX/warn-unreachable.cpp:134693-134817
-/cfe/trunk/test/SemaCXX/warn-unreachable.cpp:121961,155076,155279,155342,155534-155535
+/cfe/trunk/test/SemaCXX/warn-unreachable.cpp:121961,155076,155279,155342,155534-155535,155576
Modified: cfe/branches/release_31/test/SemaTemplate/dependent-names.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_31/test/SemaTemplate/dependent-names.cpp?rev=155582&r1=155581&r2=155582&view=diff
==============================================================================
--- cfe/branches/release_31/test/SemaTemplate/dependent-names.cpp (original)
+++ cfe/branches/release_31/test/SemaTemplate/dependent-names.cpp Wed Apr 25 15:21:37 2012
@@ -292,3 +292,35 @@
template void f<S>(); // expected-note {{here}}
}
}
+
+namespace rdar11242625 {
+
+template <typename T>
+struct Main {
+ struct default_names {
+ typedef int id;
+ };
+
+ template <typename T2 = typename default_names::id>
+ struct TS {
+ T2 q;
+ };
+};
+
+struct Sub : public Main<int> {
+ TS<> ff;
+};
+
+int arr[sizeof(Sub)];
+
+}
+
+namespace PR11421 {
+template < unsigned > struct X {
+ static const unsigned dimension = 3;
+ template<unsigned dim=dimension>
+ struct Y: Y<dim> { }; // expected-error {{incomplete type}} expected-note {{is not complete until the closing}}
+};
+typedef X<3> X3;
+X3::Y<>::iterator it; // expected-note {{requested here}}
+}
More information about the llvm-branch-commits
mailing list