Re: [PATCH] Remove warnings from v0_mangle functions in rust-mangle.cc

2021-09-21 Thread cohenarthur.dev via Gcc-rust
Thanks Mark!

I forgot to do a clean build before creating the pull request and the
file was already compiled... Sorry about that!

I'll keep on working on v0 mangling in order to get all the parts linked
correctly, but it was in a bit of a dire state :)

Cheers,
Arthur
-- 
Gcc-rust mailing list
Gcc-rust@gcc.gnu.org
https://gcc.gnu.org/mailman/listinfo/gcc-rust


Re: [PATCH] Remove warnings from v0_mangle functions in rust-mangle.cc

2021-09-21 Thread Mark Wielaard
Hi Arthur,

On Tue, 2021-09-21 at 13:58 +0200, cohenarthur.dev via Gcc-rust wrote:
> I forgot to do a clean build before creating the pull request and the
> file was already compiled... Sorry about that!
> 
> I'll keep on working on v0 mangling in order to get all the parts
> linked correctly, but it was in a bit of a dire state :)

Thanks for working on this. And no worries, I am just allergic to
warnings (I just must look at them to make sure I understand what is
going on and it wasn't me making a mistake).

Cheers,

Mark
-- 
Gcc-rust mailing list
Gcc-rust@gcc.gnu.org
https://gcc.gnu.org/mailman/listinfo/gcc-rust


[PATCH] Fix byte char and byte string lexing code

2021-09-21 Thread Mark Wielaard
There were two warnings in lexer parse_byte_char and parse_byte_string
code for arches with signed chars:

rust-lex.cc: In member function
 ‘Rust::TokenPtr Rust::Lexer::parse_byte_char(Location)’:
rust-lex.cc:1564:21: warning: comparison is always false due to limited
 range of data type [-Wtype-limits]
 1564 |   if (byte_char > 127)
  |   ~~^
rust-lex.cc: In member function
 ‘Rust::TokenPtr Rust::Lexer::parse_byte_string(Location)’:
rust-lex.cc:1639:27: warning: comparison is always false due to limited
 range of data type [-Wtype-limits]
 1639 |   if (output_char > 127)
  |   ^

The fix would be to cast to an unsigned char before the comparison.
But that is actually wrong, and would produce the following errors
parsing a byte char or byte string:

bytecharstring.rs:3:14: error: ‘byte char’ ‘�’ out of range
3 |   let _bc = b'\x80';
  |  ^
bytecharstring.rs:4:14: error: character ‘�’ in byte string out of range
4 |   let _bs = b"foo\x80bar";
  |  ^

Both byte chars and byte strings may contain up to \xFF (255)
characters. It is utf-8 chars or strings that can only

Remove the faulty check and add a new testcase bytecharstring.rs
that checks byte chars and strings do accept > 127 hex char
escapes, but utf-8 chars and strings reject such hex char escapes.
---

https://code.wildebeest.org/git/user/mjw/gccrs/commit/?h=bytecharstring

 gcc/rust/lex/rust-lex.cc | 15 ---
 gcc/testsuite/rust/compile/bytecharstring.rs |  8 
 2 files changed, 8 insertions(+), 15 deletions(-)
 create mode 100644 gcc/testsuite/rust/compile/bytecharstring.rs

diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index 49b6b6d32a7..b70877be9ff 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -1559,13 +1559,6 @@ Lexer::parse_byte_char (Location loc)
   byte_char = std::get<0> (escape_length_pair);
   length += std::get<1> (escape_length_pair);
 
-  if (byte_char > 127)
-   {
- rust_error_at (get_current_location (),
-"% %<%c%> out of range", byte_char);
- byte_char = 0;
-   }
-
   current_char = peek_input ();
 
   if (current_char != '\'')
@@ -1634,14 +1627,6 @@ Lexer::parse_byte_string (Location loc)
  else
length += std::get<1> (escape_length_pair);
 
- if (output_char > 127)
-   {
- rust_error_at (get_current_location (),
-"character %<%c%> in byte string out of range",
-output_char);
- output_char = 0;
-   }
-
  if (output_char != 0)
str += output_char;
 
diff --git a/gcc/testsuite/rust/compile/bytecharstring.rs 
b/gcc/testsuite/rust/compile/bytecharstring.rs
new file mode 100644
index 000..9242e2c5a0b
--- /dev/null
+++ b/gcc/testsuite/rust/compile/bytecharstring.rs
@@ -0,0 +1,8 @@
+fn main ()
+{
+  let _bc = b'\x80';
+  let _bs = b"foo\x80bar";
+
+  let _c = '\xef';// { dg-error "out of range" }
+  let _s = "Foo\xEFBar";  // { dg-error "out of range" }
+}
-- 
2.32.0

-- 
Gcc-rust mailing list
Gcc-rust@gcc.gnu.org
https://gcc.gnu.org/mailman/listinfo/gcc-rust