[PATCH] D91913: Suppress non-conforming GNU paste extension in all standard-conforming modes

Harald van Dijk via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 27 17:00:58 PST 2021


hvdijk added a comment.

In D91913#2526866 <https://reviews.llvm.org/D91913#2526866>, @dmajor wrote:

> If I'm reading git correctly, the change is still present on the 12.x branch. Should it be reverted there too?

I could have sworn that I saw it already reverted on the 12.x branch too, but I don't know what it was that I was looking at. It doesn't make sense to me to leave it applied on 12.x but not have it applied on main. Unless it can be reapplied on main, yes, I think it should be reverted on the 12.x branch.

And I might as well include this here for the benefit of anyone else affected by this in the future: adapting Jens Gustedt's trick just a little bit, given the below, `MAYBE_COMMA(__VA_ARGS__) __VA_ARGS__` is pretty much a drop-in replacement for `__VA_OPT__(,) __VA_ARGS__`, assuming no odd macro arguments are used. It's not exactly the same thing as `, ## __VA_ARGS__`, but generally close enough.

  #define ARG128(                                  \
     _0,   _1,   _2,   _3,   _4,   _5,   _6,   _7, \
     _8,   _9,  _10,  _11,  _12,  _13,  _14,  _15, \
    _16,  _17,  _18,  _19,  _20,  _21,  _22,  _23, \
    _24,  _25,  _26,  _27,  _28,  _29,  _30,  _31, \
    _32,  _33,  _34,  _35,  _36,  _37,  _38,  _39, \
    _40,  _41,  _42,  _43,  _44,  _45,  _46,  _47, \
    _48,  _49,  _50,  _51,  _52,  _53,  _54,  _55, \
    _56,  _57,  _58,  _59,  _60,  _61,  _62,  _63, \
    _64,  _65,  _66,  _67,  _68,  _69,  _70,  _71, \
    _72,  _73,  _74,  _75,  _76,  _77,  _78,  _79, \
    _80,  _81,  _82,  _83,  _84,  _85,  _86,  _87, \
    _88,  _89,  _90,  _91,  _92,  _93,  _94,  _95, \
    _96,  _97,  _98,  _99, _100, _101, _102, _103, \
   _104, _105, _106, _107, _108, _109, _110, _111, \
   _112, _113, _114, _115, _116, _117, _118, _119, \
   _120, _121, _122, _123, _124, _125, _126, _127, \
   ...) _127
  
  #define IF_HAS_COMMA(a, b, ...) \
   /* Expands to a if __VA_ARGS__ contains a comma, b otherwise. */ \
   ARG128(__VA_ARGS__                               \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, \
    a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, b,)
  
  #define CONCAT_5_(a, b, c, d, e) a ## b ## c ## d ## e
  #define CONCAT_5(a, b, c, d, e) CONCAT_5_(a, b, c, d, e)
  
  #define COMMA(...) ,
  #define EMPTY(...)
  
  #define MAYBE_COMMA_1000 ,
  #define MAYBE_COMMA(...) \
    /* Expands to , if __VA_ARGS__ is non-empty, nothing otherwise. */ \
    IF_HAS_COMMA(EMPTY, COMMA, CONCAT_5(MAYBE_COMMA_, \
      IF_HAS_COMMA(1, 0, COMMA __VA_ARGS__ ()),       \
      IF_HAS_COMMA(1, 0,       __VA_ARGS__   ),       \
      IF_HAS_COMMA(1, 0, COMMA __VA_ARGS__   ),       \
      IF_HAS_COMMA(1, 0,       __VA_ARGS__ ())))()


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91913/new/

https://reviews.llvm.org/D91913



More information about the cfe-commits mailing list