From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/g++.dg/debug/anonunion1.C | 14 ++ gcc/testsuite/g++.dg/debug/const1.C | 11 + gcc/testsuite/g++.dg/debug/const2.C | 15 ++ gcc/testsuite/g++.dg/debug/const3.C | 3 + gcc/testsuite/g++.dg/debug/const4.C | 2 + gcc/testsuite/g++.dg/debug/crash1.C | 17 ++ gcc/testsuite/g++.dg/debug/debug.exp | 30 +++ gcc/testsuite/g++.dg/debug/debug1.C | 48 ++++ gcc/testsuite/g++.dg/debug/debug2.C | 42 ++++ gcc/testsuite/g++.dg/debug/debug3.C | 47 ++++ gcc/testsuite/g++.dg/debug/debug4.C | 17 ++ gcc/testsuite/g++.dg/debug/debug5.C | 10 + gcc/testsuite/g++.dg/debug/debug6.C | 7 + gcc/testsuite/g++.dg/debug/debug7.C | 19 ++ gcc/testsuite/g++.dg/debug/debug8.C | 2 + gcc/testsuite/g++.dg/debug/debug9.C | 26 +++ .../g++.dg/debug/dwarf-eh-personality-1.C | 17 ++ gcc/testsuite/g++.dg/debug/dwarf2-1.C | 22 ++ gcc/testsuite/g++.dg/debug/dwarf2-2.C | 17 ++ gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C | 24 ++ gcc/testsuite/g++.dg/debug/dwarf2/anonname1.C | 18 ++ gcc/testsuite/g++.dg/debug/dwarf2/const2.C | 6 + gcc/testsuite/g++.dg/debug/dwarf2/const2b.C | 7 + gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp | 43 ++++ gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C | 34 +++ gcc/testsuite/g++.dg/debug/dwarf2/enum1.C | 19 ++ .../g++.dg/debug/dwarf2/explicit-constructor.C | 19 ++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.C | 126 ++++++++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.h | 42 ++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.C | 126 ++++++++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.h | 42 ++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.C | 126 ++++++++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.h | 42 ++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.C | 126 ++++++++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.h | 42 ++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.C | 126 ++++++++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.h | 42 ++++ gcc/testsuite/g++.dg/debug/dwarf2/fesd.h | 67 ++++++ .../g++.dg/debug/dwarf2/global-used-types-1.C | 13 ++ gcc/testsuite/g++.dg/debug/dwarf2/icf.C | 50 ++++ .../g++.dg/debug/dwarf2/imported-decl-1.C | 17 ++ .../g++.dg/debug/dwarf2/imported-module-2.C | 18 ++ .../g++.dg/debug/dwarf2/imported-module-3.C | 17 ++ .../g++.dg/debug/dwarf2/imported-module-4.C | 21 ++ .../g++.dg/debug/dwarf2/imported-module.C | 35 +++ gcc/testsuite/g++.dg/debug/dwarf2/inline1.C | 18 ++ gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C | 13 ++ .../g++.dg/debug/dwarf2/local-var-in-contructor.C | 30 +++ gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C | 76 ++++++ gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C | 76 ++++++ gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C | 30 +++ gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C | 29 +++ gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C | 37 +++ gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C | 20 ++ gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C | 41 ++++ gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C | 22 ++ gcc/testsuite/g++.dg/debug/dwarf2/pr45997-2.C | 22 ++ gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C | 47 ++++ gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C | 18 ++ gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C | 17 ++ .../g++.dg/debug/dwarf2/redeclaration-1.C | 18 ++ gcc/testsuite/g++.dg/debug/dwarf2/rv1.C | 15 ++ gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C | 28 +++ gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C | 29 +++ .../g++.dg/debug/dwarf2/static-data-member1.C | 12 + .../g++.dg/debug/dwarf2/static-data-member2.C | 12 + .../g++.dg/debug/dwarf2/static-local-var-in-ctor.C | 37 +++ .../g++.dg/debug/dwarf2/template-func-params-1.C | 16 ++ .../g++.dg/debug/dwarf2/template-func-params-2.C | 22 ++ .../g++.dg/debug/dwarf2/template-func-params-3.C | 24 ++ .../g++.dg/debug/dwarf2/template-func-params-4.C | 38 +++ .../g++.dg/debug/dwarf2/template-func-params-5.C | 28 +++ .../g++.dg/debug/dwarf2/template-func-params-6.C | 38 +++ .../g++.dg/debug/dwarf2/template-func-params-7.C | 59 +++++ .../g++.dg/debug/dwarf2/template-params-1.C | 15 ++ .../g++.dg/debug/dwarf2/template-params-10.C | 22 ++ .../g++.dg/debug/dwarf2/template-params-2.C | 23 ++ .../g++.dg/debug/dwarf2/template-params-3.C | 25 ++ .../g++.dg/debug/dwarf2/template-params-4.C | 36 +++ .../g++.dg/debug/dwarf2/template-params-5.C | 29 +++ .../g++.dg/debug/dwarf2/template-params-6.C | 44 ++++ .../g++.dg/debug/dwarf2/template-params-7.C | 21 ++ .../g++.dg/debug/dwarf2/template-params-8.C | 15 ++ .../g++.dg/debug/dwarf2/template-params-9.C | 28 +++ gcc/testsuite/g++.dg/debug/dwarf2/typedef1.C | 33 +++ gcc/testsuite/g++.dg/debug/dwarf2/typedef2.C | 11 + gcc/testsuite/g++.dg/debug/dwarf2/typedef3.C | 19 ++ gcc/testsuite/g++.dg/debug/dwarf2/typedef4.C | 10 + gcc/testsuite/g++.dg/debug/dwarf2/typedef5.C | 10 + gcc/testsuite/g++.dg/debug/dwarf2/typedef6.C | 30 +++ gcc/testsuite/g++.dg/debug/enum-1.C | 16 ++ gcc/testsuite/g++.dg/debug/enum-2.C | 22 ++ gcc/testsuite/g++.dg/debug/minimal1.C | 7 + gcc/testsuite/g++.dg/debug/namespace1.C | 258 +++++++++++++++++++++ gcc/testsuite/g++.dg/debug/namespace2.C | 8 + gcc/testsuite/g++.dg/debug/nullptr01.C | 15 ++ gcc/testsuite/g++.dg/debug/pr15736.cc | 12 + gcc/testsuite/g++.dg/debug/pr16792.C | 10 + gcc/testsuite/g++.dg/debug/pr22514.C | 13 ++ gcc/testsuite/g++.dg/debug/pr27657.C | 9 + gcc/testsuite/g++.dg/debug/pr29906.C | 10 + gcc/testsuite/g++.dg/debug/pr30898.C | 13 ++ gcc/testsuite/g++.dg/debug/pr34895.C | 19 ++ gcc/testsuite/g++.dg/debug/pr43010.C | 8 + gcc/testsuite/g++.dg/debug/pr44178.C | 39 ++++ gcc/testsuite/g++.dg/debug/pr44182.C | 26 +++ gcc/testsuite/g++.dg/debug/pr45660.C | 16 ++ gcc/testsuite/g++.dg/debug/pr46123.C | 47 ++++ gcc/testsuite/g++.dg/debug/pr46240.cc | 172 ++++++++++++++ gcc/testsuite/g++.dg/debug/pr46241.C | 19 ++ gcc/testsuite/g++.dg/debug/pr46338.C | 24 ++ gcc/testsuite/g++.dg/debug/pr46583.C | 40 ++++ gcc/testsuite/g++.dg/debug/pr47106.C | 38 +++ gcc/testsuite/g++.dg/debug/pr47209.C | 12 + gcc/testsuite/g++.dg/debug/pr47283.C | 58 +++++ gcc/testsuite/g++.dg/debug/static1.C | 16 ++ gcc/testsuite/g++.dg/debug/template1.C | 15 ++ gcc/testsuite/g++.dg/debug/trivial.C | 6 + gcc/testsuite/g++.dg/debug/typedef1.C | 17 ++ gcc/testsuite/g++.dg/debug/typedef2.C | 12 + gcc/testsuite/g++.dg/debug/typedef3.C | 19 ++ gcc/testsuite/g++.dg/debug/using1.C | 15 ++ gcc/testsuite/g++.dg/debug/using2.C | 21 ++ gcc/testsuite/g++.dg/debug/using3.C | 8 + gcc/testsuite/g++.dg/debug/vartrack1.C | 99 ++++++++ 125 files changed, 3996 insertions(+) create mode 100644 gcc/testsuite/g++.dg/debug/anonunion1.C create mode 100644 gcc/testsuite/g++.dg/debug/const1.C create mode 100644 gcc/testsuite/g++.dg/debug/const2.C create mode 100644 gcc/testsuite/g++.dg/debug/const3.C create mode 100644 gcc/testsuite/g++.dg/debug/const4.C create mode 100644 gcc/testsuite/g++.dg/debug/crash1.C create mode 100644 gcc/testsuite/g++.dg/debug/debug.exp create mode 100644 gcc/testsuite/g++.dg/debug/debug1.C create mode 100644 gcc/testsuite/g++.dg/debug/debug2.C create mode 100644 gcc/testsuite/g++.dg/debug/debug3.C create mode 100644 gcc/testsuite/g++.dg/debug/debug4.C create mode 100644 gcc/testsuite/g++.dg/debug/debug5.C create mode 100644 gcc/testsuite/g++.dg/debug/debug6.C create mode 100644 gcc/testsuite/g++.dg/debug/debug7.C create mode 100644 gcc/testsuite/g++.dg/debug/debug8.C create mode 100644 gcc/testsuite/g++.dg/debug/debug9.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf-eh-personality-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/anonname1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/const2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/const2b.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/enum1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/fesd.h create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/global-used-types-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/icf.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/inline1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr45997-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/rv1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/static-data-member1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/static-local-var-in-ctor.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-6.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-10.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-6.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-7.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-8.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-9.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/typedef6.C create mode 100644 gcc/testsuite/g++.dg/debug/enum-1.C create mode 100644 gcc/testsuite/g++.dg/debug/enum-2.C create mode 100644 gcc/testsuite/g++.dg/debug/minimal1.C create mode 100644 gcc/testsuite/g++.dg/debug/namespace1.C create mode 100644 gcc/testsuite/g++.dg/debug/namespace2.C create mode 100644 gcc/testsuite/g++.dg/debug/nullptr01.C create mode 100644 gcc/testsuite/g++.dg/debug/pr15736.cc create mode 100644 gcc/testsuite/g++.dg/debug/pr16792.C create mode 100644 gcc/testsuite/g++.dg/debug/pr22514.C create mode 100644 gcc/testsuite/g++.dg/debug/pr27657.C create mode 100644 gcc/testsuite/g++.dg/debug/pr29906.C create mode 100644 gcc/testsuite/g++.dg/debug/pr30898.C create mode 100644 gcc/testsuite/g++.dg/debug/pr34895.C create mode 100644 gcc/testsuite/g++.dg/debug/pr43010.C create mode 100644 gcc/testsuite/g++.dg/debug/pr44178.C create mode 100644 gcc/testsuite/g++.dg/debug/pr44182.C create mode 100644 gcc/testsuite/g++.dg/debug/pr45660.C create mode 100644 gcc/testsuite/g++.dg/debug/pr46123.C create mode 100644 gcc/testsuite/g++.dg/debug/pr46240.cc create mode 100644 gcc/testsuite/g++.dg/debug/pr46241.C create mode 100644 gcc/testsuite/g++.dg/debug/pr46338.C create mode 100644 gcc/testsuite/g++.dg/debug/pr46583.C create mode 100644 gcc/testsuite/g++.dg/debug/pr47106.C create mode 100644 gcc/testsuite/g++.dg/debug/pr47209.C create mode 100644 gcc/testsuite/g++.dg/debug/pr47283.C create mode 100644 gcc/testsuite/g++.dg/debug/static1.C create mode 100644 gcc/testsuite/g++.dg/debug/template1.C create mode 100644 gcc/testsuite/g++.dg/debug/trivial.C create mode 100644 gcc/testsuite/g++.dg/debug/typedef1.C create mode 100644 gcc/testsuite/g++.dg/debug/typedef2.C create mode 100644 gcc/testsuite/g++.dg/debug/typedef3.C create mode 100644 gcc/testsuite/g++.dg/debug/using1.C create mode 100644 gcc/testsuite/g++.dg/debug/using2.C create mode 100644 gcc/testsuite/g++.dg/debug/using3.C create mode 100644 gcc/testsuite/g++.dg/debug/vartrack1.C (limited to 'gcc/testsuite/g++.dg/debug') diff --git a/gcc/testsuite/g++.dg/debug/anonunion1.C b/gcc/testsuite/g++.dg/debug/anonunion1.C new file mode 100644 index 000000000..c48a8cdc1 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/anonunion1.C @@ -0,0 +1,14 @@ +// PR debug/9039 +// Verify that the debugging backends don't get confused by ALIAS_DECLs. + +int foo() +{ + union + { + int z; + unsigned int w; + }; + + w = 0; + return 0; +} diff --git a/gcc/testsuite/g++.dg/debug/const1.C b/gcc/testsuite/g++.dg/debug/const1.C new file mode 100644 index 000000000..7cbc57141 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/const1.C @@ -0,0 +1,11 @@ +// PR c++/6381 +// Bug: we were emitting the initializer for bar, which referenced foo, +// which was not emitted. + +// { dg-options "-O" } +// { dg-do link } + +static const int foo[] = { 0 }; +static const int * const bar[] = { foo }; + +int main() {} diff --git a/gcc/testsuite/g++.dg/debug/const2.C b/gcc/testsuite/g++.dg/debug/const2.C new file mode 100644 index 000000000..8e98f8b19 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/const2.C @@ -0,0 +1,15 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 1 Apr 2005 + +// { dg-options "-ggdb2" } +// Origin: ivan +// pinskia@gcc.gnu.org +// Bug 20505: ICE with -ggdb2 + +struct b +{ + static const int d; + virtual bool IsEmpty() const=0; + int e,c; +}; +const int b::d = ((__SIZE_TYPE__)(&((b*)1)->c) - 1); diff --git a/gcc/testsuite/g++.dg/debug/const3.C b/gcc/testsuite/g++.dg/debug/const3.C new file mode 100644 index 000000000..375c548a3 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/const3.C @@ -0,0 +1,3 @@ +/* { dg-do compile } */ +typedef float FloatVect __attribute__((__vector_size__(16))); +const FloatVect Foo = { 250000000.0, 0.0, 0.0, 0.0 }; diff --git a/gcc/testsuite/g++.dg/debug/const4.C b/gcc/testsuite/g++.dg/debug/const4.C new file mode 100644 index 000000000..ec8133d77 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/const4.C @@ -0,0 +1,2 @@ +/* { dg-do compile } */ +const __complex__ int x = 2i; diff --git a/gcc/testsuite/g++.dg/debug/crash1.C b/gcc/testsuite/g++.dg/debug/crash1.C new file mode 100644 index 000000000..4fba256b7 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/crash1.C @@ -0,0 +1,17 @@ +template +class foo +{ + T t; +}; + +class bar; +typedef foo foobar; + +class obj +{ + virtual foobar* yeah() = 0; +}; + +class bar : virtual public obj +{ +}; diff --git a/gcc/testsuite/g++.dg/debug/debug.exp b/gcc/testsuite/g++.dg/debug/debug.exp new file mode 100644 index 000000000..e98d0fe55 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug.exp @@ -0,0 +1,30 @@ +# Copyright (C) 2002, 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# G++ testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib g++-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +gcc-dg-debug-runtest g++_target_compile trivial.C [list -O2 -O3] \ + [lsort [glob -nocomplain $srcdir/$subdir/*.C]] + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.dg/debug/debug1.C b/gcc/testsuite/g++.dg/debug/debug1.C new file mode 100644 index 000000000..3efcbc98f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug1.C @@ -0,0 +1,48 @@ +// Test whether dwarf2 debug info works with named return value optimization +// { dg-do compile } + +struct S +{ + virtual ~S(); + S (const char *str); + S& operator= (const char *str); + operator const char *() const; + S& operator+= (const char *str); +}; +inline S operator+ (const char *s1, const S &s2) +{ + S x (s1); + x += s2; + return x; +} +struct U +{ + U (); + U& operator= (const char *); + const char *foo() const; + operator const char *() const { return foo(); } +}; +template struct V +{ + T v; +}; +template struct W +{ + V *w; + W() : w (0) {} + const T& operator* () const { return w->v; } + T& operator* () { return w->v; } +}; +struct X { + X(); +}; +struct Y { + Y (const U &u); +}; +X::X() +{ + W a; + U b; + b = (*a) + "xx"; + Y c (b); +} diff --git a/gcc/testsuite/g++.dg/debug/debug2.C b/gcc/testsuite/g++.dg/debug/debug2.C new file mode 100644 index 000000000..e0164202d --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug2.C @@ -0,0 +1,42 @@ +/* Verify that sched re-inserts needed scopes properly. */ +/* { dg-do compile } */ +/* { dg-options "-mcpu=ev5" { target alpha*-*-* } } */ + +template +inline void foo() +{ + void (T::*x)() __attribute__ ((__unused__)) = &T::bar; +} + +template +struct D +{ + void bar() { + } + T i; +}; + +template +struct E +{ + void bar() { + foo > (); + *i-- = *i; + } + T i; +}; + +struct A {}; +template struct B { typedef typename T::t t; }; +template struct B { typedef T& t; }; +template +struct C +{ + T b; + explicit C (const T& i) : b (i) { } + typename B::t operator* () const { return *b; } + C operator-- (int) { return C (b--); } +}; + +template void foo > > (); +template void foo > > (); diff --git a/gcc/testsuite/g++.dg/debug/debug3.C b/gcc/testsuite/g++.dg/debug/debug3.C new file mode 100644 index 000000000..c7251429f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug3.C @@ -0,0 +1,47 @@ +// PR optimization/5547 +// This testcase caused ICE on IA-32, since DWARF-2 was unable +// to emit location expression for parameter a of operator+. +// { dg-do compile { target fpic } } +// { dg-options "-fpic" } + +struct A { char *s; }; + +inline A operator+ (char a, const A &b) +{ + A s; + s.s = new char[12]; + s.s[0] = a; + return s; +} + +int b (const A &); + +void test1 (const A &x, int y) +{ + int j = b ("012345"[y] + x); + for (int i = 0; i < y; i++); +} + +void test2 (const A &x, int y) +{ + int j = b ("012345678"[y + 2] + x); + for (int i = 0; i < y; i++); +} + +void test3 (const A &x, int y) +{ + int j = b ("012345678"[y - 6] + x); + for (int i = 0; i < y; i++); +} + +void test4 (const A &x, int y) +{ + int j = b ("012345678"[2 * y - 10] + x); + for (int i = 0; i < y; i++); +} + +void test5 (const A &x, int y) +{ + int j = b ("012345678"[4 * y] + x); + for (int i = 0; i < y; i++); +} diff --git a/gcc/testsuite/g++.dg/debug/debug4.C b/gcc/testsuite/g++.dg/debug/debug4.C new file mode 100644 index 000000000..8dceb0875 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug4.C @@ -0,0 +1,17 @@ +/* PR debug/5770 + This testcase failed at -O -g because the following constants + were optimized away since they were never referenced, but + since they are variables with initializers, rtl_for_decl_location + run expand_expr on their initializers and returned it. + This lead to references to constants which were deferred and thus + never emitted. */ +/* { dg-do link } */ + +static const char foo[] = "foo string"; +static const char bar[30] = "bar string"; +static const wchar_t baz[] = L"baz string"; + +int +main () +{ +} diff --git a/gcc/testsuite/g++.dg/debug/debug5.C b/gcc/testsuite/g++.dg/debug/debug5.C new file mode 100644 index 000000000..8dffa9487 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug5.C @@ -0,0 +1,10 @@ +// { dg-do compile } + +int foo() +{ + int a = 1; + int b = 1; + int e[a][b]; + e[0][0] = 0; + return e[a-1][b-1]; +} diff --git a/gcc/testsuite/g++.dg/debug/debug6.C b/gcc/testsuite/g++.dg/debug/debug6.C new file mode 100644 index 000000000..64f121b00 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug6.C @@ -0,0 +1,7 @@ +// { dg-do compile } + +void foo() +{ + int i=1, x[i]; +} + diff --git a/gcc/testsuite/g++.dg/debug/debug7.C b/gcc/testsuite/g++.dg/debug/debug7.C new file mode 100644 index 000000000..8731cf81d --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug7.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// { dg-prune-output "note" } + +void f (int); + +int +main() { + + int a = 4; + int b = 5; + int (*x)[b] = new int[a][b]; // { dg-error "" } + + x[2][1] = 7; + + for (int i = 0; i < a; ++i) + for (int j = 0; j < b; ++j) + f (x[i][j]); + delete [] x; +} diff --git a/gcc/testsuite/g++.dg/debug/debug8.C b/gcc/testsuite/g++.dg/debug/debug8.C new file mode 100644 index 000000000..1f8a18ac8 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug8.C @@ -0,0 +1,2 @@ +struct t{}; +struct g : public t{}; diff --git a/gcc/testsuite/g++.dg/debug/debug9.C b/gcc/testsuite/g++.dg/debug/debug9.C new file mode 100644 index 000000000..aa328ee6f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug9.C @@ -0,0 +1,26 @@ +/* { dg-do assemble } */ +/* This testcase requires entries in the debug_range section in DWARF which + refer to a vague linkage function. */ + +struct s +{ + ~s (); +}; + +bool f1 (); +s f2 (s); + +template void +f3(const s & a) +{ + while (f1 () && f1 ()) + { + s c = f2(a); + } +} + +int main() +{ + f3<0>(s ()); + return 0; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf-eh-personality-1.C b/gcc/testsuite/g++.dg/debug/dwarf-eh-personality-1.C new file mode 100644 index 000000000..5c72588e5 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf-eh-personality-1.C @@ -0,0 +1,17 @@ +// { dg-options "-fno-dwarf2-cfi-asm" } + +extern void bar (void); +int foo (void) +{ + try { + bar(); + } catch (...) { + return 1; + } + return 0; +} + +int foobar (void) +{ +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2-1.C b/gcc/testsuite/g++.dg/debug/dwarf2-1.C new file mode 100644 index 000000000..e90d51030 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2-1.C @@ -0,0 +1,22 @@ +// Copyright (C) 2006 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 6 Jan 2006 + +// PR 24824 +// Origin: wanderer@rsu.ru + +// { dg-options "-feliminate-dwarf2-dups" } + +namespace N +{ + struct Base + { + int m; + }; + + struct Derived : Base + { + using Base::m; + }; +} + +N::Derived thing; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2-2.C b/gcc/testsuite/g++.dg/debug/dwarf2-2.C new file mode 100644 index 000000000..9e6dbd216 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2-2.C @@ -0,0 +1,17 @@ +// PR debug/27057 +// { dg-do compile } +// { dg-options "-g -feliminate-dwarf2-dups" } + +namespace N +{ +} + +struct A +{ + void foo (); +}; + +void A::foo () +{ + using namespace N; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C b/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C new file mode 100644 index 000000000..4992f4191 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C @@ -0,0 +1,24 @@ +// PR debug/44668 +// { dg-do compile } +// { dg-options "-g -dA" } + +struct C +{ +private: + typedef int a; + a b; + enum g { g1, g2 } h; + struct D { int i; } i; +protected: + typedef int c; + c d; +public: + typedef int e; + e f; +} c; + +// 3 private DW_TAG_member dies, 1 private DW_TAG_typedef, +// 1 private DW_TAG_enumeration_type and 1 private DW_TAG_structure_type +// { dg-final { scan-assembler-times "3\[^\\r\\n\]* DW_AT_accessibility" 6 } } +// 1 private DW_TAG_member die, 1 private DW_TAG_typedef +// { dg-final { scan-assembler-times "2\[^\\r\\n\]* DW_AT_accessibility" 2 } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/anonname1.C b/gcc/testsuite/g++.dg/debug/dwarf2/anonname1.C new file mode 100644 index 000000000..b1cae2140 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/anonname1.C @@ -0,0 +1,18 @@ +// PR debug/41828 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -std=c++0x" } +// { dg-final { scan-assembler-not ". + +# G++ testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib g++-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -gdwarf-2" +} + +# Initialize `dg'. +dg-init + +# Main loop. +set comp_output [g++_target_compile \ + "$srcdir/$subdir/../trivial.C" "trivial.S" assembly \ + "additional_flags=-gdwarf-2"] +if { ! [string match "*: target system does not support the * debug format*" \ + $comp_output] } { + remove-build-file "trivial.S" + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/dwarf2/*.c]] \ + "" $DEFAULT_CFLAGS +} + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C new file mode 100644 index 000000000..c5520fa72 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-gdwarf-4" } */ + +/* Regression test for an ICE in output_die when using -gdwarf-4. */ + +namespace { + +struct A { + virtual ~A(); +}; + +struct B : public A { + template + bool foo(A x[2]) { } +}; + +template +struct C { + T v[2]; +}; + +template +bool X(T &b) { + typedef C D; + D x[2]; + return b.foo(x); +} + +void f() { + B b; + X(b); +} + +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/enum1.C b/gcc/testsuite/g++.dg/debug/dwarf2/enum1.C new file mode 100644 index 000000000..b5518ef18 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/enum1.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// { dg-options "-g -dA -gno-strict-dwarf -std=c++0x" } +// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_enumeration_type" 3 } } +// { dg-final { scan-assembler-times " DW_AT_enum_class" 2 } } + +enum A { a1, a2 } a; +enum struct B { b1, b2 } b; +enum class C { c1, c2 } c; + +void +foo () +{ + a = a1; + a = A::a2; + b = B::b1; + b = B::b2; + c = C::c1; + c = C::c2; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C new file mode 100644 index 000000000..32d205d20 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C @@ -0,0 +1,19 @@ +// Contributed by Dodji Seketeli +// Origin: PR c++ +// { dg-do compile } +// { dg-options "-O -g -dA -gno-strict-dwarf" } +// { dg-final { scan-assembler-times "DW_AT_explicit" 2 } } + +struct Foo +{ + Foo () {} + explicit Foo (int) {} + Foo (char) {} + ~Foo () {}; +}; + +void +bar () +{ + Foo foo; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.C b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.C new file mode 100644 index 000000000..a4a0b50ee --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.C @@ -0,0 +1,126 @@ +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -femit-struct-debug-detailed=any" } +// { dg-final { scan-assembler "timespec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_sec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_nsec.*DW_AT_name" } } +// { dg-final { scan-assembler "itimerspec.*DW_AT_name" } } +// { dg-final { scan-assembler "it_interval.*DW_AT_name" } } +// { dg-final { scan-assembler "it_value.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_ptr_base.*DW_AT_name" } } +# 1 "fesd-any.C" +# 1 "" +# 1 "" +# 1 "fesd-any.C" + +//#include "time.h" +# 1 "time.h" 1 3 4 +struct timespec + { + long int tv_sec; + long int tv_nsec; + }; + +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +# 6 "fesd-any.C" 2 + +struct timespec base_var8; +struct itimerspec *base_var9; + +#include "fesd-any.h" + +struct gstruct_head_ordy_defn_var_base base_var1; +struct gstruct_base_ordy_defn_var_base base_var2; + +struct gstruct_head_tmpl_defn_var_base< int > base_var5; +struct gstruct_base_tmpl_defn_var_base< int > base_var6; + +int base_function() { + return 0 ++ base_var1.field_head_ordy_defn_var_base ++ base_var2.field1_base_ordy_defn_var_base_ptr->field_head_ordy_defn_ptr_base ++ base_var2.field1_base_ordy_defn_var_base_fld.field_head_ordy_defn_fld_base ++ base_var2.field2_base_ordy_defn_var_base_ptr->field_base_ordy_defn_ptr_base ++ base_var2.field2_base_ordy_defn_var_base_fld.field_base_ordy_defn_fld_base ++ base_var5.field_head_tmpl_defn_var_base ++ base_var6.field1_base_tmpl_defn_var_base_ptr->field_head_tmpl_defn_ptr_base ++ base_var6.field1_base_tmpl_defn_var_base_fld.field_head_tmpl_defn_fld_base ++ base_var6.field2_base_tmpl_defn_var_base_ptr->field_base_tmpl_defn_ptr_base ++ base_var6.field2_base_tmpl_defn_var_base_fld.field_base_tmpl_defn_fld_base +; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.h new file mode 100644 index 000000000..762f5878f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-any.h @@ -0,0 +1,42 @@ +#include "fesd.h" + +struct gstruct_base_ordy_decl_not; +struct gstruct_base_ordy_defn_not { int field_base_ordy_defn_not; }; + +struct gstruct_base_ordy_decl_ref_base; +struct gstruct_base_ordy_defn_ref_base { int field_base_ordy_defn_ref_base; }; +struct gstruct_base_ordy_defn_ptr_base { int field_base_ordy_defn_ptr_base; }; +struct gstruct_base_ordy_defn_fld_base { int field_base_ordy_defn_fld_base; }; +struct gstruct_base_ordy_defn_var_base { + gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; + +template< typename T > struct gstruct_base_tmpl_decl_not; +template< typename T > struct gstruct_base_tmpl_defn_not +{ int field_base_tmpl_defn_not; }; + +template< typename T > struct gstruct_base_tmpl_decl_ref_base; +template< typename T > struct gstruct_base_tmpl_defn_ref_base +{ int field_base_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_base_tmpl_defn_ptr_base +{ int field_base_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_base_tmpl_defn_fld_base +{ int field_base_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_base_tmpl_defn_var_base { + gstruct_head_tmpl_decl_ref_base< T > *field1_base_tmpl_defn_var_base_inc; + gstruct_head_tmpl_defn_ref_base< T > *field1_base_tmpl_defn_var_base_ref; + gstruct_head_tmpl_defn_ptr_base< T > *field1_base_tmpl_defn_var_base_ptr; + gstruct_head_tmpl_defn_fld_base< T > field1_base_tmpl_defn_var_base_fld; + gstruct_base_tmpl_decl_ref_base< T > *field2_base_tmpl_defn_var_base_inc; + gstruct_base_tmpl_defn_ref_base< T > *field2_base_tmpl_defn_var_base_ref; + gstruct_base_tmpl_defn_ptr_base< T > *field2_base_tmpl_defn_var_base_ptr; + gstruct_base_tmpl_defn_fld_base< T > field2_base_tmpl_defn_var_base_fld; +}; + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.C b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.C new file mode 100644 index 000000000..4f580ebd3 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.C @@ -0,0 +1,126 @@ +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -femit-struct-debug-baseonly" } +// { dg-final { scan-assembler "timespec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "tv_sec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "tv_nsec.*DW_AT_name" } } +// { dg-final { scan-assembler "itimerspec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "it_interval.*DW_AT_name" } } +// { dg-final { scan-assembler-not "it_value.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_ptr_base.*DW_AT_name" } } +# 1 "fesd-baseonly.C" +# 1 "" +# 1 "" +# 1 "fesd-baseonly.C" + +//#include "time.h" +# 1 "time.h" 1 3 4 +struct timespec + { + long int tv_sec; + long int tv_nsec; + }; + +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +# 6 "fesd-baseonly.C" 2 + +struct timespec base_var8; +struct itimerspec *base_var9; + +#include "fesd-baseonly.h" + +struct gstruct_head_ordy_defn_var_base base_var1; +struct gstruct_base_ordy_defn_var_base base_var2; + +struct gstruct_head_tmpl_defn_var_base< int > base_var5; +struct gstruct_base_tmpl_defn_var_base< int > base_var6; + +int base_function() { + return 0 ++ base_var1.field_head_ordy_defn_var_base ++ base_var2.field1_base_ordy_defn_var_base_ptr->field_head_ordy_defn_ptr_base ++ base_var2.field1_base_ordy_defn_var_base_fld.field_head_ordy_defn_fld_base ++ base_var2.field2_base_ordy_defn_var_base_ptr->field_base_ordy_defn_ptr_base ++ base_var2.field2_base_ordy_defn_var_base_fld.field_base_ordy_defn_fld_base ++ base_var5.field_head_tmpl_defn_var_base ++ base_var6.field1_base_tmpl_defn_var_base_ptr->field_head_tmpl_defn_ptr_base ++ base_var6.field1_base_tmpl_defn_var_base_fld.field_head_tmpl_defn_fld_base ++ base_var6.field2_base_tmpl_defn_var_base_ptr->field_base_tmpl_defn_ptr_base ++ base_var6.field2_base_tmpl_defn_var_base_fld.field_base_tmpl_defn_fld_base +; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.h new file mode 100644 index 000000000..762f5878f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonly.h @@ -0,0 +1,42 @@ +#include "fesd.h" + +struct gstruct_base_ordy_decl_not; +struct gstruct_base_ordy_defn_not { int field_base_ordy_defn_not; }; + +struct gstruct_base_ordy_decl_ref_base; +struct gstruct_base_ordy_defn_ref_base { int field_base_ordy_defn_ref_base; }; +struct gstruct_base_ordy_defn_ptr_base { int field_base_ordy_defn_ptr_base; }; +struct gstruct_base_ordy_defn_fld_base { int field_base_ordy_defn_fld_base; }; +struct gstruct_base_ordy_defn_var_base { + gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; + +template< typename T > struct gstruct_base_tmpl_decl_not; +template< typename T > struct gstruct_base_tmpl_defn_not +{ int field_base_tmpl_defn_not; }; + +template< typename T > struct gstruct_base_tmpl_decl_ref_base; +template< typename T > struct gstruct_base_tmpl_defn_ref_base +{ int field_base_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_base_tmpl_defn_ptr_base +{ int field_base_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_base_tmpl_defn_fld_base +{ int field_base_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_base_tmpl_defn_var_base { + gstruct_head_tmpl_decl_ref_base< T > *field1_base_tmpl_defn_var_base_inc; + gstruct_head_tmpl_defn_ref_base< T > *field1_base_tmpl_defn_var_base_ref; + gstruct_head_tmpl_defn_ptr_base< T > *field1_base_tmpl_defn_var_base_ptr; + gstruct_head_tmpl_defn_fld_base< T > field1_base_tmpl_defn_var_base_fld; + gstruct_base_tmpl_decl_ref_base< T > *field2_base_tmpl_defn_var_base_inc; + gstruct_base_tmpl_defn_ref_base< T > *field2_base_tmpl_defn_var_base_ref; + gstruct_base_tmpl_defn_ptr_base< T > *field2_base_tmpl_defn_var_base_ptr; + gstruct_base_tmpl_defn_fld_base< T > field2_base_tmpl_defn_var_base_fld; +}; + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.C b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.C new file mode 100644 index 000000000..0af0a83d8 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.C @@ -0,0 +1,126 @@ +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -femit-struct-debug-detailed=none" } +// { dg-final { scan-assembler "timespec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "tv_sec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "tv_nsec.*DW_AT_name" } } +// { dg-final { scan-assembler "itimerspec.*DW_AT_name" } } +// { dg-final { scan-assembler-not "it_interval.*DW_AT_name" } } +// { dg-final { scan-assembler-not "it_value.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field1_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field2_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_base_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_base_tmpl_defn_ptr_base.*DW_AT_name" } } +# 1 "fesd-none.C" +# 1 "" +# 1 "" +# 1 "fesd-none.C" + +//#include "time.h" +# 1 "time.h" 1 3 4 +struct timespec + { + long int tv_sec; + long int tv_nsec; + }; + +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +# 6 "fesd-none.C" 2 + +struct timespec base_var8; +struct itimerspec *base_var9; + +#include "fesd-none.h" + +struct gstruct_head_ordy_defn_var_base base_var1; +struct gstruct_base_ordy_defn_var_base base_var2; + +struct gstruct_head_tmpl_defn_var_base< int > base_var5; +struct gstruct_base_tmpl_defn_var_base< int > base_var6; + +int base_function() { + return 0 ++ base_var1.field_head_ordy_defn_var_base ++ base_var2.field1_base_ordy_defn_var_base_ptr->field_head_ordy_defn_ptr_base ++ base_var2.field1_base_ordy_defn_var_base_fld.field_head_ordy_defn_fld_base ++ base_var2.field2_base_ordy_defn_var_base_ptr->field_base_ordy_defn_ptr_base ++ base_var2.field2_base_ordy_defn_var_base_fld.field_base_ordy_defn_fld_base ++ base_var5.field_head_tmpl_defn_var_base ++ base_var6.field1_base_tmpl_defn_var_base_ptr->field_head_tmpl_defn_ptr_base ++ base_var6.field1_base_tmpl_defn_var_base_fld.field_head_tmpl_defn_fld_base ++ base_var6.field2_base_tmpl_defn_var_base_ptr->field_base_tmpl_defn_ptr_base ++ base_var6.field2_base_tmpl_defn_var_base_fld.field_base_tmpl_defn_fld_base +; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.h new file mode 100644 index 000000000..762f5878f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-none.h @@ -0,0 +1,42 @@ +#include "fesd.h" + +struct gstruct_base_ordy_decl_not; +struct gstruct_base_ordy_defn_not { int field_base_ordy_defn_not; }; + +struct gstruct_base_ordy_decl_ref_base; +struct gstruct_base_ordy_defn_ref_base { int field_base_ordy_defn_ref_base; }; +struct gstruct_base_ordy_defn_ptr_base { int field_base_ordy_defn_ptr_base; }; +struct gstruct_base_ordy_defn_fld_base { int field_base_ordy_defn_fld_base; }; +struct gstruct_base_ordy_defn_var_base { + gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; + +template< typename T > struct gstruct_base_tmpl_decl_not; +template< typename T > struct gstruct_base_tmpl_defn_not +{ int field_base_tmpl_defn_not; }; + +template< typename T > struct gstruct_base_tmpl_decl_ref_base; +template< typename T > struct gstruct_base_tmpl_defn_ref_base +{ int field_base_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_base_tmpl_defn_ptr_base +{ int field_base_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_base_tmpl_defn_fld_base +{ int field_base_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_base_tmpl_defn_var_base { + gstruct_head_tmpl_decl_ref_base< T > *field1_base_tmpl_defn_var_base_inc; + gstruct_head_tmpl_defn_ref_base< T > *field1_base_tmpl_defn_var_base_ref; + gstruct_head_tmpl_defn_ptr_base< T > *field1_base_tmpl_defn_var_base_ptr; + gstruct_head_tmpl_defn_fld_base< T > field1_base_tmpl_defn_var_base_fld; + gstruct_base_tmpl_decl_ref_base< T > *field2_base_tmpl_defn_var_base_inc; + gstruct_base_tmpl_defn_ref_base< T > *field2_base_tmpl_defn_var_base_ref; + gstruct_base_tmpl_defn_ptr_base< T > *field2_base_tmpl_defn_var_base_ptr; + gstruct_base_tmpl_defn_fld_base< T > field2_base_tmpl_defn_var_base_fld; +}; + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.C b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.C new file mode 100644 index 000000000..a93b90f05 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.C @@ -0,0 +1,126 @@ +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -femit-struct-debug-reduced" } +// { dg-final { scan-assembler "timespec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_sec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_nsec.*DW_AT_name" } } +// { dg-final { scan-assembler "itimerspec.*DW_AT_name" } } +// { dg-final { scan-assembler "it_interval.*DW_AT_name" } } +// { dg-final { scan-assembler "it_value.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_ptr_base.*DW_AT_name" } } +# 1 "fesd-reduced.C" +# 1 "" +# 1 "" +# 1 "fesd-reduced.C" + +//#include "time.h" +# 1 "time.h" 1 3 4 +struct timespec + { + long int tv_sec; + long int tv_nsec; + }; + +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +# 6 "fesd-reduced.C" 2 + +struct timespec base_var8; +struct itimerspec *base_var9; + +#include "fesd-reduced.h" + +struct gstruct_head_ordy_defn_var_base base_var1; +struct gstruct_base_ordy_defn_var_base base_var2; + +struct gstruct_head_tmpl_defn_var_base< int > base_var5; +struct gstruct_base_tmpl_defn_var_base< int > base_var6; + +int base_function() { + return 0 ++ base_var1.field_head_ordy_defn_var_base ++ base_var2.field1_base_ordy_defn_var_base_ptr->field_head_ordy_defn_ptr_base ++ base_var2.field1_base_ordy_defn_var_base_fld.field_head_ordy_defn_fld_base ++ base_var2.field2_base_ordy_defn_var_base_ptr->field_base_ordy_defn_ptr_base ++ base_var2.field2_base_ordy_defn_var_base_fld.field_base_ordy_defn_fld_base ++ base_var5.field_head_tmpl_defn_var_base ++ base_var6.field1_base_tmpl_defn_var_base_ptr->field_head_tmpl_defn_ptr_base ++ base_var6.field1_base_tmpl_defn_var_base_fld.field_head_tmpl_defn_fld_base ++ base_var6.field2_base_tmpl_defn_var_base_ptr->field_base_tmpl_defn_ptr_base ++ base_var6.field2_base_tmpl_defn_var_base_fld.field_base_tmpl_defn_fld_base +; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.h new file mode 100644 index 000000000..762f5878f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-reduced.h @@ -0,0 +1,42 @@ +#include "fesd.h" + +struct gstruct_base_ordy_decl_not; +struct gstruct_base_ordy_defn_not { int field_base_ordy_defn_not; }; + +struct gstruct_base_ordy_decl_ref_base; +struct gstruct_base_ordy_defn_ref_base { int field_base_ordy_defn_ref_base; }; +struct gstruct_base_ordy_defn_ptr_base { int field_base_ordy_defn_ptr_base; }; +struct gstruct_base_ordy_defn_fld_base { int field_base_ordy_defn_fld_base; }; +struct gstruct_base_ordy_defn_var_base { + gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; + +template< typename T > struct gstruct_base_tmpl_decl_not; +template< typename T > struct gstruct_base_tmpl_defn_not +{ int field_base_tmpl_defn_not; }; + +template< typename T > struct gstruct_base_tmpl_decl_ref_base; +template< typename T > struct gstruct_base_tmpl_defn_ref_base +{ int field_base_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_base_tmpl_defn_ptr_base +{ int field_base_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_base_tmpl_defn_fld_base +{ int field_base_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_base_tmpl_defn_var_base { + gstruct_head_tmpl_decl_ref_base< T > *field1_base_tmpl_defn_var_base_inc; + gstruct_head_tmpl_defn_ref_base< T > *field1_base_tmpl_defn_var_base_ref; + gstruct_head_tmpl_defn_ptr_base< T > *field1_base_tmpl_defn_var_base_ptr; + gstruct_head_tmpl_defn_fld_base< T > field1_base_tmpl_defn_var_base_fld; + gstruct_base_tmpl_decl_ref_base< T > *field2_base_tmpl_defn_var_base_inc; + gstruct_base_tmpl_defn_ref_base< T > *field2_base_tmpl_defn_var_base_ref; + gstruct_base_tmpl_defn_ptr_base< T > *field2_base_tmpl_defn_var_base_ptr; + gstruct_base_tmpl_defn_fld_base< T > field2_base_tmpl_defn_var_base_fld; +}; + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.C b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.C new file mode 100644 index 000000000..95a9a31ff --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.C @@ -0,0 +1,126 @@ +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -femit-struct-debug-detailed=sys" } +// { dg-final { scan-assembler "timespec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_sec.*DW_AT_name" } } +// { dg-final { scan-assembler "tv_nsec.*DW_AT_name" } } +// { dg-final { scan-assembler "itimerspec.*DW_AT_name" } } +// { dg-final { scan-assembler "it_interval.*DW_AT_name" } } +// { dg-final { scan-assembler "it_value.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_ordy_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_inc.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ref.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_head_fld.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_decl_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ref_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "gstruct_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_head.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_ordy_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_ordy_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_ordy_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_fld_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_var_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field1_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_inc.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ref.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_ptr.*DW_AT_name" } } +// { dg-final { scan-assembler "field2_base_tmpl_defn_var_base_fld.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler-not "field_head_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_decl_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ref_base.*DW_AT_name" } } +// { dg-final { scan-assembler "gstruct_base_tmpl_defn_ptr_base.*DW_AT_name" } } +// { dg-final { scan-assembler "field_base_tmpl_defn_ptr_base.*DW_AT_name" } } +# 1 "fesd-sys.C" +# 1 "" +# 1 "" +# 1 "fesd-sys.C" + +//#include "time.h" +# 1 "time.h" 1 3 4 +struct timespec + { + long int tv_sec; + long int tv_nsec; + }; + +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +# 6 "fesd-sys.C" 2 + +struct timespec base_var8; +struct itimerspec *base_var9; + +#include "fesd-sys.h" + +struct gstruct_head_ordy_defn_var_base base_var1; +struct gstruct_base_ordy_defn_var_base base_var2; + +struct gstruct_head_tmpl_defn_var_base< int > base_var5; +struct gstruct_base_tmpl_defn_var_base< int > base_var6; + +int base_function() { + return 0 ++ base_var1.field_head_ordy_defn_var_base ++ base_var2.field1_base_ordy_defn_var_base_ptr->field_head_ordy_defn_ptr_base ++ base_var2.field1_base_ordy_defn_var_base_fld.field_head_ordy_defn_fld_base ++ base_var2.field2_base_ordy_defn_var_base_ptr->field_base_ordy_defn_ptr_base ++ base_var2.field2_base_ordy_defn_var_base_fld.field_base_ordy_defn_fld_base ++ base_var5.field_head_tmpl_defn_var_base ++ base_var6.field1_base_tmpl_defn_var_base_ptr->field_head_tmpl_defn_ptr_base ++ base_var6.field1_base_tmpl_defn_var_base_fld.field_head_tmpl_defn_fld_base ++ base_var6.field2_base_tmpl_defn_var_base_ptr->field_base_tmpl_defn_ptr_base ++ base_var6.field2_base_tmpl_defn_var_base_fld.field_base_tmpl_defn_fld_base +; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.h new file mode 100644 index 000000000..762f5878f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd-sys.h @@ -0,0 +1,42 @@ +#include "fesd.h" + +struct gstruct_base_ordy_decl_not; +struct gstruct_base_ordy_defn_not { int field_base_ordy_defn_not; }; + +struct gstruct_base_ordy_decl_ref_base; +struct gstruct_base_ordy_defn_ref_base { int field_base_ordy_defn_ref_base; }; +struct gstruct_base_ordy_defn_ptr_base { int field_base_ordy_defn_ptr_base; }; +struct gstruct_base_ordy_defn_fld_base { int field_base_ordy_defn_fld_base; }; +struct gstruct_base_ordy_defn_var_base { + gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; + +template< typename T > struct gstruct_base_tmpl_decl_not; +template< typename T > struct gstruct_base_tmpl_defn_not +{ int field_base_tmpl_defn_not; }; + +template< typename T > struct gstruct_base_tmpl_decl_ref_base; +template< typename T > struct gstruct_base_tmpl_defn_ref_base +{ int field_base_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_base_tmpl_defn_ptr_base +{ int field_base_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_base_tmpl_defn_fld_base +{ int field_base_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_base_tmpl_defn_var_base { + gstruct_head_tmpl_decl_ref_base< T > *field1_base_tmpl_defn_var_base_inc; + gstruct_head_tmpl_defn_ref_base< T > *field1_base_tmpl_defn_var_base_ref; + gstruct_head_tmpl_defn_ptr_base< T > *field1_base_tmpl_defn_var_base_ptr; + gstruct_head_tmpl_defn_fld_base< T > field1_base_tmpl_defn_var_base_fld; + gstruct_base_tmpl_decl_ref_base< T > *field2_base_tmpl_defn_var_base_inc; + gstruct_base_tmpl_defn_ref_base< T > *field2_base_tmpl_defn_var_base_ref; + gstruct_base_tmpl_defn_ptr_base< T > *field2_base_tmpl_defn_var_base_ptr; + gstruct_base_tmpl_defn_fld_base< T > field2_base_tmpl_defn_var_base_fld; +}; + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/fesd.h b/gcc/testsuite/g++.dg/debug/dwarf2/fesd.h new file mode 100644 index 000000000..83bb15a17 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/fesd.h @@ -0,0 +1,67 @@ +/* +where from: base = matching base; head = other header +what kind: ordy = ordinary struct; tmpl = template struct +definition: decl = incomplete declaration; defn = full definition +how used: not = not used; ref = by ref; ptr = through pointer; + fld = as field; var = as variable +from where: base = from base; head = other header +*/ + +struct gstruct_head_ordy_decl_not; +struct gstruct_head_ordy_defn_not { int field_head_ordy_defn_not; }; + +struct gstruct_head_ordy_decl_ref_head; +struct gstruct_head_ordy_defn_ref_head { int field_head_ordy_defn_ref_head; }; +struct gstruct_head_ordy_defn_ptr_head { int field_head_ordy_defn_ptr_head; }; +struct gstruct_head_ordy_defn_fld_head { int field_head_ordy_defn_fld_head; }; +struct gstruct_head_ordy_defn_var_head { + gstruct_head_ordy_decl_ref_head *field_head_ordy_defn_var_head_inc; + gstruct_head_ordy_defn_ref_head *field_head_ordy_defn_var_head_ref; + gstruct_head_ordy_defn_ptr_head *field_head_ordy_defn_var_head_ptr; + gstruct_head_ordy_defn_fld_head field_head_ordy_defn_var_head_fld; +}; +extern struct gstruct_head_ordy_defn_var_head head_var1; + +struct gstruct_head_ordy_decl_ref_base; +struct gstruct_head_ordy_defn_ref_base { int field_head_ordy_defn_ref_base; }; +struct gstruct_head_ordy_defn_ptr_base { int field_head_ordy_defn_ptr_base; }; +struct gstruct_head_ordy_defn_fld_base { int field_head_ordy_defn_fld_base; }; +struct gstruct_head_ordy_defn_var_base { int field_head_ordy_defn_var_base; }; + +template< typename T > struct gstruct_head_tmpl_decl_not; +template< typename T > struct gstruct_head_tmpl_defn_not +{ T field_head_tmpl_defn_not; }; + +template< typename T > struct gstruct_head_tmpl_decl_ref_head; +template< typename T > struct gstruct_head_tmpl_defn_ref_head +{ T field_head_tmpl_defn_ref_head; }; +template< typename T > struct gstruct_head_tmpl_defn_ptr_head +{ T field_head_tmpl_defn_ptr_head; }; +template< typename T > struct gstruct_head_tmpl_defn_fld_head +{ T field_head_tmpl_defn_fld_head; }; +template< typename T > struct gstruct_head_tmpl_defn_var_head { + gstruct_head_tmpl_decl_ref_head< T > *field_head_tmpl_defn_var_head_inc; + gstruct_head_tmpl_defn_ref_head< T > *field_head_tmpl_defn_var_head_ref; + gstruct_head_tmpl_defn_ptr_head< T > *field_head_tmpl_defn_var_head_ptr; + gstruct_head_tmpl_defn_fld_head< T > field_head_tmpl_defn_var_head_fld; +}; +extern gstruct_head_tmpl_defn_var_head< int > head_var5; + +template< typename T > struct gstruct_head_tmpl_decl_ref_base; +template< typename T > struct gstruct_head_tmpl_defn_ref_base +{ T field_head_tmpl_defn_ref_base; }; +template< typename T > struct gstruct_head_tmpl_defn_ptr_base +{ T field_head_tmpl_defn_ptr_base; }; +template< typename T > struct gstruct_head_tmpl_defn_fld_base +{ T field_head_tmpl_defn_fld_base; }; +template< typename T > struct gstruct_head_tmpl_defn_var_base +{ T field_head_tmpl_defn_var_base; }; + +inline int head_function() { + return 0 ++ head_var1.field_head_ordy_defn_var_head_ptr->field_head_ordy_defn_ptr_head ++ head_var1.field_head_ordy_defn_var_head_fld.field_head_ordy_defn_fld_head ++ head_var5.field_head_tmpl_defn_var_head_ptr->field_head_tmpl_defn_ptr_head ++ head_var5.field_head_tmpl_defn_var_head_fld.field_head_tmpl_defn_fld_head +; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/global-used-types-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/global-used-types-1.C new file mode 100644 index 000000000..69b56478a --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/global-used-types-1.C @@ -0,0 +1,13 @@ +// Contributed by Dodji Seketeli +// { dg-options "-g -dA -fno-merge-debug-strings" } +// { dg-do compile } +// { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_enumeration_type" 1 } } +// { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_enumerator" 2 } } +// { dg-final { scan-assembler-times "ascii \"a.0\"\[\t \]+\[^\n\]*DW_AT_name" 1 } } +// { dg-final { scan-assembler-times "ascii \"b.0\"\[\t \]+\[^\n\]*DW_AT_name" 1 } } + +struct foo +{ + enum { a, b }; +}; +char s[foo::b]; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/icf.C b/gcc/testsuite/g++.dg/debug/dwarf2/icf.C new file mode 100644 index 000000000..523ee8700 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/icf.C @@ -0,0 +1,50 @@ +// Test support for ICF debugging. +// { dg-do compile } +// { dg-options "-O0 -gdwarf-2 -fenable-icf-debug -dA" } + +class A +{ + public: + A(); + virtual void work(); + virtual int p(); + private: + int i; +}; + +class B +{ + public: + B(); + ~B(); + void work(const A* a); + private: + int j; +}; + +int +test1(A* a) +{ + a->work(); +} + +int +test2(A* a) +{ + if (a->p()) + { + B b; + b.work(a); + } +} + +// Verify that we get .debug_dcall and .debug_vcall tables generated +// and that we see entries for both virtual calls. +// { dg-final { scan-assembler "\\.section.*\.debug_dcall" { xfail mips-sgi-irix* } } } +// { dg-final { scan-assembler "\\.section.*\.debug_vcall" } } +// { dg-final { scan-assembler "New caller" { xfail mips-sgi-irix* } } } +// { dg-final { scan-assembler "Caller DIE offset" { xfail mips-sgi-irix* } } } +// { dg-final { scan-assembler "Point of call" } } +// { dg-final { scan-assembler "Callee DIE offset" { xfail mips-sgi-irix* } } } +// { dg-final { scan-assembler "0\[ \t\]+.*Vtable slot" } } +// { dg-final { scan-assembler "0x1\[ \t\]+.*Vtable slot" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-1.C new file mode 100644 index 000000000..bfdb4f8f5 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-1.C @@ -0,0 +1,17 @@ +// PR debug/39524 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -O0 -fno-merge-debug-strings" } + +namespace A +{ + static int var2 = 2; +} + +int +func () +{ + using A::var2; + return var2; +} + +// { dg-final { scan-assembler-times "var2\[^\n\r\]*DW_AT_name" 1 } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C new file mode 100644 index 000000000..65141d74e --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C @@ -0,0 +1,18 @@ +// Contributed by Dodji Seketeli +// Origin: PR debug/38390 +// { dg-do compile } +// { dg-options "-g -dA -gno-strict-dwarf" } +// { dg-final { scan-assembler "DW_TAG_imported_module" } } + +namespace A +{ + int v; +} + +int +f () +{ + using namespace A; + return v; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C new file mode 100644 index 000000000..6c563752a --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C @@ -0,0 +1,17 @@ +// PR debug/39379 +// { dg-do compile } +// { dg-options "-g -dA -gno-strict-dwarf" } +// { dg-final { scan-assembler "DW_TAG_imported_module" } } + +namespace A +{ + int v; +} + +int +main () +{ + using namespace A; + v++; + return v - 1; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C new file mode 100644 index 000000000..a325ce20f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C @@ -0,0 +1,21 @@ +// PR debug/39379 +// { dg-do compile } +// { dg-options "-g -dA -gno-strict-dwarf" } +// { dg-final { scan-assembler "DW_TAG_imported_module" } } + +namespace A +{ + int v; +} + +int +f () +{ + int i; + { + using namespace A; + v++; + i = v - 1; + } + return i; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module.C new file mode 100644 index 000000000..7b25233f1 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module.C @@ -0,0 +1,35 @@ +// Contributed by Dodji Seketeli +// Origin: PR debug/37410 +// { dg-do compile } + +namespace A1 + { + int aaa = 1; + }; +namespace A2 + { + int aaa = 2; + }; + +int +foo (void) +{ + int x; + + { + int block_create; + using namespace A1; + + block_create = aaa; /* break1 */ + } + + { + int block_create; + using namespace A2; + + block_create = aaa; /* break2 */ + } + + return x = 0; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/inline1.C b/gcc/testsuite/g++.dg/debug/dwarf2/inline1.C new file mode 100644 index 000000000..ea405f853 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/inline1.C @@ -0,0 +1,18 @@ +// This isn't really testing dwarf output, but rather that we can inline f +// even though the call precedes the definition. + +// { dg-options "-gdwarf-2 -dA -O" } +// { dg-final { scan-assembler "DW_TAG_inlined_subroutine" } } + +template +inline T f(T); + +int main() +{ + f(1); +} + +int i; + +template +inline T f(T t) { ++i; return t; } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C b/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C new file mode 100644 index 000000000..e0ef7f71c --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C @@ -0,0 +1,13 @@ +// { dg-do compile } +// { dg-options "-g -O0 -dA" } + +struct C { // { dg-function-on-line {_ZN1CC[12]Ev} } + virtual void + foo() {} // { dg-function-on-line _ZN1C3fooEv } +}; +static C dummy; + +int +main (void) +{ // { dg-function-on-line main } +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C new file mode 100644 index 000000000..d61d27fe7 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C @@ -0,0 +1,30 @@ +// Contributed by Dodji Seketeli +// Origin PR27574 +// { dg-do compile } +// { dg-options "-O0 -g" } +// { dg-final { scan-assembler "problem" } } + +void f (int *) +{ +} + +class A +{ +public: + A(int i); +}; + +A::A(int i) +{ + int *problem = new int(i); + f (problem); +} + +int +main (void) +{ + A a (0); + + return 0; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C b/gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C new file mode 100644 index 000000000..c7c55e12d --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/localclass1.C @@ -0,0 +1,76 @@ +// PR c++/27017 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -feliminate-unused-debug-types -fno-merge-debug-strings" } + +int +foo (int arg1) +{ + struct localstruct1 + { + static inline int staticfn1 (int arg2) + { + int var2 = arg2 << 2; + return arg2 + var2; + } + static int staticfn2 (int arg3) + { + int var3 = arg3 << 2; + return arg3 + var3; + } + static inline int staticfn3 (int arg4) + { + int var4 = arg4 << 2; + return arg4 + var4; + } + static int staticfn4 (int arg5) + { + int var5 = arg5 << 2; + return arg5 + var5; + } + int method1 (int arg6) + { + int var6 = arg6 << 2; + return arg6 + var6; + } + }; + struct localstruct2 + { + static inline int staticfn5 (int arg7) + { + int var7 = arg7 << 2; + return arg7 + var7; + } + static int staticfn6 (int arg8) + { + int var8 = arg8 << 2; + return arg8 + var8; + } + }; + return localstruct1::staticfn1 (arg1) + localstruct1::staticfn2 (arg1); +} + +int +main () +{ + return foo (1) - 10; +} + +// { dg-final { scan-assembler "main\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "foo\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn2\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn5\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn6\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "method1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg2\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg5\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg6\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg7\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg8\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "localstruct1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "localstruct2\[^\n\r\]*DW_AT_name" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C b/gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C new file mode 100644 index 000000000..6e9a0664f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/localclass2.C @@ -0,0 +1,76 @@ +// PR c++/27017 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA -O2 -feliminate-unused-debug-types -fno-merge-debug-strings" } + +int +foo (int arg1) +{ + struct localstruct1 + { + static inline int staticfn1 (int arg2) + { + int var2 = arg2 << 2; + return arg2 + var2; + } + static int staticfn2 (int arg3) + { + int var3 = arg3 << 2; + return arg3 + var3; + } + static inline int staticfn3 (int arg4) + { + int var4 = arg4 << 2; + return arg4 + var4; + } + static int staticfn4 (int arg5) + { + int var5 = arg5 << 2; + return arg5 + var5; + } + int method1 (int arg6) + { + int var6 = arg6 << 2; + return arg6 + var6; + } + }; + struct localstruct2 + { + static inline int staticfn5 (int arg7) + { + int var7 = arg7 << 2; + return arg7 + var7; + } + static int staticfn6 (int arg8) + { + int var8 = arg8 << 2; + return arg8 + var8; + } + }; + return localstruct1::staticfn1 (arg1) + localstruct1::staticfn2 (arg1); +} + +int +main () +{ + return foo (1) - 10; +} + +// { dg-final { scan-assembler "main\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "foo\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "staticfn2\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn5\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "staticfn6\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "method1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg2\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "arg3\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg4\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg5\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg6\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg7\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "arg8\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "localstruct1\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler-not "localstruct2\[^\n\r\]*DW_AT_name" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C new file mode 100644 index 000000000..6137125ec --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C @@ -0,0 +1,30 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/41170 +// { dg-options "-g -dA -fno-merge-debug-strings -gno-strict-dwarf" } +// +// We want to test that there is a DW_TAG_namespace DIE DW_AT_name is set +// to "not_emitted". That namespace die has a child DW_TAG_typedef DIE +// which DW_AT_name is the null terminated string "T". +// { dg-final { scan-assembler-times "DIE +\\(\[^\n\]*\\) DW_TAG_namespace" 1 } } +// { dg-final { scan-assembler-times "\"not_emitted.0\"\[^\n\]*DW_AT_name" 1 } } +// { dg-final { scan-assembler-times "DIE +\\(\[^\n\]*\\) DW_TAG_typedef" 1 } } +// { dg-final { scan-assembler-times "\.ascii \"T.0\"\[\t \]+\[^\n\]*DW_AT_name" 1 } } + +struct strukt +{ + int m; +}; + +namespace not_emitted +{ + typedef strukt T; +} + +int +main() +{ + not_emitted::T t; + t.m = 0; + return 0; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C new file mode 100644 index 000000000..336582c11 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C @@ -0,0 +1,29 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/40109 +// { dg-do compile } +// { dg-options "-g -dA -O0" } + +namespace A +{ + + class B + { + }; + typedef A::B AB; +}; + +int +main() +{ + A::AB ab; + return 0; +} + +// { dg-final { scan-assembler "DW_TAG_typedef" } } +// +// What we want to do here is to be sure that the DIE of A::AB is generated +// as a child of the DIE of the namespace A declaration. +// So this test won't catch a regression on this fix yet. To write a proper +// test for this fix, we would need a dwarf reader written in tcl, +// or something along those lines. + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C new file mode 100644 index 000000000..3e6f6b591 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C @@ -0,0 +1,37 @@ +/* + Origin: PR debug/45024 + { dg-options "-g -dA -fno-merge-debug-strings" } + { dg-do compile } +*/ + +struct S { + template struct T { }; +}; + +S::T tval; + +/* +We want to express that the DIE of S::T must be a child of the DIE of S, like in assembly this output: + + .uleb128 0x2 # (DIE (0x9e) DW_TAG_structure_type) + .ascii "S\0" # DW_AT_name + .byte 0x1 # DW_AT_byte_size + .byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc) + .byte 0x1 # DW_AT_decl_line + .long 0xbc # DW_AT_sibling + .uleb128 0x3 # (DIE (0xa8) DW_TAG_structure_type) + .ascii "T\0" # DW_AT_name + .byte 0x1 # DW_AT_byte_size + .byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc) + .byte 0x2 # DW_AT_decl_line + .uleb128 0x4 # (DIE (0xb3) DW_TAG_template_type_param) + .ascii "Z\0" # DW_AT_name + .long 0xbc # DW_AT_type + .byte 0 # end of children of DIE 0xa8 + .byte 0 # end of children of DIE 0x9e + +Hence the slightly odd regexp: + + { dg-final { scan-assembler "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"S\\\\0\"\[ \t\]+\(\[@|#;!\]|//?\)\[ \t\]+DW_AT_name\[\n\r\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"T\\\\0\"\[ \t\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_template_type_param\\)\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\(\[@|#;!\]|//?\)\[ \t\]+end of children of DIE\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE\[^\n\r\]*" } } + + */ diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C new file mode 100644 index 000000000..f23efef13 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C @@ -0,0 +1,20 @@ +// Contributed by Cary Coutant +// Origin: PR debug/41063 +// { dg-do compile } + +struct A { + virtual void run(); +}; + +void test() { + struct B : public A { + void run() { + struct C : public A { + C() { } + B *b_; + }; + C c; + } + }; + B b; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C new file mode 100644 index 000000000..2df002f6b --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C @@ -0,0 +1,41 @@ +// Origin: PR 44641 +// { dg-do compile } +// { dg-options "-g -O0 -dA" } + +template struct MisplacedDbg; +template struct MisplacedDbg; +struct Full; +template<> struct MisplacedDbg; + +struct Arg; +typedef MisplacedDbg Typedef1; +typedef MisplacedDbg Typedef2; +typedef MisplacedDbg Typedef3; + +template struct Base { + virtual ~Base() { + } +}; + +template <> +struct MisplacedDbg // { dg-function-on-line {_ZN12MisplacedDbgI4FullEC[12]Ev} } + // { dg-function-on-line {_ZN12MisplacedDbgI4FullED0Ev} { target *-*-* } 21 } + + : public Base { +}; + +template +struct MisplacedDbg // { dg-function-on-line {_ZN12MisplacedDbgIP3ArgEC[12]Ev} } + // { dg-function-on-line {_ZN12MisplacedDbgIP3ArgED0Ev} { target *-*-* } 28 } + : public Base { +}; + +template +struct MisplacedDbg // { dg-function-on-line {_ZN12MisplacedDbgI3ArgEC[12]Ev} } + // { dg-function-on-line {_ZN12MisplacedDbgI3ArgED0Ev} { target *-*-* } 34 } + : public Base { +}; + +static MisplacedDbg static_var1; +static MisplacedDbg static_var2; +static MisplacedDbg static_var3; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C new file mode 100644 index 000000000..72f24ad4a --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C @@ -0,0 +1,22 @@ +// PR debug/45997 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA" } + +typedef int my_int; +typedef const my_int const_my_int; +typedef volatile const_my_int volatile_const_my_int; + +my_int v_my_int = 0; +const_my_int v_const_my_int = 1; +volatile_const_my_int v_volatile_const_my_int = 4; + +int +main () +{ + asm volatile ("" : : "r" (&v_my_int)); + asm volatile ("" : : "r" (&v_const_my_int)); + asm volatile ("" : : "r" (&v_volatile_const_my_int)); + return 0; +} + +// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_base_type" 1 } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-2.C new file mode 100644 index 000000000..ade542804 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr45997-2.C @@ -0,0 +1,22 @@ +// PR debug/45997 +// { dg-do compile } +// { dg-options "-gdwarf-2 -dA" } + +typedef int my_int; +typedef volatile my_int volatile_my_int; +typedef const volatile_my_int const_volatile_my_int; + +my_int v_my_int = 0; +volatile_my_int v_volatile_my_int = 1; +const_volatile_my_int v_const_volatile_my_int = 4; + +int +main () +{ + asm volatile ("" : : "r" (&v_my_int)); + asm volatile ("" : : "r" (&v_volatile_my_int)); + asm volatile ("" : : "r" (&v_const_volatile_my_int)); + return 0; +} + +// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_base_type" 1 } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C new file mode 100644 index 000000000..eee192c26 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C @@ -0,0 +1,47 @@ +// PR debug/46123 +// { dg-do compile } +// { dg-options "-gdwarf-4" } + +struct foo +{ + static int bar () + { + int i; + static int baz = 1; + { + static int baz = 2; + i = baz++; + } + { + struct baz + { + static int m () + { + static int n; + return n += 10; + } + }; + baz a; + i += a.m (); + } + { + static int baz = 3; + i += baz; + baz += 30; + } + i += baz; + baz += 60; + return i; + } +}; + +int main () +{ + foo x; + + if (x.bar () != 16) + return 1; + if (x.bar() != 117) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C new file mode 100644 index 000000000..dfc983b17 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C @@ -0,0 +1,18 @@ +// Origin: PR 46527 +// { dg-do compile } +// { dg-options "-g -O0 -dA" } + +template struct Struct { + double defined_later(); +}; +struct WrapperStruct { + Struct ClassInstantiated; +}; +template double +Struct::defined_later() // { dg-function-on-line {_ZN6StructIdE13defined_laterEv} } +{ + return 1; +} +void InstantiateMethod() { + Struct().defined_later(); +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C new file mode 100644 index 000000000..63e04e426 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C @@ -0,0 +1,17 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/39706 +// { dg-do compile { target *-*-darwin* } } +// { dg-options "-g -dA -fno-merge-debug-strings" } +// +// There should be one debug_pubnames section generated. +// { dg-final { scan-assembler-times "\.section\[\t \]\[^\n\]*debug_pubnames" 1 } } +// +// Then check of the presence of the names we are interested in. +// { dg-final { scan-assembler-times "\"main.0\"\[^\n\]*external name" 1 } } +// { dg-final { scan-assembler-times "\"ns::ns_x\[^\n\]*external name" 1 } } +// { dg-final { scan-assembler-times "\"y::y_x\[^\n\]*external name" 1 } } + +namespace ns { int ns_x; } +class y { public: static int y_x; }; +int y::y_x; +int main() { return ns::ns_x; } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C new file mode 100644 index 000000000..8aaff8ef2 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C @@ -0,0 +1,18 @@ +// Origin: PR debug/43325 +// { dg-options "-g -dA" } +// { dg-do compile } + +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE \[^\n\r\]*DW_TAG_lexical_block\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_low_pc\[\n\r\]{1,2}\[^\n\r\]*DW_AT_high_pc\[\n\r\]{1,2}\[^\n\r\]*\\(DIE \[^\n\r\]*DW_TAG_variable\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_name" 2 } } + +namespace S +{ + int + f() + { + int i = 42; + { + extern int i; + return i; + } + } +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/rv1.C b/gcc/testsuite/g++.dg/debug/dwarf2/rv1.C new file mode 100644 index 000000000..c954daa91 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/rv1.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-g -dA -gdwarf-4 -std=c++0x" } +// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_reference_type" 1 } } +// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_rvalue_reference_type" 1 } } + +struct A { A (); ~A (); }; +struct B { B (); ~B (); }; + +void +foo () +{ + A v; + A &a = v; + B &&b = B (); +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C new file mode 100644 index 000000000..81bcb2775 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C @@ -0,0 +1,28 @@ +// Origin: PR debug/45088 +// { dg-do compile } +// { dg-options "-g -dA" } +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } } + +struct A +{ + virtual ~A(); +}; + +struct B : public A +{ + virtual ~B(){} +}; + +struct C : public B +{ + A* a1; +}; + +int +main() +{ + C c; + c.a1 = 0; + return 0; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C new file mode 100644 index 000000000..b1c5401da --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C @@ -0,0 +1,29 @@ +// Origin: PR debug/45088 +// { dg-do compile } +// { dg-options "-g -dA" } +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } } + +template +struct A +{ + virtual ~A(); +}; + +struct B : public A +{ + virtual ~B(){} +}; + +struct C : public B +{ + A* a1; +}; + +int +main() +{ + C c; + c.a1 = 0; + return 0; +} + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member1.C b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member1.C new file mode 100644 index 000000000..dce279ed4 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member1.C @@ -0,0 +1,12 @@ +// { dg-do compile } +// { dg-options "-g -dA -fno-merge-debug-strings" } + +struct A +{ + static int staticdatamember; +}; + +int A::staticdatamember = 6; + +// { dg-final { scan-assembler "DW_TAG_member\[^\n\r\]*\[\n\r\]*\[^\n\r\]*staticdatamember\[^\n\r\]*DW_AT_name" } } +// { dg-final { scan-assembler "DW_TAG_variable\[^\n\r\]*\[\n\r\]*\[^\n\r\]*DW_AT_specification" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C new file mode 100644 index 000000000..568144503 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/static-data-member2.C @@ -0,0 +1,12 @@ +// PR debug/26965 +// { dg-options "-gdwarf-2 -dA" } +// { dg-final { scan-assembler-not "DW_TAG_variable" } } +// { dg-final { scan-assembler-not "DW_TAG_enumerator" } } +// { dg-final { scan-assembler-not "DW_TAG_enumeration_type" } } + +enum x { i = 1 }; +class c { + static const x beg = i; + int foo () { return (int) beg; } +}; +void bar () { } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/static-local-var-in-ctor.C b/gcc/testsuite/g++.dg/debug/dwarf2/static-local-var-in-ctor.C new file mode 100644 index 000000000..a1bf6b53c --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/static-local-var-in-ctor.C @@ -0,0 +1,37 @@ +// PR debug/39372 +// { dg-do compile } +// { dg-options "-O0 -g -dA" } +// { dg-final { scan-assembler "DW_OP_addr\[^\n\r\]*\[\n\r\]*\[^\n\r\]*staticvar1" } } +// { dg-final { scan-assembler "DW_OP_addr\[^\n\r\]*\[\n\r\]*\[^\n\r\]*staticvar2" } } + +extern void f (int *); + +struct A +{ + A(int i); + void foo(int i); +}; + +A::A(int i) +{ + static int *staticvar1 = new int(i); + f (staticvar1); +} + +void A::foo(int i) +{ + static int *staticvar2 = new int(i); + f (staticvar2); +} + +void f (int *) +{ +} + +int +main (void) +{ + A a(42); + a.foo(42); + return 0; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C new file mode 100644 index 000000000..3a43d9fa5 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C @@ -0,0 +1,16 @@ +// Contributed by Dodji Seketeli +// origin PR debug/30161 +// { dg-options "-g -dA" } +// { dg-do compile } +// { dg-final { scan-assembler "DW_TAG_template_type_param" } } +// { dg-final { scan-assembler "U.*DW_AT_name" } } + +template +U +func(U m) +{ + return m; +} + +int i = func(2); + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C new file mode 100644 index 000000000..27c68d796 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C @@ -0,0 +1,22 @@ +// Contributed by Dodji Seketeli +// origin PR debug/30161 +// { dg-options "-g -dA" } +// { dg-do compile } +// { dg-final { scan-assembler "DW_TAG_template_value_param" } } +// { dg-final { scan-assembler "i.*DW_AT_name" } } +// { dg-final { scan-assembler "3.*DW_AT_const_value" } } + + +template +int +func() +{ + int j = i; + return j; +} + +const int foo = 1; +const int bar = 2; + +int h = func(); + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C new file mode 100644 index 000000000..4c7249035 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C @@ -0,0 +1,24 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/30161 +// { dg-options "-g -dA -gno-strict-dwarf -fno-merge-debug-strings" } +// { dg-final { scan-assembler "DW_TAG_template_value_param" } } +// { dg-final { scan-assembler "f.*DW_AT_name" } } +// { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */ + +typedef void (*func_ptr)(); + +template +int +func() +{ + f(); + return 0; +} + +void +bleh() +{ +} + +int c = func(); + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-4.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-4.C new file mode 100644 index 000000000..85401b228 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-4.C @@ -0,0 +1,38 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/30161 +// { dg-options "-std=c++0x -g -dA" } +// +// In theory the compiler instantiates count, +// count and count. In practice, only +// count is emitted, thanks to constant folding. +// So in theory, each of the 3 instances of count yields a +// DW_TAG_GNU_template_parameter_pack DIE, but in practise, there is only one +// DW_TAG_GNU_template_parameter_pack as there is only count +// is emitted. +// { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_GNU_template_parameter_pack" 1} } +// { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_template_type_param" 3} } + + +template struct count; + +template <> +struct count<> +{ + static const int value = 0; +}; + +template +struct count +{ + static const int value = 1 + count::value; +}; + +template +int +do_count() +{ + return count::value; +} + +int c = do_count(); + diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C new file mode 100644 index 000000000..c4fd8dc3e --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C @@ -0,0 +1,28 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/30161 +// { dg-options "-g -dA" } +// { dg-final { scan-assembler "DW_TAG_template_type_param" } } +// { dg-final { scan-assembler "T.*DW_AT_name" } } + +template +struct vector +{ + int size; + + vector () : size (0) + { + } +}; + + +template