[PATCH] Add mask values for the default rune table.

Jonathan Roelofs jonathan at codesourcery.com
Sun Mar 8 10:59:14 PDT 2015


@mclow.lists AFAICT, for Newlib, it's not possible for isblank to match between the c and c++ libs here (without the separate table) because '\t' doesn't have _B set in the table, but `isblank(int)` is defined like this:

  int isblank(int c) {
    return ((__ctype_ptr__[c+1] & _B) || (c == '\t'));
  }

so `ctype<char>::is(ctype_base::blank, '\t')` would return false, whereas `isblank('\t')` would return true. Using a libc++-provided table, this problem goes away. I think Bionic has the same issue.

We could put in exhaustive checks that the two match, but I'm not convinced that failing that sort of test really means anything... we're allowed to differ here, right?

There was another case where I thought we absolutely needed a separate table (having to do with Newlib's masks not being true bitmasks), but my notes on the subject are only confusing me more :(


REPOSITORY
  rL LLVM

http://reviews.llvm.org/D8129

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the cfe-commits mailing list