diff mbox

PR LTO/63270 - new test

Message ID 541C5049.1010207@suse.cz
State New
Headers show

Commit Message

Martin Liška Sept. 19, 2014, 3:48 p.m. UTC
Hello.

The following patch adds a test for PR/63270. The test has been tested before and with r215328, where the bug was fixed.

Thank you,
Martin
gcc/testsuite/ChangeLog:

2014-09-19  Martin Liska  <mliska@suse.cz>

	PR LTO/63270
	* g++.dg/lto/pr63270_0.C: New test.
	* g++.dg/lto/pr63270_1.C: New test.

Comments

Jeff Law Sept. 19, 2014, 4:20 p.m. UTC | #1
On 09/19/14 09:48, Martin Liška wrote:
> Hello.
>
> The following patch adds a test for PR/63270. The test has been tested before and with r215328, where the bug was fixed.
>
> Thank you,
> Martin
>
>
> pr63270.changelog
>
>
> gcc/testsuite/ChangeLog:
>
> 2014-09-19  Martin Liska<mliska@suse.cz>
>
> 	PR LTO/63270
> 	* g++.dg/lto/pr63270_0.C: New test.
> 	* g++.dg/lto/pr63270_1.C: New test.
OK.  Please install if you haven't done so already.

Thanks,
Jeff
diff mbox

Patch

diff --git a/gcc/testsuite/g++.dg/lto/pr63270_0.C b/gcc/testsuite/g++.dg/lto/pr63270_0.C
new file mode 100644
index 0000000..98f2735
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr63270_0.C
@@ -0,0 +1,72 @@ 
+// { dg-lto-do link }
+// { dg-lto-options {{-flto -O2 -Wno-odr}} }
+typedef unsigned long uintptr_t;
+namespace v8 {
+class Extension;
+namespace internal {
+class A {
+public:
+  A(int);
+};
+class B {
+public:
+  B(int);
+};
+class Scanner;
+class FuncNameInferrer;
+template <typename Traits> class ParserBase : Traits {
+  class FunctionState;
+  bool parenthesized_function_;
+  typename Traits::Type::Scope *scope_;
+  FunctionState *function_state_;
+  v8::Extension *extension_;
+  FuncNameInferrer *fni_;
+  Scanner *scanner_;
+  uintptr_t stack_limit_;
+  bool stack_overflow_;
+  bool allow_lazy_;
+  bool allow_natives_syntax_;
+  bool allow_generators_;
+  bool allow_for_of_;
+  typename Traits::Type::Zone *zone_;
+};
+class PreParserScope;
+class F;
+class PreParserTraits {
+public:
+  struct Type {
+    typedef PreParserScope Scope;
+    typedef void Zone;
+  };
+
+private:
+  F *pre_parser_;
+};
+class F : ParserBase<PreParserTraits> {};
+class C {
+public:
+  struct Type {
+    typedef v8::internal::FuncNameInferrer Scope;
+    typedef int Zone;
+  };
+};
+class G : ParserBase<C> {
+public:
+  static int m_fn1();
+  F reusable_preparser_;
+};
+class D {
+public:
+  D(int) : function_(0), context_(0), nested_scope_chain_(0) { G::m_fn1(); }
+  B function_;
+  B context_;
+  A nested_scope_chain_;
+};
+void fn1() { D(0); }
+}
+}
+
+int main()
+{
+    return 0;
+}
diff --git a/gcc/testsuite/g++.dg/lto/pr63270_1.C b/gcc/testsuite/g++.dg/lto/pr63270_1.C
new file mode 100644
index 0000000..a842e5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr63270_1.C
@@ -0,0 +1,53 @@ 
+typedef unsigned long uintptr_t;
+namespace v8
+{
+  
+    int kPointerSize = 0;
+  
+  class Extension;
+  namespace internal
+  {
+    class Token;
+    class Scanner;
+    int kCodeOffset = 0;
+    int kOptimizedCodeMapOffset = 0;
+    int kScopeInfoOffset = 0;
+
+    class FuncNameInferrer;
+      template < typename Traits > class ParserBase:Traits
+    {
+      class FunctionState;
+      bool parenthesized_function_;
+      typename Traits::Type::Scope * scope_;
+      FunctionState *function_state_;
+        v8::Extension * extension_;
+      FuncNameInferrer *fni_;
+      Scanner *scanner_;
+      uintptr_t stack_limit_;
+      bool stack_overflow_;
+      bool allow_lazy_;
+      bool allow_natives_syntax_;
+      bool allow_generators_;
+      bool allow_for_of_;
+      typename Traits::Type::Zone * zone_;
+    };
+    class PreParserScope;
+    class PreParser;
+    class PreParserTraits
+    {
+    public:struct Type
+      {
+	typedef PreParserScope Scope;
+	typedef void Zone;
+      };
+      PreParser *pre_parser_;
+    };
+    class PreParser:ParserBase < PreParserTraits >
+    {
+      int ParseMemberWithNewPrefixesExpression ( bool * );
+    };
+    int PreParser::ParseMemberWithNewPrefixesExpression ( bool * )
+    {
+    }
+  }
+}