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.dg/debug/dwarf2/aranges-fnsec-1.c | 15 +++ gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c | 9 ++ gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c | 6 ++ gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c | 7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c | 13 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c | 13 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c | 8 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c | 16 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c | 8 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c | 7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c | 11 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c | 12 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c | 12 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c | 14 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c | 9 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c | 15 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c | 10 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c | 10 ++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c | 13 +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp | 43 ++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c | 84 ++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c | 83 ++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c | 84 ++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c | 83 ++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c | 83 ++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h | 36 +++++++ .../gcc.dg/debug/dwarf2/global-used-types.c | 14 +++ gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c | 18 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c | 70 +++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c | 22 +++++ gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c | 30 ++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c | 32 ++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c | 53 ++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c | 19 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c | 22 +++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c | 39 ++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c | 53 ++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c | 41 ++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c | 25 +++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c | 18 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c | 9 ++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c | 18 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c | 9 ++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c | 14 +++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c | 8 ++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c | 14 +++ gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c | 18 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c | 31 ++++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c | 12 +++ gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c | 13 +++ gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c | 108 +++++++++++++++++++++ gcc/testsuite/gcc.dg/debug/dwarf2/static1.c | 8 ++ gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c | 17 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/var1.c | 10 ++ gcc/testsuite/gcc.dg/debug/dwarf2/var2.c | 14 +++ 60 files changed, 1558 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/static1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/var1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/var2.c (limited to 'gcc/testsuite/gcc.dg/debug/dwarf2') diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c new file mode 100644 index 000000000..8a97e4dc2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c @@ -0,0 +1,15 @@ +/* Test that .debug_aranges and .debug_ranges do not have an entry for the + text section if nothing went in there. */ +/* Origin: Joseph Myers */ +/* { dg-do compile } */ +/* { dg-require-effective-target function_sections } */ +/* { dg-options "-gdwarf-2 -ffunction-sections -w -dA" } */ +/* { dg-final { scan-assembler-not "\\.Letext0-\\.Ltext0" } } */ +/* { dg-final { scan-assembler-not "\\.Ltext0\[^\n\r\]*Offset 0x0" } } */ +/* { dg-final { scan-assembler "DW_AT_ranges" } } */ + +int +f (void) +{ + return 1; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c new file mode 100644 index 000000000..b7bd66a60 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c @@ -0,0 +1,9 @@ +// { dg-options "-std=iso9899:1999 -gdwarf-2" } + +void f() { + int n = 3; + typedef int T[n++]; + + T t; + t[0] = 7; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c new file mode 100644 index 000000000..16e1d8bd1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile { target powerpc_altivec_ok } } */ +/* { dg-options "-O -gdwarf-2 -dA -maltivec" } */ +/* { dg-final { scan-assembler "DW_AT_const_value" } } */ + +typedef float FloatVect __attribute__((__vector_size__(16))); +static FloatVect Foo = { 250000000.0, 0.0, 0.0, 0.0 }; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c new file mode 100644 index 000000000..6cbdc85b3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c @@ -0,0 +1,7 @@ +/* { dg-do compile { target i386*-*-* } } */ +/* { dg-options "-O -gdwarf-2 -dA -msse" } */ +/* { dg-require-effective-target sse } */ +/* { dg-final { scan-assembler "DW_AT_const_value" } } */ + +typedef float FloatVect __attribute__((__vector_size__(16))); +static FloatVect Foo = { 250000000.0, 0.0, 0.0, 0.0 }; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c new file mode 100644 index 000000000..ed32349b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c @@ -0,0 +1,13 @@ +/* PR debug/7241 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-skip-if "Unmatchable assembly" { mmix-*-* } { "*" } { "" } } */ +/* { dg-final { scan-assembler "0x\[68\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ +/* { dg-final { scan-assembler-not "0x\[57\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ + +char a; +const char b; +signed char c; +volatile signed char d; +unsigned char e; +volatile const unsigned char f; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c new file mode 100644 index 000000000..dc145852f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c @@ -0,0 +1,13 @@ +/* PR debug/7241 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-skip-if "Unmatchable assembly" { mmix-*-* } { "*" } { "" } } */ +/* { dg-final { scan-assembler "0x\[68\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ +/* { dg-final { scan-assembler-not "0x\[57\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ + +const char a; +char b; +volatile signed char c; +signed char d; +const volatile unsigned char e; +unsigned char f; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c new file mode 100644 index 000000000..edc1d83ed --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c @@ -0,0 +1,8 @@ +/* PR debug/7241 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-skip-if "Unmatchable assembly" { mmix-*-* } { "*" } { "" } } */ +/* { dg-final { scan-assembler "0x\[68\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ +/* { dg-final { scan-assembler-not "0x\[57\]\[ \t\]+\[#@;!/|\]+\[ \t\]+DW_AT_encoding" } } */ + +const char *p = "abc"; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c new file mode 100644 index 000000000..ddb602250 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c @@ -0,0 +1,16 @@ +/* Verify the DWARF encoding of C99 decimal floating point types. */ + +/* { dg-do compile */ +/* { dg-require-effective-target dfp } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "0x10.*DW_AT_encoding" } } */ +/* { dg-final { scan-assembler "0x4.*DW_AT_byte_size" } } */ +/* { dg-final { scan-assembler "0x8.*DW_AT_byte_size" } } */ +/* { dg-final { scan-assembler "0x10.*DW_AT_byte_size" } } */ + +void foo () +{ + _Decimal32 f = 1.5df; + _Decimal64 d = 1.5dd; + _Decimal128 l = 1.5dl; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c new file mode 100644 index 000000000..fdfbf8321 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c @@ -0,0 +1,8 @@ +/* Verify that inline function never actually inlined has no abstract DIE. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler-not "DW_AT_inline" } } */ +inline int t() +{ +} +int (*q)()=t; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c new file mode 100644 index 000000000..ac897ab78 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c @@ -0,0 +1,7 @@ +/* Verify that inline function never actually emit has no DIE. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler-not "CIE Version" } } */ +static inline int t() +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c new file mode 100644 index 000000000..04b2f36c3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c @@ -0,0 +1,11 @@ +/* Verify that extern inline function never actually inlined has no abstract DIE. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler-not "DW_AT_inline" } } */ +extern inline int t() +{ +} +int (*q)()=t; +int t() +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c new file mode 100644 index 000000000..3fefd41ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c @@ -0,0 +1,12 @@ +/* Inlined inline function must have abstract DIE */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA -fpreprocessed" } */ +/* { dg-final { scan-assembler "3.*DW_AT_inline" } } */ +#1 "test.h" +inline int t() +{ +} +int q() +{ + t(); +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c new file mode 100644 index 000000000..d8f477f54 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c @@ -0,0 +1,12 @@ +/* not inline inline function must not have abstract DIE */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-inline -gdwarf-2 -dA -fpreprocessed" } */ +/* { dg-final { scan-assembler-not "DW_AT_inline" } } */ +#1 "test.h" +inline int t() +{ +} +int q() +{ + t(); +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c new file mode 100644 index 000000000..b747076ba --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c @@ -0,0 +1,14 @@ +/* Inlined non-inline function must have abstract DIE */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA -fpreprocessed" } */ +/* { dg-final { scan-assembler "1.*DW_AT_inline" } } */ +#1 "test.h" +void f(void); +static int t() +{ + f(); +} +int q() +{ + t(); +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c new file mode 100644 index 000000000..c68dfe436 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "File Entry:|.file" } } */ +/* Verify that a file entry is output for this file. Only systems that + do not define HAVE_AS_DWARF2_DEBUG_LINE will put out "File Entry:", + but systems that do define HAVE_AS_DWARF2_DEBUG_LINE will put out a + ".file" so we check for either. */ + +int bar = 3; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c new file mode 100644 index 000000000..84d605fcd --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c @@ -0,0 +1,15 @@ +/* Verify the DWARF encoding of C99 floating point types. */ + +/* { dg-do compile */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "0x4.*DW_AT_encoding" } } */ +/* { dg-final { scan-assembler "0x4.*DW_AT_byte_size" } } */ +/* { dg-final { scan-assembler "0x8.*DW_AT_byte_size" } } */ +/* { dg-final { scan-assembler "0x10.*DW_AT_byte_size" } } */ + +void foo () +{ + float f = 1.5f; + double d = 1.5; + long double l = 1.5l; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c new file mode 100644 index 000000000..767d38b17 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c @@ -0,0 +1,10 @@ +/* Verify that mergeable strings are used in the CU DIE. */ +/* { dg-do compile } */ +/* { dg-require-effective-target string_merging } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "DW_AT_producer: \"GNU C" } } */ +/* { dg-final { scan-assembler-not "GNU C\[^\\n\\r\]*DW_AT_producer" } } */ + +void func (void) +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c new file mode 100644 index 000000000..7bcebe355 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "DW_TAG_variable" } } */ +/* PR debug/21828 */ + +static int i; +int main() { + i += 3; + return 0; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c new file mode 100644 index 000000000..4efb25e8c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c @@ -0,0 +1,13 @@ +/* Test to make sure the mcaro info includes a start file command for the main source */ +/* { dg-do compile } */ +/* { dg-options "-g3 -gdwarf-2 -dA -fverbose-asm" } */ +/* { dg-final { scan-assembler "Start new file" } } */ + +#define ADD(x) (M + x) + +int main (void) +{ +#define N 28 +#define M 42 + return ADD(N); +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp new file mode 100644 index 000000000..dfc387dbe --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp @@ -0,0 +1,43 @@ +# Copyright (C) 2002, 2007, 2010 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 +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors -gdwarf-2" +} + +# Initialize `dg'. +dg-init + +# Main loop. +set comp_output [gcc_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/*.\[cS\] $srcdir/c-c++-common/dwarf2/*.c]] \ + "" $DEFAULT_CFLAGS +} + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c new file mode 100644 index 000000000..fc510903c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c @@ -0,0 +1,84 @@ +// { 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_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" } } +# 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; + +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 +; +} + diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h new file mode 100644 index 000000000..a7146b65e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h @@ -0,0 +1,19 @@ +#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 { + struct gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + struct gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + struct gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + struct gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + struct gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + struct gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + struct gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + struct gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c new file mode 100644 index 000000000..a32abb5a2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c @@ -0,0 +1,83 @@ +// { 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 "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" } } +# 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; + +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 +; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h new file mode 100644 index 000000000..a7146b65e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h @@ -0,0 +1,19 @@ +#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 { + struct gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + struct gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + struct gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + struct gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + struct gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + struct gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + struct gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + struct gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c new file mode 100644 index 000000000..bd218f826 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c @@ -0,0 +1,84 @@ +// { 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_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" } } +# 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; + +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 +; +} + diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h new file mode 100644 index 000000000..a7146b65e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h @@ -0,0 +1,19 @@ +#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 { + struct gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + struct gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + struct gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + struct gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + struct gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + struct gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + struct gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + struct gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c new file mode 100644 index 000000000..ac599f43f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c @@ -0,0 +1,83 @@ +// { 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_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" } } +# 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; + +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 +; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h new file mode 100644 index 000000000..a7146b65e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h @@ -0,0 +1,19 @@ +#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 { + struct gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + struct gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + struct gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + struct gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + struct gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + struct gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + struct gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + struct gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c new file mode 100644 index 000000000..3a5c0bf14 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c @@ -0,0 +1,83 @@ +// { 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 "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" } } +# 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; + +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 +; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h new file mode 100644 index 000000000..a7146b65e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h @@ -0,0 +1,19 @@ +#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 { + struct gstruct_head_ordy_decl_ref_base *field1_base_ordy_defn_var_base_inc; + struct gstruct_head_ordy_defn_ref_base *field1_base_ordy_defn_var_base_ref; + struct gstruct_head_ordy_defn_ptr_base *field1_base_ordy_defn_var_base_ptr; + struct gstruct_head_ordy_defn_fld_base field1_base_ordy_defn_var_base_fld; + struct gstruct_base_ordy_decl_ref_base *field2_base_ordy_defn_var_base_inc; + struct gstruct_base_ordy_defn_ref_base *field2_base_ordy_defn_var_base_ref; + struct gstruct_base_ordy_defn_ptr_base *field2_base_ordy_defn_var_base_ptr; + struct gstruct_base_ordy_defn_fld_base field2_base_ordy_defn_var_base_fld; +}; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h new file mode 100644 index 000000000..46b24f5e9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h @@ -0,0 +1,36 @@ +/* +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 { + struct gstruct_head_ordy_decl_ref_head *field_head_ordy_defn_var_head_inc; + struct gstruct_head_ordy_defn_ref_head *field_head_ordy_defn_var_head_ref; + struct gstruct_head_ordy_defn_ptr_head *field_head_ordy_defn_var_head_ptr; + struct 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; }; + +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 +; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c b/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c new file mode 100644 index 000000000..54fa58ae3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c @@ -0,0 +1,14 @@ +/* + 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 } } + */ + +enum { a, b }; + +int v = a; +char s[b]; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c new file mode 100644 index 000000000..11c8fad78 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ +void e(int); +__attribute__ ((always_inline)) inline int +t(int function_parameter) +{ + e(function_parameter); +} + +void test (int function_parameter2) +{ + t(function_parameter2); +} + +/* Verify that we get both function_parameter and function_parameter2 declared + in test. Overall we should have 3 variables with location defined (also + function_parameter in offline copy of t. */ +/* { dg-final { scan-assembler-times " DW_AT_location" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c new file mode 100644 index 000000000..20edb588e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c @@ -0,0 +1,70 @@ +/* Contributed by Dodji Seketeli + Origin: PR debug/37801 + + Abstract instances (DW_TAG_subroutines having the DW_AT_inline attribute) + of second and first were having a DW_TAG_lexical_block DIE wrongly + representing the inlined calls to third (in second) and to + second (in first). At the same time, main didn't have children + DW_TAG_inlined_subroutine DIEs representing the inlined calls to + first, second and third. + + The ideal goal here is to test that we have no superfluous + DW_TAG_lexical_block DIE anymore, that abstract instances DIEs have + no descendant DIE with a DW_AT_abstract_origin attribute, and that main has + properly nested DW_TAG_inlined_subroutine DIEs for third, second and first. +*/ + +/* { dg-options "-O -g3 -dA" } */ +/* { dg-do compile } */ + +/* There are 6 inlined subroutines: + - One for each subroutine inlined into main, that's 3. + - One for earch subroutine inline into the out of line instances + of third, second and first. */ +/* { dg-final { scan-assembler-times "\\(DIE \\(\[^\n\]*\\) DW_TAG_inlined_subroutine" 6 } } */ + +/* Likewise we should have 6 DW_TAG_lexical_block DIEs: + - One for each subroutine inlined into main, so that's 3. + - One for each subroutine inlined in the out of line instances + of third, second and first, that's 3. +*/ +/* { dg-final { scan-assembler-times "\\(DIE \\(\[^\n\]*\\) DW_TAG_lexical_block" 6 } } */ + + +/* There are 3 DW_AT_inline attributes: one per abstract inline instance. + The value of the attribute must be 0x3, meaning the function was + actually inlined. */ +/* { dg-final { scan-assembler-times "(?:byte|data1)\[^\n\]*0x3\[^\n\]* DW_AT_inline" 3 } } */ + +volatile int *a; + +inline void +third (int arg3) +{ + int var3 = arg3; + a[0] = var3; +} + +inline void +second (int arg2) +{ + int var2 = arg2; + third (var2+1); +} + +inline void +first (int arg1) +{ + int var1 = arg1; + second (var1+1); +} + +int +main () +{ + int some_int = 1; + first (some_int); + return 0; +} + + diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c new file mode 100644 index 000000000..feafb33e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c @@ -0,0 +1,22 @@ +/* Verify that only one DW_AT_const_value is emitted for baz, + not for baz abstract DIE and again inside of + DW_TAG_inlined_subroutine. */ +/* { dg-options "-O2 -g -dA" } */ +/* { dg-do compile } */ +/* { dg-final { scan-assembler-times " DW_AT_const_value" 1 } } */ + +struct A { const long i; const long j; }; + +static inline long +foo (void) +{ + const struct A baz = { .i = 2, .j = 21 }; + asm volatile ("" : : : "memory"); + return baz.i * baz.j; +} + +int +main () +{ + return foo () - 42; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c new file mode 100644 index 000000000..7442dab19 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +void q(int p); +static void +t(int constant_propagated_par) +{ + int local_var = constant_propagated_par + 1; + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); + q(local_var); +} +main() +{ + t(5); + t(5); + t(5); + t(5); + t(5); + t(5); + t(5); +} +/* { dg-final { scan-assembler "local_var" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c new file mode 100644 index 000000000..5476aac0a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c @@ -0,0 +1,32 @@ +/* PR debug/29609 */ +/* Verify that breakpoint on the break is hit. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +void abort (void); + +int +foo (void) +{ + int a, i; + + for (i = 1; i <= 10; i++) + { + if (i < 3) + a = 1; + else + break; + a = 5; + } + return a; +} + +int +main (void) +{ + if (foo () != 5) + abort (); + return 0; +} + +/* { dg-final { scan-assembler "pr29609-1.c:18" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c new file mode 100644 index 000000000..43bc54524 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c @@ -0,0 +1,53 @@ +/* PR debug/29609 */ +/* Verify that breakpoint on both goto failure; stmts is hit. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +extern void abort (void); +int x; + +int +foo (void) +{ + return 0 ^ x; +} + +int +bar (void) +{ + return 1 ^ x; +} + +int +baz (void) +{ + int c; + + if (!foo ()) + goto failure; + + if (!bar ()) + goto failure; + + return 0; + +failure: + return 1; +} + +int +main (void) +{ + if (baz () != 1) + abort (); + x = 1; + if (baz () != 1) + abort (); + x = 2; + if (baz () != 0) + abort (); + return 0; +} + +/* { dg-final { scan-assembler "pr29609-2.c:27" } } */ +/* { dg-final { scan-assembler "pr29609-2.c:30" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c new file mode 100644 index 000000000..ce26ec639 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-gdwarf-2 -dA --param ggc-min-expand=0 --param ggc-min-heapsize=0" } */ +/* { dg-final { scan-assembler-times "DIE.*DW_TAG_array_type" 1 } } */ +/* { dg-final { scan-assembler-times "DIE.*DW_TAG_subrange_type" 1 } } */ + +void f1 (void) +{ + char buffer1[100]; +} + +int f2 (void) +{ + return 0; +} + +void f3 (void) +{ + char buffer2[100]; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c new file mode 100644 index 000000000..de90acb81 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c @@ -0,0 +1,22 @@ +/* PR debug/36690 */ +/* Verify that break func is hit. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +int i; + +void +func (void) +{ + while (i == 1) + i = 0; +} + +int +main (void) +{ + func (); + return 0; +} + +/* { dg-final { scan-assembler "pr36690-1.c:11" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c new file mode 100644 index 000000000..2330f5385 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c @@ -0,0 +1,39 @@ +/* PR debug/36690 */ +/* Verify that breakpoint can be put on goto f1, it is hit and + varz at that spot is defined and contains 5. Nowhere else + in the function should be varz in the scope. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +int cnt; + +void +bar (int i) +{ + cnt += i; +} + +void +foo (int i) +{ + if (!i) + bar (0); + else + { + static int varz = 5; + goto f1; + } + bar (1); +f1: + bar (2); +} + +int +main (void) +{ + foo (0); + foo (1); + return 0; +} + +/* { dg-final { scan-assembler "pr36690-2.c:24" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c new file mode 100644 index 000000000..234ad1263 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c @@ -0,0 +1,53 @@ +/* PR debug/36690 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +int cnt; + +void +bar (int i) +{ + cnt += i; +} + +void +foo (int i, int j) +{ + if (j) + { + bar (i + 1); + goto f1; + } + bar (i + 2); + goto f2; +f1: + if (i > 10) + goto f3; +f2: + if (i > 40) + goto f4; + else + goto f5; +f3: + bar (i); +f4: + bar (i); +f5: + bar (i); +} + +int +main (void) +{ + foo (0, 1); + foo (11, 1); + foo (21, 0); + foo (41, 0); + return 0; +} + +/* { dg-final { scan-assembler "pr36690-3.c:19" } } */ +/* { dg-final { scan-assembler "pr36690-3.c:22" } } */ +/* { dg-final { scan-assembler "pr36690-3.c:25" } } */ +/* { dg-final { scan-assembler "pr36690-3.c:28" } } */ +/* { dg-final { scan-assembler "pr36690-3.c:30" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c new file mode 100644 index 000000000..badff447a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c @@ -0,0 +1,41 @@ +/* PR debug/37616 */ +/* Test that one can put breakpoints onto continue, exitlab and break + and actually see program reaching those breakpoints. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +extern void abort (void); + +int +foo (int parm) +{ + int varj, varm; + + for (varj = 0; varj < 10; varj++) + { + if (varj == 5) + continue; + if (varj == 7 && !parm) + goto exitlab; + if (varj == 9) + break; + varm = varj; + } + +exitlab: + return varm; +} + +int +main (void) +{ + if (foo (0) != 6) + abort (); + if (foo (1) != 8) + abort (); + return 0; +} + +/* { dg-final { scan-assembler "pr37616.c:17" } } */ +/* { dg-final { scan-assembler "pr37616.c:19" } } */ +/* { dg-final { scan-assembler "pr37616.c:21" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c new file mode 100644 index 000000000..60fb83961 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c @@ -0,0 +1,25 @@ +/* PR debug/37726 */ +/* { dg-do compile } */ +/* { dg-options "-g -O0 -dA -fno-merge-debug-strings" } */ + +int foo (int parm) +{ + int var = 0; + int bar (void) + { + return parm + var; + } + parm++; + var++; + return bar (); +} + +int +main (void) +{ + return foo (4) - 6; +} + +/* Both parm and var variables should be in debug info for both foo and bar. */ +/* { dg-final { scan-assembler-times "\"parm\[^\n\]*\"\[^\n\]*DW_AT_name" 2 } } */ +/* { dg-final { scan-assembler-times "\"var\[^\n\]*\"\[^\n\]*DW_AT_name" 2 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c new file mode 100644 index 000000000..452c0f680 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c @@ -0,0 +1,18 @@ +/* PR preprocessor/41445 */ +/* Test that token after multi-line function-like macro use + gets correct locus even when preprocessing separately. */ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -O0 -dA -fno-merge-debug-strings" } */ + +#define A(a,b) +int varh;A(1, + + + + 2)int vari; +int varj; + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varh\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?8\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xc|12)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xd|13)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c new file mode 100644 index 000000000..d2ee408ac --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c @@ -0,0 +1,9 @@ +/* PR preprocessor/41445 */ +/* { dg-do compile } */ +/* { dg-options "-g -O0 -dA -fno-merge-debug-strings" } */ + +#include "pr41445-1.c" + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varh\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?8\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xc|12)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xd|13)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c new file mode 100644 index 000000000..2a74dc5e3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c @@ -0,0 +1,18 @@ +/* PR preprocessor/41445 */ +/* Test that token after multi-line function-like macro use + gets correct locus even when preprocessing separately. */ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -O0 -dA -fno-merge-debug-strings" } */ + +#define A(a,b) +int varh;/* + +Some multi-line comment. + + */int vari; +int varj; + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varh\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?8\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xc|12)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xd|13)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c new file mode 100644 index 000000000..8aa92de5d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c @@ -0,0 +1,9 @@ +/* PR preprocessor/41445 */ +/* { dg-do compile } */ +/* { dg-options "-g -O0 -dA -fno-merge-debug-strings" } */ + +#include "pr41445-3.c" + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varh\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?8\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xc|12)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xd|13)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c new file mode 100644 index 000000000..03af604a7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c @@ -0,0 +1,14 @@ +/* PR preprocessor/41445 */ +/* Test that token after multi-line function-like macro use + gets correct locus even when preprocessing separately. */ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -O0 -dA -fno-merge-debug-strings" } */ + +#define A(x) vari x +#define vari(x) +#define B , varj +int A(B) ; + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?7\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xa|10)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c new file mode 100644 index 000000000..8aa37d1c1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c @@ -0,0 +1,8 @@ +/* PR preprocessor/41445 */ +/* { dg-do compile } */ +/* { dg-options "-g -O0 -dA -fno-merge-debug-strings" } */ + +#include "pr41445-5.c" + +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"vari\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?7\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ +/* { dg-final { scan-assembler "DW_TAG_variable\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"varj\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0xa|10)\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c new file mode 100644 index 000000000..02683960b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c @@ -0,0 +1,14 @@ +/* PR preprocessor/41543 */ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -O0 -dA -fno-merge-debug-strings" } */ + +#include + +int +foo (va_list ap) +{ + return va_arg (ap, int); +} + +/* { dg-final { scan-assembler-not "DW_AT_decl_file\[^\\r\\n\]*\(pr41543\.i\)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c new file mode 100644 index 000000000..d61b5a293 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c @@ -0,0 +1,18 @@ +/* PR debug/41695 */ +/* { dg-do compile } */ +/* { dg-options "-g -O2 -dA -fno-merge-debug-strings" } */ + +int bar (int); + +void +foo (void) +{ + int b = 0; + b = bar (b); + b = bar (b); + b = bar (b); + b = bar (b); + bar (b); +} + +/* { dg-final { scan-assembler-not "LVL(\[0-9\]+)-\[^1\]\[^\\r\\n\]*Location list begin address\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*LVL\\1-1-" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c new file mode 100644 index 000000000..21262c3b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c @@ -0,0 +1,31 @@ +/* PR debug/43237 */ +/* { dg-do compile } */ +/* { dg-options "-g -O2 -dA -fno-merge-debug-strings" } */ + +struct S +{ + int *a; + int b; + int **c; + int d; +}; + +void foo (struct S *); +void bar (struct S *); + +int +baz (void) +{ + struct S s; + foo (&s); + { + int a[s.b]; + int *c[s.d]; + s.a = a; + s.c = c; + bar (&s); + } + return 0; +} + +/* { dg-final { scan-assembler-not "LLST\[^\\r\\n\]*DW_AT_upper_bound" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c new file mode 100644 index 000000000..c1a58c4bd --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c @@ -0,0 +1,12 @@ +/* PR debug/49871 */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf-3 -dA -fno-merge-debug-strings" } */ + +struct S +{ + char a[1 << 16]; + int b; +} s; + +/* { dg-final { scan-assembler "\\(DW_AT_data_member_location\\)\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(DW_FORM_udata\\)" } } */ +/* { dg-final { scan-assembler-not "\\(DW_AT_data_member_location\\)\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(DW_FORM_data\[48\]\\)" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c new file mode 100644 index 000000000..957c152b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c @@ -0,0 +1,13 @@ +/* PR debug/51410 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA -fno-merge-debug-strings" } */ + +int x; + +int +foo (void) +{ + return x; +} + +/* { dg-final { scan-assembler-times "\\(DIE\[^\\r\\n\]*DW_TAG_variable\\)" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c b/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c new file mode 100644 index 000000000..7e745ff19 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c @@ -0,0 +1,108 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -gdwarf-2 -dA" } */ + +#define True 1 +#define False 0 + +_Bool F1 (_Bool B1, _Bool B2) +{ + _Bool R; + + if (B1 + && B2) + R = True; + else + R = False; + return R; +} + +_Bool F2 (_Bool B1, _Bool B2) +{ + _Bool R; + + R = B1 + && B2; + return R; +} + +_Bool F3 (_Bool B1, _Bool B2) +{ + _Bool R = False; + + if (B1 + && B2) + R = True; + return R; +} + +_Bool F4 (_Bool B1, _Bool B2) +{ + _Bool R = False; + + if (B1 + || B2) + ; + else + R = True; + return R; +} + +_Bool F5 (_Bool B1, _Bool B2) +{ + _Bool R = False; + + if (!(B1 + && B2)) + R = True; + return R; +} + +_Bool F8 (_Bool B1, _Bool B2, _Bool B3, _Bool B4, _Bool B5, _Bool B6, + _Bool B7, _Bool B8) +{ + _Bool R; + + if ((B1 + || B2) + && B3 + && !(B4 + || B5) + && (B6 + || (B7 + && B8))) + R = True; + else + R = False; + return R; +} + +/* { dg-final { scan-assembler "short-circuit.c:11" } } */ +/* { dg-final { scan-assembler "short-circuit.c:12" } } */ +/* { dg-final { scan-assembler "short-circuit.c:13" } } */ +/* { dg-final { scan-assembler "short-circuit.c:15" } } */ + +/* { dg-final { scan-assembler "short-circuit.c:23" } } */ +/* { dg-final { scan-assembler "short-circuit.c:24" } } */ + +/* { dg-final { scan-assembler "short-circuit.c:32" } } */ +/* { dg-final { scan-assembler "short-circuit.c:33" } } */ +/* { dg-final { scan-assembler "short-circuit.c:34" } } */ + +/* { dg-final { scan-assembler "short-circuit.c:42" } } */ +/* { dg-final { scan-assembler "short-circuit.c:43" } } */ +/* { dg-final { scan-assembler "short-circuit.c:46" } } */ + +/* { dg-final { scan-assembler "short-circuit.c:54" } } */ +/* { dg-final { scan-assembler "short-circuit.c:55" } } */ +/* { dg-final { scan-assembler "short-circuit.c:56" } } */ + +/* { dg-final { scan-assembler "short-circuit.c:65" } } */ +/* { dg-final { scan-assembler "short-circuit.c:66" } } */ +/* { dg-final { scan-assembler "short-circuit.c:67" } } */ +/* { dg-final { scan-assembler "short-circuit.c:68" } } */ +/* { dg-final { scan-assembler "short-circuit.c:69" } } */ +/* { dg-final { scan-assembler "short-circuit.c:70" } } */ +/* { dg-final { scan-assembler "short-circuit.c:71" } } */ +/* { dg-final { scan-assembler "short-circuit.c:72" } } */ +/* { dg-final { scan-assembler "short-circuit.c:73" } } */ +/* { dg-final { scan-assembler "short-circuit.c:75" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c new file mode 100644 index 000000000..b9b5d0b37 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf-2" } */ +void +main(void) +{ + static int unused_local_var; +} +/* { dg-final { scan-assembler "unused_local_var" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c new file mode 100644 index 000000000..216a498e1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-g -O0 -dA -fno-merge-debug-strings" } */ + +struct foo; +struct foo *obj; +struct foo +{ + int x; +}; + +int +main () +{ + return 0; +} + +/* { dg-final { scan-assembler "DW_TAG_structure_type\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"foo\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?6\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c new file mode 100644 index 000000000..04dd12976 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c @@ -0,0 +1,10 @@ +/* PR 23190 */ +/* { dg-do compile } +/* { dg-options "-gdwarf-2 -dA -fno-merge-debug-strings" } */ +/* { dg-final { scan-assembler "xyzzy\[^\\n\\r\]+DW_AT_name" } } */ + +void f(void) +{ + static int xyzzy; + xyzzy += 3; +} diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c new file mode 100644 index 000000000..8ef2a7438 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c @@ -0,0 +1,14 @@ +/* PR 23190 */ +/* { dg-do compile } +/* { dg-options "-O2 -gdwarf-2 -dA" } */ +/* { dg-final { scan-assembler "DW_OP_addr\[\\n\\r\]+\[^\\n\\r\]+foo" } } */ +/* { dg-final { scan-assembler "DW_OP_addr\[\\n\\r\]+\[^\\n\\r\]+bar" } } */ + +static int foo; +int bar; +int main(void) +{ + foo += 3; + bar *= 5; + return 0; +} -- cgit v1.2.3