[Ada] Misleading warning on unresolvable package name
authorJustin Squirek <squirek@adacore.com>
Mon, 28 May 2018 08:53:00 +0000 (08:53 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 28 May 2018 08:53:00 +0000 (08:53 +0000)
This patch fixes an issue whereby the compiler misidentified a package name
containing the name of a standard runtime package as said package - leading to
and improper error message prompting the user to "With" a package already in
scope.

2018-05-28  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch8.adb (Find_Expanded_Name): Add extra guard to make sure the
misresolved package name is not a case of mistaken identity.

gcc/testsuite/

* gnat.dg/warn15-core-main.adb, gnat.dg/warn15-core.ads,
gnat.dg/warn15-interfaces.ads, gnat.dg/warn15.ads: New testcase.

From-SVN: r260817

gcc/ada/ChangeLog
gcc/ada/sem_ch8.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/warn15-core-main.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/warn15-core.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/warn15-interfaces.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/warn15.ads [new file with mode: 0644]

index b1ccf573b06fdbe05591465615330bbeeed7df87..10b2c21fa38541634f35a33bf711752b90ab40f1 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-28  Justin Squirek  <squirek@adacore.com>
+
+       * sem_ch8.adb (Find_Expanded_Name): Add extra guard to make sure the
+       misresolved package name is not a case of mistaken identity.
+
 2018-05-28  Yannick Moy  <moy@adacore.com>
 
        * sem_res.adb (Resolve_Range): Re-resolve the low bound of a range in
index 382f12dad7ba60fa56e061d99982fc597601dfbc..1716cc476669e9e23b1212bca703051f15074026 100644 (file)
@@ -6336,7 +6336,11 @@ package body Sem_Ch8 is
                --  If this is a selection from Ada, System or Interfaces, then
                --  we assume a missing with for the corresponding package.
 
-               if Is_Known_Unit (N) then
+               if Is_Known_Unit (N)
+                 and then not (Present (Entity (Prefix (N)))
+                                and then Scope (Entity (Prefix (N))) /=
+                                           Standard_Standard)
+               then
                   if not Error_Posted (N) then
                      Error_Msg_Node_2 := Selector;
                      Error_Msg_N -- CODEFIX
index 0ec5cee07aea83d835453b9865a40e8976cb6383..8c3f007bc614ea6d4a88874e3ac8c4e83eac600c 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-28  Justin Squirek  <squirek@adacore.com>
+
+       * gnat.dg/warn15-core-main.adb, gnat.dg/warn15-core.ads,
+       gnat.dg/warn15-interfaces.ads, gnat.dg/warn15.ads: New testcase.
+
 2018-05-27  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        * gfortran.dg/data_stmt_pointer.f90: new test.
diff --git a/gcc/testsuite/gnat.dg/warn15-core-main.adb b/gcc/testsuite/gnat.dg/warn15-core-main.adb
new file mode 100644 (file)
index 0000000..9caa1b9
--- /dev/null
@@ -0,0 +1,9 @@
+--  { dg-do compile }
+
+with Interfaces.C;
+
+procedure Warn15.Core.Main is
+   use type Interfaces.C.unsigned;  --  { dg-error "\"C\" not declared in \"Interfaces\"" }
+begin
+   null;
+end Warn15.Core.Main;
diff --git a/gcc/testsuite/gnat.dg/warn15-core.ads b/gcc/testsuite/gnat.dg/warn15-core.ads
new file mode 100644 (file)
index 0000000..eadcc38
--- /dev/null
@@ -0,0 +1,4 @@
+with Warn15.Interfaces;
+
+package Warn15.Core is
+end Warn15.Core;
diff --git a/gcc/testsuite/gnat.dg/warn15-interfaces.ads b/gcc/testsuite/gnat.dg/warn15-interfaces.ads
new file mode 100644 (file)
index 0000000..fa8f46a
--- /dev/null
@@ -0,0 +1,3 @@
+package Warn15.Interfaces is
+end Warn15.Interfaces;
+
diff --git a/gcc/testsuite/gnat.dg/warn15.ads b/gcc/testsuite/gnat.dg/warn15.ads
new file mode 100644 (file)
index 0000000..4b011b4
--- /dev/null
@@ -0,0 +1,2 @@
+package Warn15 is
+end Warn15;