Update Clang for rebase to r212749.
This also fixes a small issue with arm_neon.h not being generated always.
Includes a cherry-pick of:
r213450 - fixes mac-specific header issue
r213126 - removes a default -Bsymbolic on Android
Change-Id: I2a790a0f5d3b2aab11de596fc3a74e7cbc99081d
diff --git a/test/Parser/ms-if-exists.cpp b/test/Parser/ms-if-exists.cpp
new file mode 100644
index 0000000..79cc571
--- /dev/null
+++ b/test/Parser/ms-if-exists.cpp
@@ -0,0 +1,117 @@
+// RUN: %clang_cc1 %s -std=c++11 -fsyntax-only -Wmicrosoft -verify -fms-extensions
+
+class MayExist {
+private:
+ typedef int Type;
+};
+
+void test_if_exists_stmts() {
+ int b = 0;
+ __if_exists(MayExist::Type) {
+ b++;
+ b++;
+ }
+ __if_exists(MayExist::Type_not) {
+ this will not compile.
+ }
+ __if_not_exists(MayExist::Type) {
+ this will not compile.
+ }
+ __if_not_exists(MayExist::Type_not) {
+ b++;
+ b++;
+ }
+}
+
+int if_exists_creates_no_scope() {
+ __if_exists(MayExist::Type) {
+ int x; // 'x' is declared in the parent scope.
+ }
+ __if_not_exists(MayExist::Type_not) {
+ x++;
+ }
+ return x;
+}
+
+__if_exists(MayExist::Type) {
+ int var23;
+}
+
+__if_exists(MayExist::Type_not) {
+ this will not compile.
+}
+
+__if_not_exists(MayExist::Type) {
+ this will not compile.
+}
+
+__if_not_exists(MayExist::Type_not) {
+ int var244;
+}
+
+void test_if_exists_init_list() {
+
+ int array1[] = {
+ 0,
+ __if_exists(MayExist::Type) {2, }
+ 3
+ };
+
+ int array2[] = {
+ 0,
+ __if_exists(MayExist::Type_not) { this will not compile }
+ 3
+ };
+
+ int array3[] = {
+ 0,
+ __if_not_exists(MayExist::Type_not) {2, }
+ 3
+ };
+
+ int array4[] = {
+ 0,
+ __if_not_exists(MayExist::Type) { this will not compile }
+ 3
+ };
+
+}
+
+
+class IfExistsClassScope {
+ __if_exists(MayExist::Type) {
+ // __if_exists, __if_not_exists can nest
+ __if_not_exists(MayExist::Type_not) {
+ int var123;
+ }
+ int var23;
+ }
+
+ __if_exists(MayExist::Type_not) {
+ this will not compile.
+ }
+
+ __if_not_exists(MayExist::Type) {
+ this will not compile.
+ }
+
+ __if_not_exists(MayExist::Type_not) {
+ int var244;
+ }
+};
+
+void test_nested_if_exists() {
+ __if_exists(MayExist::Type) {
+ int x = 42;
+ __if_not_exists(MayExist::Type_not) {
+ x++;
+ }
+ }
+}
+
+void test_attribute_on_if_exists() {
+ [[clang::fallthrough]] // expected-error {{an attribute list cannot appear here}}
+ __if_exists(MayExist::Type) {
+ int x;
+ }
+}