================
Comment at: lib/Sema/SemaTemplateInstantiate.cpp:951
@@ +950,3 @@
+ Innermost.size()),
+ /*InsertPos=*/0);
+#endif
----------------
Doug Gregor wrote:
> This is turning the call operator into a specialization of the old call
> operator template, which isn't quite right. We want to establish that
> NewCallOperatorTemplate was instantiated from the member template
> OldCallOperatorTemplate using
> RedeclarableTemplateDecl::setInstantiatedFromMemberTemplate(). See
> RedeclarableTemplateDecl::getInstantiatedFromMemberTemplate() for an example
> of how this method works.
Ok so I tried the following:
NewCallOperatorTemplate->setInstantiatedFromMemberTemplate(
OldCallOperatorTemplate);
But ended up with a new crash in the code below on line ####
[Am currently investigating this...]
struct X {
static void foo(double d) { }
auto test() {
auto L = [](auto a) {
print("a = ", a, "\n");
foo(a);
return [](decltype(a) b) {
foo(b);
foo(sizeof(a) + sizeof(b));
return [](auto ... c) {
print("c = ", c ..., "\n");
foo(decltype(b){});
foo(sizeof(decltype(a)*) + sizeof(decltype(b)*));
return [](decltype(c) ... d) ->decltype(a) {
//expected-note{{candidate}}
print("d = ", d ..., "\n");
foo(decltype(b){});
foo(sizeof(decltype(a)*) + sizeof(decltype(b)*));
return decltype(a){};
};
};
};
};
return L;
}
};
X x;
auto L = x.test();
L('4');
auto M = L('3');
M('a');
auto N = M('x');
auto O = N("\n3 = ", 3, "\n6.14 = ", 6.14, "\n4'123'456 = ", 4'123'456); <--
this line ####
CRASH:
s s e r t i o n f a i l e d : N u m A r g u m e n t s I n E x p a n s i o
n & & " s h o u l d o n l y b e
c a l l e d w h e n a l l t e m p l a t e a r g u m e n t s a r e
k n o w n " , f i l e . . \ . . \ .
\ . . \ . . \ l l v m \ t o o l s \ c l a n g \ l i b \ S e m a \ S e m a T e
m p l a t e I n s t a n t i a t e D e c
. c p p , l i n e 2 8 2 2
Stack dump:
. Program arguments: F:/clang-trunk/build/bin/Debug/clang.EXE -cc1
-internal-isystem F:\clang-trunk\build\bin\Debu
\..\lib\clang\3.4\include -std=c++1y -verify -fsyntax-only -fblocks -emit-llvm
-o - F:\clang-trunk\llvm\tools\clang\tes
\semacxx\cxx1y-generic-lambdas.cpp
.
F:\clang-trunk\llvm\tools\clang\test\semacxx\cxx1y-generic-lambdas.cpp:322:73:
current parser token ')'
.
F:\clang-trunk\llvm\tools\clang\test\semacxx\cxx1y-generic-lambdas.cpp:116:1:
parsing namespace 'nested_non_capt
ring_lambda_tests'
.
F:\clang-trunk\llvm\tools\clang\test\semacxx\cxx1y-generic-lambdas.cpp:118:12:
parsing function body 'test'
.
F:\clang-trunk\llvm\tools\clang\test\semacxx\cxx1y-generic-lambdas.cpp:118:12:
in compound statement ('{}')
.
F:\clang-trunk\llvm\tools\clang\test\semacxx\cxx1y-generic-lambdas.cpp:290:1:
in compound statement ('{}')
x56CA89EB (0x0000000A 0x00000000 0x04AB906C 0x56D76237), _get_pgmptr() + 0x21B
bytes(s)
x56D84F2E (0x04AB90C0 0x04AB9080 0x00000000 0x04AB89C0), abort() + 0x1E bytes(s)
x56D76237 (0x03BEB080 0x03BEAFE8 0x00000B06 0x04AB9360), _wassert() + 0xB77
bytes(s)
x01C994D1 (0x04E91C50 0x04F09080 0x04F03BD0 0x04AB91F4),
addInstantiatedParametersToScope() + 0x131 bytes(s), f:\clang-
runk\llvm\tools\clang\lib\sema\sematemplateinstantiatedecl.cpp, line 2822 +
0x2F byte(s)
x01C9A779 (0x00001FF6 0x04F09080 0x00000000 0x00000000),
clang::Sema::InstantiateFunctionDefinition() + 0x619 bytes(s),
f:\clang-trunk\llvm\tools\clang\lib\sema\sematemplateinstantiatedecl.cpp, line
3237 + 0x1F byte(s)
x01CEA8FE (0x04F09080 0x00001FF6 0x00000001 0x04ABA448),
clang::Sema::DeduceReturnType() + 0x7E bytes(s), f:\clang-trun
\llvm\tools\clang\lib\sema\sematemplatededuction.cpp, line 4101
x01A8BB57 (0x04F09080 0x00001FF6 0x00000000 0xCCCCCCCC),
clang::Sema::DiagnoseUseOfDecl() + 0x217 bytes(s), f:\clang-tr
http://llvm-reviews.chandlerc.com/D1784
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits