[PR c++/84835] ICE with generic lambda in extern "C"
https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00890.html PR c++/84835 * lambda.c (maybe_add_lambda_conv_op): Force C++ linkage. * pt.c (build_template_decl): Propagate language linkage. PR c++/84835 * g++.dg/cpp1y/pr84835.C: New. From-SVN: r258655
This commit is contained in:
parent
f7d884d45b
commit
143f00e112
5 changed files with 32 additions and 0 deletions
|
@ -1,5 +1,9 @@
|
|||
2018-03-19 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/84835
|
||||
* lambda.c (maybe_add_lambda_conv_op): Force C++ linkage.
|
||||
* pt.c (build_template_decl): Propagate language linkage.
|
||||
|
||||
PR c++/84812
|
||||
* name-lookup.c (set_local_extern_decl_linkage): Defend against
|
||||
ambiguous lookups.
|
||||
|
|
|
@ -1176,6 +1176,7 @@ maybe_add_lambda_conv_op (tree type)
|
|||
tree thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
|
||||
tree fntype = build_method_type_directly (thistype, rettype, void_list_node);
|
||||
tree convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
|
||||
SET_DECL_LANGUAGE (convfn, lang_cplusplus);
|
||||
tree fn = convfn;
|
||||
DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
|
||||
SET_DECL_ALIGN (fn, MINIMUM_METHOD_BOUNDARY);
|
||||
|
@ -1208,6 +1209,7 @@ maybe_add_lambda_conv_op (tree type)
|
|||
|
||||
name = get_identifier ("_FUN");
|
||||
tree statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
|
||||
SET_DECL_LANGUAGE (statfn, lang_cplusplus);
|
||||
fn = statfn;
|
||||
DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
|
||||
grokclassfn (type, fn, NO_SPECIAL);
|
||||
|
|
|
@ -4677,6 +4677,7 @@ tree
|
|||
build_template_decl (tree decl, tree parms, bool member_template_p)
|
||||
{
|
||||
tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
|
||||
SET_DECL_LANGUAGE (tmpl, DECL_LANGUAGE (decl));
|
||||
DECL_TEMPLATE_PARMS (tmpl) = parms;
|
||||
DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
|
||||
DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-03-19 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/84835
|
||||
* g++.dg/cpp1y/pr84835.C: New.
|
||||
|
||||
2018-03-19 Sudakshina Das <sudi.das@arm.com>
|
||||
|
||||
PR target/81647
|
||||
|
|
20
gcc/testsuite/g++.dg/cpp1y/pr84835.C
Normal file
20
gcc/testsuite/g++.dg/cpp1y/pr84835.C
Normal file
|
@ -0,0 +1,20 @@
|
|||
// { dg-do compile { target c++14 } }
|
||||
// PR c++/84835
|
||||
// ICE with generic lambda inside extern "C"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
auto r = [] (auto x)
|
||||
{
|
||||
void baz (); // extern "C"
|
||||
baz ();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void g ()
|
||||
{
|
||||
r (0);
|
||||
}
|
||||
|
||||
// { dg-final { scan-assembler "\[^0-9\]baz" } }
|
Loading…
Add table
Reference in a new issue