GIMPLEFE: handle invalid __MEM
authorMikhail Maltsev <maltsevm@gmail.com>
Thu, 11 May 2017 10:55:52 +0000 (10:55 +0000)
committerMikhail Maltsev <miyuki@gcc.gnu.org>
Thu, 11 May 2017 10:55:52 +0000 (10:55 +0000)
gcc/c/

PR testsuite/80580
* gimple-parser.c (c_parser_gimple_postfix_expression): Handle
incorrect __MEM syntax.

gcc/testsuite/

PR testsuite/80580
* gcc.dg/gimplefe-error-5.c: New test.

From-SVN: r247900

gcc/c/ChangeLog
gcc/c/gimple-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gimplefe-error-5.c [new file with mode: 0644]

index ac05c3a..3bf4db2 100644 (file)
@@ -1,6 +1,12 @@
 2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
 
        PR testsuite/80580
+       * gimple-parser.c (c_parser_gimple_postfix_expression): Handle
+       incorrect __MEM syntax.
+
+2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR testsuite/80580
        * gimple-parser.c (c_parser_gimple_unary_expression): Check argument
        type of unary '*'.
 
index c6c2f7a..c0858b7 100644 (file)
@@ -804,6 +804,16 @@ c_parser_gimple_postfix_expression (c_parser *parser)
                        }
                    }
                  ptr = c_parser_gimple_unary_expression (parser);
+                 if (ptr.value == error_mark_node
+                     || ! POINTER_TYPE_P (TREE_TYPE (ptr.value)))
+                   {
+                     if (ptr.value != error_mark_node)
+                       error_at (ptr.get_start (),
+                                 "invalid type of %<__MEM%> operand");
+                     c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
+                                                "expected %<)%>");
+                     return expr;
+                   }
                  if (! alias_type)
                    alias_type = TREE_TYPE (ptr.value);
                  /* Optional constant offset.  */
index dfd8670..393d880 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
 
        PR testsuite/80580
+       * gcc.dg/gimplefe-error-5.c: New test.
+
+2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR testsuite/80580
        * gcc.dg/gimplefe-error-4.c: New test.
 
 2017-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-5.c b/gcc/testsuite/gcc.dg/gimplefe-error-5.c
new file mode 100644 (file)
index 0000000..2bdb398
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-fgimple" } */
+
+__GIMPLE() void a()
+{
+  __MEM() = 0; /* { dg-error "expected .<." } */
+}