]> granicus.if.org Git - clang/commitdiff
libstdc++ 4.2 also uses __is_same as a struct name, which conflicts with our new...
authorDouglas Gregor <dgregor@apple.com>
Fri, 29 Apr 2011 01:38:03 +0000 (01:38 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 29 Apr 2011 01:38:03 +0000 (01:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130468 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseDeclCXX.cpp
test/SemaCXX/libstdcxx_is_pod_hack.cpp

index 92cdfffdc0899272138cad631e00b357966553c5..30dc50077a7c0827b9dd263fd850b7c76e3394d4 100644 (file)
@@ -738,7 +738,8 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
        Tok.is(tok::kw___is_pointer) ||
        Tok.is(tok::kw___is_arithmetic) ||
        Tok.is(tok::kw___is_fundamental) ||
-       Tok.is(tok::kw___is_scalar))) {
+       Tok.is(tok::kw___is_scalar) ||
+       Tok.is(tok::kw___is_same))) {
     // GNU libstdc++ 4.2 uses certain intrinsic names as the name of
     // struct templates, but these are keywords in GCC >= 4.3 and
     // Clang. Therefore, when we see the token sequence "struct X", make
index 3cc476dc2893c1629d0a0e34bc1a1b7dda27a91c..01f0532c1da47fa40f51f5c957dc2b8bbee239e6 100644 (file)
@@ -12,6 +12,13 @@ struct __is_pod {
 
 __is_pod<int> ipi;
 
+// Ditto for __is_same.
+template<typename T>
+struct __is_same {
+};
+
+__is_same<int> ipi;
+
 // Another, similar egregious hack for __is_signed, which is a type
 // trait in Embarcadero's compiler but is used as an identifier in
 // libstdc++.