aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/asm-line1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c9
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c6
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c7
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/discriminator.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c7
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c11
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c12
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c12
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c9
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c7
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp43
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c84
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c83
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c84
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c83
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c83
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h36
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c70
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c25
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c30
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c36
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c32
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c53
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c39
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c53
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c25
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c9
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c9
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c17
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c11
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c108
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c8
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c17
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c14
71 files changed, 1709 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/aranges-fnsec-1.c
new file mode 100644
index 000000000..4e40aea4e
--- /dev/null
+++ b/gcc-4.9/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 <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-require-effective-target function_sections } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/asm-line1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/asm-line1.c
new file mode 100644
index 000000000..3773e1c83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/asm-line1.c
@@ -0,0 +1,20 @@
+/* PR debug/50983 */
+/* { dg-do compile { target *-*-gnu* } } */
+/* { dg-options "-O0 -gdwarf" } */
+/* { dg-final { scan-assembler "is_stmt 1" } } */
+
+int i;
+void f() __attribute ((section ("foo")));
+void f() { if (i) ++i; else --i; }
+
+void fun()
+{
+ return;
+}
+
+int main()
+{
+ f();
+ fun();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c
new file mode 100644
index 000000000..c1ca1ebb6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/c99-typedef1.c
@@ -0,0 +1,9 @@
+// { dg-options "-std=iso9899:1999 -gdwarf" }
+
+void f() {
+ int n = 3;
+ typedef int T[n++];
+
+ T t;
+ t[0] = 7;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c
new file mode 100644
index 000000000..b139122fd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2.c
@@ -0,0 +1,6 @@
+/* { dg-do compile { target powerpc_altivec_ok } } */
+/* { dg-options "-O -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
new file mode 100644
index 000000000..e7d199d1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
@@ -0,0 +1,7 @@
+/* { dg-do compile { target i386*-*-* } } */
+/* { dg-options "-O -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/discriminator.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/discriminator.c
new file mode 100644
index 000000000..b77f7b1bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/discriminator.c
@@ -0,0 +1,18 @@
+/* HAVE_AS_DWARF2_DEBUG_LINE macro needs to be defined to pass the unittest.
+ However, dg cannot access it, so we restrict to GNU targets. */
+/* { dg-do compile { target *-*-gnu* } } */
+/* { dg-options "-O0 -gdwarf" } */
+/* { dg-final { scan-assembler "loc \[0-9] 11 \[0-9]( is_stmt \[0-9])?\n" } } */
+/* { dg-final { scan-assembler "loc \[0-9] 11 \[0-9]( is_stmt \[0-9])? discriminator 2\n" } } */
+/* { dg-final { scan-assembler "loc \[0-9] 11 \[0-9]( is_stmt \[0-9])? discriminator 1\n" } } */
+
+int foo(int n) {
+ int i, ret = 0;
+ for (i = 0; i < n; i++) {
+ if (i % 10 == 1)
+ ret++;
+ else
+ ret--;
+ }
+ return ret;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c
new file mode 100644
index 000000000..d9c01d07d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c
@@ -0,0 +1,8 @@
+/* Test that these two options can work together. */
+/* { dg-options "-gdwarf-4 -dA -feliminate-dwarf2-dups -fdebug-types-section" } */
+/* { dg-final { scan-assembler "DW.dups_types\.h\[^)\]*. DW_TAG_typedef" } } */
+/* { dg-final { scan-assembler "DW_TAG_type_unit" } } */
+
+#include "dups-types.h"
+
+A2 a;
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h
new file mode 100644
index 000000000..99b7d907c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h
@@ -0,0 +1,10 @@
+struct A
+{
+ int i;
+ int j;
+};
+
+typedef struct A A2;
+extern A2 a;
+
+A2 f(A2);
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c
new file mode 100644
index 000000000..23f959673
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char1.c
@@ -0,0 +1,13 @@
+/* PR debug/7241 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c
new file mode 100644
index 000000000..4a4bd438c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char2.c
@@ -0,0 +1,13 @@
+/* PR debug/7241 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c
new file mode 100644
index 000000000..4ff201f13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-char3.c
@@ -0,0 +1,8 @@
+/* PR debug/7241 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-dfp.c
new file mode 100644
index 000000000..951380f12
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die1.c
new file mode 100644
index 000000000..9ca84e757
--- /dev/null
+++ b/gcc-4.9/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 -dA" } */
+/* { dg-final { scan-assembler-not "DW_AT_inline" } } */
+inline int t()
+{
+}
+int (*q)()=t;
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die2.c
new file mode 100644
index 000000000..746ab031b
--- /dev/null
+++ b/gcc-4.9/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 -dA" } */
+/* { dg-final { scan-assembler-not "CIE Version" } } */
+static inline int t()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die3.c
new file mode 100644
index 000000000..2b071fc9e
--- /dev/null
+++ b/gcc-4.9/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 -dA" } */
+/* { dg-final { scan-assembler-not "DW_AT_inline" } } */
+extern inline int t()
+{
+}
+int (*q)()=t;
+int t()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die5.c
new file mode 100644
index 000000000..68985b71f
--- /dev/null
+++ b/gcc-4.9/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 -dA -fpreprocessed" } */
+/* { dg-final { scan-assembler "3.*DW_AT_inline" } } */
+#1 "test.h"
+inline int t()
+{
+}
+int q()
+{
+ t();
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die6.c
new file mode 100644
index 000000000..ff0d6798d
--- /dev/null
+++ b/gcc-4.9/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 -dA -fpreprocessed" } */
+/* { dg-final { scan-assembler-not "DW_AT_inline" } } */
+#1 "test.h"
+inline int t()
+{
+}
+int q()
+{
+ t();
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-die7.c
new file mode 100644
index 000000000..88d78e233
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c
new file mode 100644
index 000000000..b75395557
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-file1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-float.c
new file mode 100644
index 000000000..a028d1484
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-merge.c
new file mode 100644
index 000000000..15e09b116
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c
new file mode 100644
index 000000000..d871bab0c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -dA" } */
+/* { dg-final { scan-assembler "DW_TAG_variable" } } */
+/* PR debug/21828 */
+
+static int i;
+int main() {
+ i += 3;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
new file mode 100644
index 000000000..fd61296b2
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
new file mode 100644
index 000000000..3dfa2908e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
@@ -0,0 +1,7 @@
+/* Test to make sure the macro info includes the predefined macros with line number 0. */
+/* { dg-do compile } */
+/* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */
+/* { dg-final { scan-assembler "At line number 0" } } */
+
+#define FOO 1
+int i;
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
new file mode 100644
index 000000000..a8ba0f48e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
@@ -0,0 +1,43 @@
+# Copyright (C) 2002-2014 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
+# <http://www.gnu.org/licenses/>.
+
+# 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"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+set comp_output [gcc_target_compile \
+ "$srcdir/$subdir/../trivial.c" "trivial.S" assembly \
+ "additional_flags=-gdwarf"]
+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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
new file mode 100644
index 000000000..810788ae6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
@@ -0,0 +1,84 @@
+// { dg-do compile }
+// { dg-options "-gdwarf -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 "<built-in>"
+# 1 "<command-line>"
+# 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h
new file mode 100644
index 000000000..a7146b65e
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c
new file mode 100644
index 000000000..aefcb8715
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.c
@@ -0,0 +1,83 @@
+// { dg-do compile }
+// { dg-options "-gdwarf -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 "<built-in>"
+# 1 "<command-line>"
+# 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-baseonly.h
new file mode 100644
index 000000000..a7146b65e
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c
new file mode 100644
index 000000000..193c05d61
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.c
@@ -0,0 +1,84 @@
+// { dg-do compile }
+// { dg-options "-gdwarf -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 "<built-in>"
+# 1 "<command-line>"
+# 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-none.h
new file mode 100644
index 000000000..a7146b65e
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c
new file mode 100644
index 000000000..ebbfc3667
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.c
@@ -0,0 +1,83 @@
+// { dg-do compile }
+// { dg-options "-gdwarf -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 "<built-in>"
+# 1 "<command-line>"
+# 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-reduced.h
new file mode 100644
index 000000000..a7146b65e
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c
new file mode 100644
index 000000000..ad0a44a95
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.c
@@ -0,0 +1,83 @@
+// { dg-do compile }
+// { dg-options "-gdwarf -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 "<built-in>"
+# 1 "<command-line>"
+# 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd-sys.h
new file mode 100644
index 000000000..a7146b65e
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/fesd.h
new file mode 100644
index 000000000..46b24f5e9
--- /dev/null
+++ b/gcc-4.9/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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c
new file mode 100644
index 000000000..431b429de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/global-used-types.c
@@ -0,0 +1,14 @@
+/*
+ Contributed by Dodji Seketeli <dodji@redhat.com>
+ { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c
new file mode 100644
index 000000000..bd7f7b986
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c
new file mode 100644
index 000000000..b1947699e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c
@@ -0,0 +1,70 @@
+/* Contributed by Dodji Seketeli <dodji@redhat.com>
+ 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 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c
new file mode 100644
index 000000000..baa2f66e8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c
@@ -0,0 +1,25 @@
+/* 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 -gdwarf -dA -fmerge-all-constants" } */
+/* { 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 };
+ /* We must make sure that baz isn't optimized away before inlining,
+ otherwise its initializer is also lost. */
+ const struct A *p = &baz;
+ asm volatile ("" : : : "memory");
+ return baz.i * baz.j;
+}
+
+int
+main ()
+{
+ return foo () - 42;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c
new file mode 100644
index 000000000..395c54418
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
new file mode 100644
index 000000000..d7b03192b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target fopenmp } */
+/* { dg-options "-g -fopenmp -gdwarf-2 -femit-struct-debug-reduced" } */
+
+struct aa
+{
+ int a;
+};
+
+int
+f7 (void)
+{
+ int v7i = 6, v7j = 7, v7k = 9, v7l = 0, v7n = 0, v7o = 1;
+
+ #pragma omp parallel
+ {
+ #pragma omp master
+ v7o++;
+ #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
+ for (v7n = 0; v7n < 3; v7n++)
+ {
+ int v7m = v7j + v7k;
+ v7i = 8;
+ v7l++;
+ }
+ }
+
+ return v7i + v7j + v7k + v7l + v7n;
+}
+
+int
+main (void)
+{
+ f7 ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c
new file mode 100644
index 000000000..e818263a5
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c
new file mode 100644
index 000000000..463d3cc58
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
new file mode 100644
index 000000000..36d55bf30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c
new file mode 100644
index 000000000..d84ce26ca
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c
new file mode 100644
index 000000000..0927e7465
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c
new file mode 100644
index 000000000..bc492f2c1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c
@@ -0,0 +1,53 @@
+/* PR debug/36690 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c
new file mode 100644
index 000000000..016dbc948
--- /dev/null
+++ b/gcc-4.9/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 -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c
new file mode 100644
index 000000000..622fbcf64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr37726.c
@@ -0,0 +1,25 @@
+/* PR debug/37726 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-1.c
new file mode 100644
index 000000000..4e856ec09
--- /dev/null
+++ b/gcc-4.9/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 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c
new file mode 100644
index 000000000..e416b0f90
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-2.c
@@ -0,0 +1,9 @@
+/* PR preprocessor/41445 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-3.c
new file mode 100644
index 000000000..46f57e670
--- /dev/null
+++ b/gcc-4.9/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 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c
new file mode 100644
index 000000000..409f79f85
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-4.c
@@ -0,0 +1,9 @@
+/* PR preprocessor/41445 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c
new file mode 100644
index 000000000..de5a1cc13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c
@@ -0,0 +1,17 @@
+/* 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 -gdwarf -O0 -dA -fno-merge-debug-strings" } */
+
+#define A(x) vari x
+#define vari(x)
+#define B , varj
+int A(B) ;
+
+/* We want to check that both vari and varj have the same line
+ number. */
+
+/* { 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](0xa|10)\[^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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c
new file mode 100644
index 000000000..340cb3835
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c
@@ -0,0 +1,11 @@
+/* PR preprocessor/41445 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -O0 -dA -fno-merge-debug-strings" } */
+
+#include "pr41445-5.c"
+
+/* We want to check that both vari and varj have the same line
+ number. */
+
+/* { 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](0xa|10)?\[^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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c
new file mode 100644
index 000000000..872ed7da6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c
@@ -0,0 +1,14 @@
+/* PR preprocessor/41543 */
+/* { dg-do compile } */
+/* { dg-options "-save-temps -gdwarf -O0 -dA -fno-merge-debug-strings" } */
+
+#include <stdarg.h>
+
+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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c
new file mode 100644
index 000000000..90ae5cd88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c
@@ -0,0 +1,18 @@
+/* PR debug/41695 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c
new file mode 100644
index 000000000..8db254392
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr43237.c
@@ -0,0 +1,31 @@
+/* PR debug/43237 */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c
new file mode 100644
index 000000000..a859ac91a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-1.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -gdwarf -dA" } */
+
+typedef struct _Harry { int dummy; } Harry_t;
+Harry_t harry;
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c
new file mode 100644
index 000000000..dfbfa2fed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-2.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -gdwarf -dA" } */
+
+typedef const struct _Harry { int dummy; } Harry_t;
+Harry_t harry;
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c
new file mode 100644
index 000000000..c8039ef6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-3.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -gdwarf -dA" } */
+
+typedef struct _Harry { int dummy; } Harry_t;
+const Harry_t harry[5];
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c
new file mode 100644
index 000000000..bd2351bd9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr47939-4.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-save-temps -gdwarf -dA" } */
+
+typedef const struct _Harry { int dummy; } Harry_t;
+Harry_t harry[10];
+
+/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*(DW_AT_name: \"Harry_t\"|\"Harry_t..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c
new file mode 100644
index 000000000..f5b03ea92
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr49871.c
@@ -0,0 +1,13 @@
+/* PR debug/49871 */
+/* { dg-do compile } */
+/* { dg-require-effective-target int32plus } */
+/* { 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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c
new file mode 100644
index 000000000..62b389ee9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c
@@ -0,0 +1,13 @@
+/* PR debug/51410 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c
new file mode 100644
index 000000000..0ec3e84d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c
@@ -0,0 +1,10 @@
+/* Test that we have line information for the line
+ with local variable initializations. */
+/* { dg-options "-O0 -gdwarf -dA" } */
+/* { dg-final { scan-assembler ".loc 1 8 0|\[#/!\]\[ \t\]+line 8" } } */
+
+
+int f (register int a, register int b) {
+ register int x = b, y = a;
+ return x + y; }
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c
new file mode 100644
index 000000000..4fa199c0c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/short-circuit.c
@@ -0,0 +1,108 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c
new file mode 100644
index 000000000..bdc118ddc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/static1.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -gdwarf" } */
+void
+main(void)
+{
+ static int unused_local_var;
+}
+/* { dg-final { scan-assembler "unused_local_var" } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c
new file mode 100644
index 000000000..bf893ee86
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/struct-loc1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c
new file mode 100644
index 000000000..297d244e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var1.c
@@ -0,0 +1,10 @@
+/* PR 23190 */
+/* { dg-do compile }
+/* { dg-options "-gdwarf -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-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c
new file mode 100644
index 000000000..72aef4180
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/debug/dwarf2/var2.c
@@ -0,0 +1,14 @@
+/* PR 23190 */
+/* { dg-do compile }
+/* { dg-options "-O2 -gdwarf -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;
+}