Windows Support
---------------
+- An MSVC compatibility workaround for C++ operator names was removed. As a
+ result, the ``<query.h>`` Windows SDK header may not compile out of the box.
+ Users should use a recent SDK and pass ``-DQUERY_H_RESTRICTION_PERMISSIVE``
+ or pass ``/permissive`` to disable C++ operator names altogether. See
+ `PR42427 <https://llvm.org/pr42427>` for more info.
+
C Language Changes in Clang
---------------------------
// is cleaned to tok::identifier "B". After cleaning the token's length is
// still 3 and the SourceLocation refers to the location of the backslash.
Identifier.setIdentifierInfo(II);
- if (getLangOpts().MSVCCompat && II->isCPlusPlusOperatorKeyword() &&
- getSourceManager().isInSystemHeader(Identifier.getLocation()))
- Identifier.setKind(tok::identifier);
- else
- Identifier.setKind(II->getTokenID());
+ Identifier.setKind(II->getTokenID());
return II;
}
+++ /dev/null
-// RUN: %clang_cc1 \
-// RUN: -fms-compatibility -x c++-cpp-output \
-// RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: %s -verify
-// expected-no-diagnostics
-# 1 "t.cpp"
-# 1 "query.h" 1 3
-// MS header <query.h> uses operator keyword as field name.
-// Compile without syntax errors.
-struct tagRESTRICTION
- {
- union _URes
- {
- int or; // Note use of cpp operator token
- } res;
- };
+++ /dev/null
-// RUN: %clang_cc1 \
-// RUN: -fms-compatibility -x c++-cpp-output \
-// RUN: -ffreestanding -fsyntax-only -Werror \
-// RUN: %s -verify
-
-
-# 1 "t.cpp"
-# 1 "query.h" 1 3 4
-// MS header <query.h> uses operator keyword as field name.
-// Compile without syntax errors.
-struct tagRESTRICTION
- {
- union _URes
- {
- int or; // Note use of cpp operator token
- } res;
- };
- ;
-
-int aa ( int x)
-{
- // In system header code, treat operator keyword as identifier.
- if ( // expected-note{{to match this '('}}
- x>1 or x<0) return 1; // expected-error{{expected ')'}}
- else return 0;
-}
-
+++ /dev/null
-// RUN: %clang_cc1 -triple x86_64-pc-win32 -fms-compatibility \
-// RUN: -ffreestanding -fsyntax-only -Werror %s -verify
-// RUN: %clang_cc1 \
-// RUN: -ffreestanding -fsyntax-only -Werror %s -verify
-// expected-no-diagnostics
-int bb ( int x)
-{
- // In user code, treat operator keyword as operator keyword.
- if ( x>1 or x<0) return 1;
- else return 0;
-}