aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2019-12-18 09:51:14 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2019-12-18 09:51:14 +0000
commite3371908b30b254f79f735abf66a8d17c188988a (patch)
treef3a8d751e055aaec4d0e6e9be6f90ecc73b67dc4 /gcc
parentd4a45898bc44a87f076485da44912df8c461bc64 (diff)
downloadgcc-e3371908b30b254f79f735abf66a8d17c188988a.zip
gcc-e3371908b30b254f79f735abf66a8d17c188988a.tar.gz
gcc-e3371908b30b254f79f735abf66a8d17c188988a.tar.bz2
trans.c (Pragma_to_gnu): Push a diagnostics state for pragma Warnings (Off) before turning off all the...
* gcc-interface/trans.c (Pragma_to_gnu) <Pragma_Warnings>: Push a diagnostics state for pragma Warnings (Off) before turning off all the warnings and only pop it for pragma Warnings (On). From-SVN: r279519
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/gcc-interface/trans.c16
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/warn32.adb19
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index aa37e62..bfc838f 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2019-12-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (Pragma_to_gnu) <Pragma_Warnings>: Push a
+ diagnostics state for pragma Warnings (Off) before turning off all
+ the warnings and only pop it for pragma Warnings (On).
+
2019-12-18 Justin Squirek <squirek@adacore.com>
* sem_ch6.adb (Analyze_Function_Return): Modify handling of
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index e6914cc..5f87bc3 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -1975,7 +1975,21 @@ Pragma_to_gnu (Node_Id gnat_node)
gnat_expr = Expression (Next (gnat_temp));
}
else
- gnat_expr = Empty;
+ {
+ gnat_expr = Empty;
+
+ /* For pragma Warnings (Off), we save the current state... */
+ if (kind == DK_IGNORED)
+ diagnostic_push_diagnostics (global_dc, location);
+
+ /* ...so that, for pragma Warnings (On), we do not enable all
+ the warnings but just restore the previous state. */
+ else
+ {
+ diagnostic_pop_diagnostics (global_dc, location);
+ break;
+ }
+ }
imply = false;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3020a95..a0b25ef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/warn32.adb: New test.
+
2019-12-17 Martin Sebor <msebor@redhat.com>
PR c++/61339
diff --git a/gcc/testsuite/gnat.dg/warn32.adb b/gcc/testsuite/gnat.dg/warn32.adb
new file mode 100644
index 0000000..e3ffefb
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/warn32.adb
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+-- { dg-options "-O -gnatn -Winline -cargs --param max-inline-insns-single=50 -margs" }
+
+with Ada.Containers.Vectors;
+with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+with Ada.Text_IO;
+
+procedure Warn32 is
+ type Selected_Block_T is record
+ Contents : Unbounded_String;
+ File_Name : Unbounded_String;
+ end record;
+
+ pragma Warnings (Off, "-Winline");
+ package Selected_Block_List is
+ new Ada.Containers.Vectors (Natural, Selected_Block_T);
+begin
+ Ada.Text_Io.Put_Line ("Hello World!");
+end;