Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libc++] Fix missing and incorrect push/pop macros #79204

Merged
merged 4 commits into from
Jan 25, 2024

Commits on Jan 23, 2024

  1. [libc++] Fix missing and incorrect push/pop macros

    We recently noticed that the unwrap_iter.h file was pushing macros,
    but it was pushing them again instead of popping them at the end of
    the file. This led to libc++ basically swallowing any custom definition
    of these macros in user code:
    
        #define min HELLO
        #include <algorithm>
        // min is not HELLO anymore, it's not defined
    
    While investigating this issue, I noticed that our push/pop pragmas
    were actually entirely wrong too. Indeed, instead of pushing macros
    like `move`, we'd push `move(int, int)` in the pragma, which is not
    a valid macro name. As a result, we would not actually push macros
    like `move` -- instead we'd simply undefine them. This led to the
    following code not working:
    
        #define move HELLO
        #include <algorithm>
        // move is not HELLO anymore
    
    Fixing the pragma push/pop incantations led to a cascade of issues
    because we use identifiers like `move` in a large number of places,
    and all of these headers would now need to do the push/pop dance.
    
    This patch fixes all these issues. First, it adds a check that we
    don't swallow important names like min, max, move or refresh as
    explained above. This is done by augmenting the existing
    system_reserved_names.gen.py test to also check that the macros
    are what we expect after including each header.
    
    Second, it fixes the push/pop pragmas to work properly and adds
    missing pragmas to all the files I could detect a failure in via
    the newly added test.
    
    rdar://121365472
    ldionne committed Jan 23, 2024
    Configuration menu
    Copy the full SHA
    77cd06e View commit details
    Browse the repository at this point in the history
  2. Fix C++03

    ldionne committed Jan 23, 2024
    Configuration menu
    Copy the full SHA
    b7a6da8 View commit details
    Browse the repository at this point in the history

Commits on Jan 24, 2024

  1. Fix raw_storage_iterator.h

    ldionne committed Jan 24, 2024
    Configuration menu
    Copy the full SHA
    ad22c7a View commit details
    Browse the repository at this point in the history
  2. Use __builtin_strcmp

    ldionne committed Jan 24, 2024
    Configuration menu
    Copy the full SHA
    0f8dbb6 View commit details
    Browse the repository at this point in the history