typeck.c (cp_build_indirect_ref_1): Add location_t parameter and use it in error...
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 25 Nov 2019 13:49:50 +0000 (13:49 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 25 Nov 2019 13:49:50 +0000 (13:49 +0000)
/gcc
2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>

* typeck.c (cp_build_indirect_ref_1): Add location_t parameter
and use it in error messages.
(build_x_indirect_ref): Adjust call.
(build_indirect_ref): Likewise.
(cp_build_fold_indirect_ref): Likewise.
(cp_build_array_ref): Likewise.
* call.c (build_new_op_1): Likewise.
* semantics.c (finish_omp_clauses): Likewise.
(finish_omp_depobj): Likewise.
* typeck2.c (build_x_arrow): Likewise.
* cp-tree.h (cp_build_indirect_ref): Update declaration.

* call.c (build_new_op_1): Use location argument in warning_at.

* typeck.c (cp_build_modify_expr): Consistently use the
location_t argument.

/libcc1
2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>

* libcp1plugin.cc (plugin_pragma_push_user_expression): Update
cp_build_indirect_ref call.

/gcc/testsuite
2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/diagnostic/base-operand-non-pointer-1.C: New.
* g++.dg/pr53055.C: Check location too.
* g++.old-deja/g++.bugs/900213_02.C: Likewise.
* g++.old-deja/g++.bugs/900215_02.C: Likewise.
* g++.old-deja/g++.other/badarrow.C: Likewise.
* g++.old-deja/g++.other/deref1.C: Likewise.

* g++.dg/warn/Wenum-compare.C: Check location too.

* g++.dg/cpp0x/initlist26.C: Check location too.
* g++.dg/cpp0x/initlist28.C: Likewise.
* g++.dg/cpp0x/initlist29.C: Likewise.
* g++.dg/cpp0x/initlist33.C: Likewise.
* g++.dg/expr/string-2.C: Likewise.
* g++.dg/other/ptrmem5.C: Likewise.
* g++.old-deja/g++.benjamin/14664-1.C: Likewise.
* g++.old-deja/g++.benjamin/14664-2.C: Likewise.
* g++.old-deja/g++.brendan/init12.C: Likewise.
* g++.old-deja/g++.bugs/900324_04.C: Likewise.
* g++.old-deja/g++.ext/array1.C: Likewise.
* g++.old-deja/g++.jason/rfg17.C: Likewise.

From-SVN: r278685

28 files changed:
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cp-tree.h
gcc/cp/semantics.c
gcc/cp/typeck.c
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/initlist26.C
gcc/testsuite/g++.dg/cpp0x/initlist28.C
gcc/testsuite/g++.dg/cpp0x/initlist29.C
gcc/testsuite/g++.dg/cpp0x/initlist33.C
gcc/testsuite/g++.dg/diagnostic/base-operand-non-pointer-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/expr/string-2.C
gcc/testsuite/g++.dg/other/ptrmem5.C
gcc/testsuite/g++.dg/pr53055.C
gcc/testsuite/g++.dg/warn/Wenum-compare.C
gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C
gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C
gcc/testsuite/g++.old-deja/g++.brendan/init12.C
gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C
gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C
gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C
gcc/testsuite/g++.old-deja/g++.ext/array1.C
gcc/testsuite/g++.old-deja/g++.jason/rfg17.C
gcc/testsuite/g++.old-deja/g++.other/badarrow.C
gcc/testsuite/g++.old-deja/g++.other/deref1.C
libcc1/ChangeLog
libcc1/libcp1plugin.cc

index 33e2cfeede888b7abe424daa9579206a06be8810..fe912c66af0276526a4da9742b36c3cc249904e8 100644 (file)
@@ -1,3 +1,22 @@
+2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * typeck.c (cp_build_indirect_ref_1): Add location_t parameter
+       and use it in error messages.
+       (build_x_indirect_ref): Adjust call.
+       (build_indirect_ref): Likewise.
+       (cp_build_fold_indirect_ref): Likewise.
+       (cp_build_array_ref): Likewise.
+       * call.c (build_new_op_1): Likewise.
+       * semantics.c (finish_omp_clauses): Likewise.
+       (finish_omp_depobj): Likewise.
+       * typeck2.c (build_x_arrow): Likewise.
+       * cp-tree.h (cp_build_indirect_ref): Update declaration.
+
+       * call.c (build_new_op_1): Use location argument in warning_at.
+
+       * typeck.c (cp_build_modify_expr): Consistently use the
+       location_t argument.
+
 2019-11-23  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR c++/92365
index cccb90f4f99e62ce85a580d285243c93b0f8df0b..8bfe33688165de8e04d8895e0eb4aaf3cf7bebd3 100644 (file)
@@ -6354,11 +6354,9 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
                  && (TYPE_MAIN_VARIANT (arg1_type)
                      != TYPE_MAIN_VARIANT (arg2_type))
                  && (complain & tf_warning))
-               {
-                 warning (OPT_Wenum_compare,
-                          "comparison between %q#T and %q#T",
-                          arg1_type, arg2_type);
-               }
+               warning_at (loc, OPT_Wenum_compare,
+                           "comparison between %q#T and %q#T",
+                           arg1_type, arg2_type);
              break;
            default:
              break;
@@ -6416,7 +6414,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
       return cp_build_modify_expr (loc, arg1, code2, arg2, complain);
 
     case INDIRECT_REF:
-      return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
+      return cp_build_indirect_ref (loc, arg1, RO_UNARY_STAR, complain);
 
     case TRUTH_ANDIF_EXPR:
     case TRUTH_ORIF_EXPR:
@@ -6472,8 +6470,9 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
       return cp_build_array_ref (input_location, arg1, arg2, complain);
 
     case MEMBER_REF:
-      return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR, 
-                                                           complain), 
+      return build_m_component_ref (cp_build_indirect_ref (loc, arg1,
+                                                          RO_ARROW_STAR,
+                                                           complain),
                                     arg2, complain);
 
       /* The caller will deal with these.  */
index d6e9357385af8a2205a0c589cc35fed3a47c4bf6..0da1ed4e37225e47c6a908ccfbc98d0d37a48a36 100644 (file)
@@ -7482,9 +7482,11 @@ extern tree build_class_member_access_expr      (cp_expr, tree, tree, bool,
 extern tree finish_class_member_access_expr     (cp_expr, tree, bool,
                                                 tsubst_flags_t);
 extern tree build_x_indirect_ref               (location_t, tree,
-                                                ref_operator, tsubst_flags_t);
-extern tree cp_build_indirect_ref              (tree, ref_operator,
-                                                 tsubst_flags_t);
+                                                ref_operator,
+                                                tsubst_flags_t);
+extern tree cp_build_indirect_ref              (location_t, tree,
+                                                ref_operator,
+                                                tsubst_flags_t);
 extern tree cp_build_fold_indirect_ref         (tree);
 extern tree build_array_ref                    (location_t, tree, tree);
 extern tree cp_build_array_ref                 (location_t, tree, tree,
index 2adc9ef792b2c42beb7ce07b28ee37ce2d736573..16180f5c1fae751fbf4e59b772ed3954d28afe9b 100644 (file)
@@ -7193,7 +7193,8 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
                remove = true;
              else
                {
-                 t = cp_build_indirect_ref (addr, RO_UNARY_STAR,
+                 t = cp_build_indirect_ref (OMP_CLAUSE_LOCATION (c),
+                                            addr, RO_UNARY_STAR,
                                             tf_warning_or_error);
                  if (t == error_mark_node)
                    remove = true;
@@ -9328,7 +9329,7 @@ finish_omp_depobj (location_t loc, tree depobj,
       if (addr == error_mark_node)
        depobj = error_mark_node;
       else
-       depobj = cp_build_indirect_ref (addr, RO_UNARY_STAR,
+       depobj = cp_build_indirect_ref (loc, addr, RO_UNARY_STAR,
                                        tf_warning_or_error);
     }
 
index 100ae8f81864b1e3d4f50440ed3d3d0672ea7090..bd2292a4dac291ce6cfb4fbf1e4cf2b73b0cf939 100644 (file)
@@ -3278,7 +3278,7 @@ build_x_indirect_ref (location_t loc, tree expr, ref_operator errorstring,
   rval = build_new_op (loc, INDIRECT_REF, LOOKUP_NORMAL, expr,
                       NULL_TREE, NULL_TREE, &overload, complain);
   if (!rval)
-    rval = cp_build_indirect_ref (expr, errorstring, complain);
+    rval = cp_build_indirect_ref (loc, expr, errorstring, complain);
 
   if (processing_template_decl && rval != error_mark_node)
     {
@@ -3296,7 +3296,7 @@ build_x_indirect_ref (location_t loc, tree expr, ref_operator errorstring,
    constructs.  If DO_FOLD is true, fold away INDIRECT_REF of ADDR_EXPR.  */
 
 static tree
-cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring,
+cp_build_indirect_ref_1 (location_t loc, tree ptr, ref_operator errorstring,
                         tsubst_flags_t complain, bool do_fold)
 {
   tree pointer, type;
@@ -3345,7 +3345,7 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring,
          /* A pointer to incomplete type (other than cv void) can be
             dereferenced [expr.unary.op]/1  */
           if (complain & tf_error)
-            error ("%qT is not a pointer-to-object type", type);
+            error_at (loc, "%qT is not a pointer-to-object type", type);
          return error_mark_node;
        }
       else if (do_fold && TREE_CODE (pointer) == ADDR_EXPR
@@ -3376,23 +3376,25 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring,
     switch (errorstring)
       {
          case RO_ARRAY_INDEXING:
-           error ("invalid use of array indexing on pointer to member");
+           error_at (loc,
+                    "invalid use of array indexing on pointer to member");
            break;
          case RO_UNARY_STAR:
-           error ("invalid use of unary %<*%> on pointer to member");
+           error_at (loc, "invalid use of unary %<*%> on pointer to member");
            break;
          case RO_IMPLICIT_CONVERSION:
-           error ("invalid use of implicit conversion on pointer to member");
+           error_at (loc, "invalid use of implicit conversion on pointer "
+                    "to member");
            break;
          case RO_ARROW_STAR:
-           error ("left hand operand of %<->*%> must be a pointer to class, "
-                 "but is a pointer to member of type %qT", type);
+           error_at (loc, "left hand operand of %<->*%> must be a pointer to "
+                    "class, but is a pointer to member of type %qT", type);
            break;
          default:
            gcc_unreachable ();
       }
   else if (pointer != error_mark_node)
-    invalid_indirection_error (input_location, type, errorstring);
+    invalid_indirection_error (loc, type, errorstring);
 
   return error_mark_node;
 }
@@ -3400,10 +3402,10 @@ cp_build_indirect_ref_1 (tree ptr, ref_operator errorstring,
 /* Entry point used by c-common, which expects folding.  */
 
 tree
-build_indirect_ref (location_t /*loc*/,
-                   tree ptr, ref_operator errorstring)
+build_indirect_ref (location_t loc, tree ptr, ref_operator errorstring)
 {
-  return cp_build_indirect_ref_1 (ptr, errorstring, tf_warning_or_error, true);
+  return cp_build_indirect_ref_1 (loc, ptr, errorstring,
+                                 tf_warning_or_error, true);
 }
 
 /* Entry point used by internal indirection needs that don't correspond to any
@@ -3412,17 +3414,18 @@ build_indirect_ref (location_t /*loc*/,
 tree
 cp_build_fold_indirect_ref (tree pointer)
 {
-  return cp_build_indirect_ref_1 (pointer, RO_NULL, tf_warning_or_error, true);
+  return cp_build_indirect_ref_1 (input_location, pointer, RO_NULL,
+                                 tf_warning_or_error, true);
 }
 
 /* Entry point used by indirection needs that correspond to some syntactic
    construct.  */
 
 tree
-cp_build_indirect_ref (tree ptr, ref_operator errorstring,
+cp_build_indirect_ref (location_t loc, tree ptr, ref_operator errorstring,
                       tsubst_flags_t complain)
 {
-  return cp_build_indirect_ref_1 (ptr, errorstring, complain, false);
+  return cp_build_indirect_ref_1 (loc, ptr, errorstring, complain, false);
 }
 
 /* This handles expressions of the form "a[i]", which denotes
@@ -3599,7 +3602,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx,
     ret = cp_build_binary_op (input_location, PLUS_EXPR, ar, ind, complain);
     if (first)
       ret = build2_loc (loc, COMPOUND_EXPR, TREE_TYPE (ret), first, ret);
-    ret = cp_build_indirect_ref (ret, RO_ARRAY_INDEXING, complain);
+    ret = cp_build_indirect_ref (loc, ret, RO_ARRAY_INDEXING, complain);
     protected_set_expr_location (ret, loc);
     if (non_lvalue)
       ret = non_lvalue_loc (loc, ret);
@@ -8280,7 +8283,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
        if (VOID_TYPE_P (TREE_TYPE (rhs)))
          {
            if (complain & tf_error)
-             error ("void value not ignored as it ought to be");
+             error_at (cp_expr_loc_or_loc (rhs, loc),
+                       "void value not ignored as it ought to be");
            return error_mark_node;
          }
 
@@ -8493,7 +8497,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
          if (modifycode != INIT_EXPR)
            {
              if (complain & tf_error)
-               error ("assigning to an array from an initializer list");
+               error_at (loc,
+                         "assigning to an array from an initializer list");
              return error_mark_node;
            }
          if (check_array_initializer (lhs, lhstype, newrhs))
@@ -8520,8 +8525,8 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
                                     TYPE_MAIN_VARIANT (TREE_TYPE (newrhs))))
        {
          if (complain & tf_error)
-           error ("incompatible types in assignment of %qT to %qT",
-                  TREE_TYPE (rhs), lhstype);
+           error_at (loc, "incompatible types in assignment of %qT to %qT",
+                     TREE_TYPE (rhs), lhstype);
          return error_mark_node;
        }
 
@@ -8534,9 +8539,9 @@ cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
          if (complain & tf_error)
            {
              if (modifycode == INIT_EXPR)
-               error ("array used as initializer");
+               error_at (loc, "array used as initializer");
              else
-               error ("invalid array assignment");
+               error_at (loc, "invalid array assignment");
            }
          return error_mark_node;
        }
index 7a8de4b7c2c7e3da52241323183408853d2caeee..b8868546444ce8e29855c4035f7b93c08752b234 100644 (file)
@@ -2060,7 +2060,7 @@ build_x_arrow (location_t loc, tree expr, tsubst_flags_t complain)
          return expr;
        }
 
-      return cp_build_indirect_ref (last_rval, RO_ARROW, complain);
+      return cp_build_indirect_ref (loc, last_rval, RO_ARROW, complain);
     }
 
   if (complain & tf_error)
index 6431a093b52b4de2c9059eb11322c1c53ce13d9c..0eead3eb76920b98ce8d082e003b3ffe00b8969a 100644 (file)
@@ -1,3 +1,27 @@
+2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/diagnostic/base-operand-non-pointer-1.C: New.
+       * g++.dg/pr53055.C: Check location too.
+       * g++.old-deja/g++.bugs/900213_02.C: Likewise.
+       * g++.old-deja/g++.bugs/900215_02.C: Likewise.
+       * g++.old-deja/g++.other/badarrow.C: Likewise.
+       * g++.old-deja/g++.other/deref1.C: Likewise.
+
+       * g++.dg/warn/Wenum-compare.C: Check location too.
+
+       * g++.dg/cpp0x/initlist26.C: Check location too.
+       * g++.dg/cpp0x/initlist28.C: Likewise.
+       * g++.dg/cpp0x/initlist29.C: Likewise.
+       * g++.dg/cpp0x/initlist33.C: Likewise.
+       * g++.dg/expr/string-2.C: Likewise.
+       * g++.dg/other/ptrmem5.C: Likewise.
+       * g++.old-deja/g++.benjamin/14664-1.C: Likewise.
+       * g++.old-deja/g++.benjamin/14664-2.C: Likewise.
+       * g++.old-deja/g++.brendan/init12.C: Likewise.
+       * g++.old-deja/g++.bugs/900324_04.C: Likewise.
+       * g++.old-deja/g++.ext/array1.C: Likewise.
+       * g++.old-deja/g++.jason/rfg17.C: Likewise.
+
 2019-11-25  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/91985
index 8fd267f4409f5a25aa90594c2e36e8d113bb4b15..045147c488239622fe3e1d47b94a296a54a479e4 100644 (file)
@@ -6,5 +6,5 @@ void
 foo (int i)
 {
   int a[i];
-  a = { }; // { dg-error "assign" }
+  a = { }; // { dg-error "5:assigning to an array from an initializer list" }
 }
index 3bf995ad236344b83ea1e45b0023f42f39792e75..decd36eea7b3e9663695cd041a87671087b8d1a6 100644 (file)
@@ -4,5 +4,5 @@
 void foo()
 {
   int a[1];
-  throw a = {}; // { dg-error "assign" }
+  throw a = {}; // { dg-error "11:assigning to an array from an initializer list" }
 }
index 9174164aa4834967636a24c30fac795aabbc92a3..494d6951581255be3388d480b1a6b1132b9c51cb 100644 (file)
@@ -5,7 +5,7 @@ class Mesh
 {
 public:
   Mesh(const char*)
-  { typele={0}; }              // { dg-error "" }
+  { typele={0}; }              // { dg-error "11:assigning to an array from an initializer list" }
 
 private:
   int typele[7][2];
index 9ab4b55d31e481d8647d9a7ed35d056bd9f4b955..ae7f130ebf00c9ea63cc3243899a07619366a1c1 100644 (file)
@@ -9,5 +9,5 @@ struct base
 int main()
 {
  base ptr_array[1];
- ptr_array = { base() };       // { dg-error "assign" }
+ ptr_array = { base() };       // { dg-error "12:assigning to an array from an initializer list" }
 }
diff --git a/gcc/testsuite/g++.dg/diagnostic/base-operand-non-pointer-1.C b/gcc/testsuite/g++.dg/diagnostic/base-operand-non-pointer-1.C
new file mode 100644 (file)
index 0000000..26188d1
--- /dev/null
@@ -0,0 +1,2 @@
+class C { public: C f(); int get(); };
+int f(C* p) { return p->f()->get(); }  // { dg-error "28:base operand of .->. has non-pointer type .C." }
index 224fd61e0867ec84bd61d9c6ebc88162a834b48a..07357db7683ae9eea4dda63918d846a50a263895 100644 (file)
@@ -3,7 +3,7 @@
 
 char a[1];
 
-int foo(a = "") // { dg-error "invalid array assignment" }
+int foo(a = "") // { dg-error "11:invalid array assignment" }
 {
   return 0;
 }
index 75a78b2f17be79c714be1db3dee96411d92025fa..2faf6cd2b7e1fcb6347f24b86619aba4f9c45b8f 100644 (file)
@@ -8,5 +8,5 @@ struct a
 int main()
 {
   int a::*n[8];
-  n = &a::x;                    // { dg-error "int \\(a::\\*\\)" }
+  n = &a::x; // { dg-error "5:incompatible types in assignment of .int \\(a::\\*\\)" }
 }   
index 787af9d156f03df66ddf8e4644e96600cf0434c8..dbe90a3be58b34c95136d6a1c39d6028a62c0e48 100644 (file)
@@ -2,4 +2,4 @@
 // { dg-do compile }
 
 struct A A :: * p ;
-int i = p ->* p ; // { dg-error "" }
+int i = p ->* p ; // { dg-error "11:left hand operand" }
index f60080039fbef2d2f9141d4613d3d298cda86d61..af7c483a2384d02f0263a8846e3a26cb47a3d47e 100644 (file)
@@ -6,5 +6,5 @@ enum E2 { b };
 
 int foo (E1 e1, E2 e2)
 {
-  return e1 == e2;  /* { dg-warning "comparison between" } */
+  return e1 == e2;  /* { dg-warning "13:comparison between" } */
 }
index 9a6e644433c478ad08e08c9d71a1e12c6572f1ff..966507c4b868087094e8eefe7d9aa8586f6aa8e1 100644 (file)
@@ -8,7 +8,7 @@ void bar()
 {
   //-g++: incompatible types in assignment of 'const char[]' to 'char[]'
   //-edg: expression must be a modifiable lvalue
-  foo = "0123456789012345678901234"; // { dg-error "" } // ERROR -
+  foo = "0123456789012345678901234"; // { dg-error "7:invalid array assignment" } // ERROR -
 }
 
 
index 364f30c4b271ab00f1a053a80d429602ad08662b..3c9591f77337d7dd84f85fa3160a29948aeac06d 100644 (file)
@@ -7,7 +7,7 @@ char foo[26];
 
 void bar()
 {
-  foo = "0123456789012345678901234"; // { dg-error "array" }
+  foo = "0123456789012345678901234"; // { dg-error "7:invalid array assignment" }
 }
 
 
index 2e3578b1a0409469bdc1909a5680bfa6b9ce34c3..d8889c0abfedb5a2cbe0a2fc21e5dd113576b625 100644 (file)
@@ -5,5 +5,5 @@ char * bob();
 int main()
 {
     char a[1][2];
-    a[0] = bob();// { dg-error "" } .*
+    a[0] = bob();// { dg-error "10:incompatible types in assignment" } .*
 }
index 9b9ae994de91db13c2832f38e919dddc7a39a826..63ba605dbddb585406517ccd6640c22346f81f32 100644 (file)
@@ -16,7 +16,7 @@ int struct0::*dmp;
 
 void global_function_0 ()
 {
-  i = *dmp;                    // { dg-error "invalid use of unary '\\\*' on pointer to member" } causes abort
+  i = *dmp;                    // { dg-error "7:invalid use of unary '\\\*' on pointer to member" } causes abort
 }
 
 int main () { return 0; }
index 3309c886384adf26c696d8ee81e3cf2a75bb67fd..89bada320da8bc2328249258fa67067e63e1a601 100644 (file)
@@ -41,8 +41,8 @@ void struct0::function_member ()
   i = (this->*fmp) ();         // perfectly legal - for both cfront and g++
   i = this->*dmp;              // perfectly legal - for both cfront and g++
 
-  i = (*fmp) ();               // { dg-error "invalid use of unary '\\\*' on pointer to member" } 
-  i = *dmp;                    // { dg-error "invalid use of unary '\\\*' on pointer to member" } 
+  i = (*fmp) ();               // { dg-error "8:invalid use of unary '\\\*' on pointer to member" } 
+  i = *dmp;                    // { dg-error "7:invalid use of unary '\\\*' on pointer to member" } 
 }
 
 int main () { return 0; }
index 1d671d156e5e1111983bed5809ae7825d85b0143..70c2fbe232afca6410d12aada552acac609a503e 100644 (file)
@@ -20,7 +20,7 @@ int_array ia2;
 
 void function_0 ()
 {
-  ia1 = ia2;           // { dg-error "" } gnu extension
+  ia1 = ia2;           // { dg-error "7:invalid array assignment" } gnu extension
 }
 
 int main () { return 0; }
index a297c73b8b824cdcef90dda436af67022ec6da75..8dfeed6287573ac2fda7e4ddf2f755849e9d768b 100644 (file)
@@ -19,5 +19,5 @@ void
 ccBgaInspection::reinspect (unsigned long diag_flags) 
 {
   ct2d_rigid physTdev;          
-  _dev2phys = physTdev; // { dg-error "" } 
+  _dev2phys = physTdev; // { dg-error "13:incompatible types in assignment" } 
 }
index a138f9ad908d376012679312085691887d895154..415141bf8a74f6c13ac514e08abf3155f55767db 100644 (file)
@@ -12,5 +12,5 @@ void
 test ()
 {
   b1 = b2;           /* OK */
-  a1 = a2;           /* { dg-error "" } array assignment */
+  a1 = a2;           /* { dg-error "6:invalid array assignment" } array assignment */
 }
index 6e7578d1db9aa1a247fa4d800697fe0f82eb0791..2bcc3eb139482dadcf4762f2a7ccc041c6eb405c 100644 (file)
@@ -6,5 +6,5 @@ struct S {
 
 void f()
 {
-  s->i = 3; // { dg-error "" } base operand
+  s->i = 3; // { dg-error "4:base operand of .->. has non-pointer type .S." } base operand
 }
index 1b32c8c56953675cb5db9f7756d11b6a5388a7bb..88c640326c08322f21549d5ef765e11b3453339a 100644 (file)
@@ -7,8 +7,8 @@
 
 void fn (void *vp, volatile void *vvp)
 {
-  *vp;      // { dg-error "" } not a pointer to object
-  *vvp;     // { dg-error "" } not a pointer to object
-  &*vp;     // { dg-error "" } not a pointer to object
-  &*vvp;    // { dg-error "" } not a pointer to object
+  *vp;      // { dg-error "3:.void\\*. is not a pointer-to-object type" } not a pointer to object
+  *vvp;     // { dg-error "3:.volatile void\\*. is not a pointer-to-object type" } not a pointer to object
+  &*vp;     // { dg-error "4:.void\\*. is not a pointer-to-object type" } not a pointer to object
+  &*vvp;    // { dg-error "4:.volatile void\\*. is not a pointer-to-object type" } not a pointer to object
 }
index d65a0b22b06baa6c291d915aa334eacdd36a700a..92b5cb735e8d48db3680166c1ce71db9e7d0fc31 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * libcp1plugin.cc (plugin_pragma_push_user_expression): Update
+       cp_build_indirect_ref call.
+
 2019-09-27  Maciej W. Rozycki  <macro@wdc.com>
 
        * configure: Regenerate.
index d241ea1033dfda9e60118074d4b6ceb526a578d2..232ab976ab585f8a6f02a5a31e61b627b2555eaf 100644 (file)
@@ -630,7 +630,8 @@ plugin_pragma_push_user_expression (cpp_reader *)
         usable.  */
       tree this_val = lookup_name (get_identifier ("this"));
       current_class_ref = !this_val ? NULL_TREE
-       : cp_build_indirect_ref (this_val, RO_NULL, tf_warning_or_error);
+       : cp_build_indirect_ref (input_location, this_val, RO_NULL,
+                                tf_warning_or_error);
       current_class_ptr = this_val;
     }
 }