<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61641>61641</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            `clang++ -E -dM -` fails with either `/etc/clang/clang++.cfg` or an explicit `-std=c++NN` argument
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          thesamesam
      </td>
    </tr>
</table>

<pre>
    The driver code for preprocessing currently forces C mode when stdin is used as an argument, even when the used driver is `clang++` (or otherwise originally in C++ mode).

When invoked as `clang++`, `clang++` reads `/etc/clang/clang++.cfg` accordingly where C++ specific parameters might be passed.

The special handling has been in Clang since 1688f1a7e0add08f7799485e9eb41a7ed440391d and still exists in the same form now:
https://github.com/llvm/llvm-project/blob/89a1af749166627704cdf9d676455d32616c2c06/clang/lib/Driver/Driver.cpp#L2606

This originally came up at https://reviews.llvm.org/D133375#4214214.

Steps to reproduce (method 1, config file):
```console
mkdir -p /etc/clang
echo "-std=c++17" >> /etc/clang/clang++.cfg
clang++ -E -dM -
```

Steps to reproduce (method 2, explicit argument):
```console
echo "int main();" | clang++ -std=c++17  -E -dM -
```

This is problematic for e.g. Meson which tries to invoke the active C++ compiler to determine any predefined macros. This is not specific to configuration files, but is worse with it. This issue didn't occur when using the legacy `CLANG_DEFAULT_STD_CXX` CMake option though.

cc @tambry @MaskRay @mgorny @eli-schwartz
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVcFy4ygQ_Rp86bJLQjKSDj4kdryXJIedbO3cUghaEhsEKkD2eL9-C5w4cXLYTBWyEWro192vH9x71RvEDVnfkvVuwecwWLcJA3o-xmfRWnnaPA0I0qkDOhBWInTWweRwclag98r0IGbn0AR9it8EetjCGC2PAxrwQSoDysPsUQL3wA1w188jmkDoFvCA5mwZBjwbvXpTHgjLhOamJ_Q2DpYBobV1YMOA7qg8gnWqV4ZrfQJlYHs2TO4JbVYk25Hs5vz7d_ShzMG-nHF8OTui-erQIZfJmNA9BkHo_tVg_8FwJbo-GnMhrJPK9PoUY3J4QeQnFKpTAibu-IgBnYdR9UOAFmHi3qO8QhuznvZwDQM3UsdED9xDiykM2Ebv4JURCDmr6y7nFWZcyqzuqqppynqNDbZlXJZlmRVNLoEbCT4orQF_KR98PCimPRY8Fm8EY4-keMUwhDD5-Eb3hO57FYa5XQk7ErrX-vD2t5yc_QdFIHTfatsSuq8bnvOuKpucMUarKiuF7BrJKlau17KgLGeCiox9yKVWceMuFf4yWYlpIrS4pyxj17lR_mPhRUQ_T8ADXEN2eFB49KsIc2VddLTLi6Ko1oQWJc3juMr6j4CTh2Ah8VvOAiPhRgyDlZBHgghrOtVDp3Qk2CVVkR9pCGu81XheHV-kcrCc4BN30kcUgwVC6dIHSYqdOBMlrwilQIo7Utx93vaVcumgD4uwvIOlfIDlJ1TfjpGmlvw1aSVU-NCn_xfpWzDKBBi5MoTWadNtiqbawhXITxHDd2CnoisPk7OtxpEHJZIU4apfwQN6G1VEiQGCU5jiO_d64jcXQR3em1HYcVIaXbSSsRdHZRC4OUVhk9gpgxJGLpz1K3hzbGx47-JgX5kwOx6UNYkQPiavnUO0PlrnEY4qDKDC5RA_I0glDaFVACvE7M7SNycdjUg19lycot5s728e_3je3e1v_rp_ev7xtHve_vwZRWb7wF8Q7JT8hsHO_XBFYiGAlFngY-tOcfbA_cufPE3H3jqTZqjV0ovhyF34dyE3hWyKhi9wk7OqWRfxWQybrGmqEou6rdZlV-RY56xB1jSsqiVvGC7Uhma0yApaZDRv8mJVy5LVtFhXskVsGYueRq70pQUXKQkblrMyX2jeovZv94_bJDlp596TMtNRn963BRU0bq7l-Z02LIOOK-3PCUcVr4fvarZ18Uq6cJ6w7Jqfj49J2V9bYTE7vfltYUxBe0L3Ke7_AgAA__9vaU-y">