From b3310d490144dd291d0e26279e5bf70772ea2da9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 25 Jan 2012 12:16:28 -0500 Subject: [PATCH] =?utf8?q?re=20PR=20c++/51992=20(internal=20compiler=20err?= =?utf8?q?or:=20tree=20code=20=E2=80=98target=5Fexpr=E2=80=99=20is=20not?= =?utf8?q?=20supported=20in=20LTO=20streams)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit PR c++/51992 * tree.c (find_decls_types_in_node): Walk gimple_call_fntype. From-SVN: r183527 --- gcc/ChangeLog | 5 +++ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/lto/pr51992_0.C | 53 ++++++++++++++++++++++++++++ gcc/tree.c | 3 ++ 4 files changed, 66 insertions(+) create mode 100644 gcc/testsuite/g++.dg/lto/pr51992_0.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3be4c01369..82e5165d04a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-01-25 Jason Merrill + + PR c++/51992 + * tree.c (find_decls_types_in_node): Walk gimple_call_fntype. + 2012-01-25 Jakub Jelinek PR tree-optimization/51987 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea0cc24800f..493b040c4d8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-25 Jason Merrill + + PR c++/51992 + * g++.dg/lto/pr51992_0.C: New. + 2012-01-25 Jakub Jelinek PR tree-optimization/51987 diff --git a/gcc/testsuite/g++.dg/lto/pr51992_0.C b/gcc/testsuite/g++.dg/lto/pr51992_0.C new file mode 100644 index 00000000000..deb232cc2a9 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr51992_0.C @@ -0,0 +1,53 @@ +// PR c++/51992 +// { dg-lto-do assemble } + +template +class QFlags +{ + int i; + inline QFlags(Enum f) : i(f) {} +}; +class QString {}; +class KComponentData; +class KConfig +{ +public: + enum OpenFlag { + IncludeGlobals = 0x01, + CascadeConfig = 0x02, + FullConfig = IncludeGlobals|CascadeConfig + }; + typedef QFlags OpenFlags; +}; +template +class KSharedPtr {}; +class KSharedConfig : public KConfig +{ +public: + typedef KSharedPtr Ptr; + static KSharedConfig::Ptr openConfig(const QString& fileName = QString(), + OpenFlags mode = FullConfig, + const char *resourceType = "config"); + static KSharedConfig::Ptr openConfig(const KComponentData &componentData, + const QString &fileName = QString(), + OpenFlags mode = FullConfig, + const char *resourceType = "config"); +}; +typedef KSharedConfig::Ptr KSharedConfigPtr; +namespace KGlobal +{ + KComponentData &mainComponent(); +}; +KSharedConfigPtr KSharedConfig::openConfig(const QString& fileName, + OpenFlags flags, + const char *resType) +{ + return openConfig(KGlobal::mainComponent(), fileName, flags, resType); +} +KSharedConfigPtr KSharedConfig::openConfig(const KComponentData &componentData, + const QString& fileName, + OpenFlags flags, + const char *resType) +{ + return KSharedConfigPtr(); +} diff --git a/gcc/tree.c b/gcc/tree.c index ec78616bd63..34bcb39b8e9 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5037,6 +5037,9 @@ find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld) { gimple stmt = gsi_stmt (si); + if (is_gimple_call (stmt)) + find_decls_types (gimple_call_fntype (stmt), fld); + for (i = 0; i < gimple_num_ops (stmt); i++) { tree arg = gimple_op (stmt, i); -- 2.30.2