diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -3297,6 +3297,11 @@ case PPC::BI__builtin_ppc_addex: case PPC::BI__builtin_darn: case PPC::BI__builtin_darn_raw: + case PPC::BI__builtin_ppc_compare_and_swaplp: + case PPC::BI__builtin_ppc_fetch_and_addlp: + case PPC::BI__builtin_ppc_fetch_and_andlp: + case PPC::BI__builtin_ppc_fetch_and_orlp: + case PPC::BI__builtin_ppc_fetch_and_swaplp: return true; } return false; diff --git a/clang/test/CodeGen/builtins-ppc-xlcompat-error.c b/clang/test/CodeGen/builtins-ppc-xlcompat-error.c --- a/clang/test/CodeGen/builtins-ppc-xlcompat-error.c +++ b/clang/test/CodeGen/builtins-ppc-xlcompat-error.c @@ -104,6 +104,25 @@ int test_darn_raw() { return __darn_raw(); //expected-error {{this builtin is only available on 64-bit targets}} } + +int test_builtin_ppc_compare_and_swaplp(long a, long b, long c) { + return __compare_and_swaplp(&a, &b, c); // expected-error {{this builtin is only available on 64-bit targets}} +} + +void test_builtin_ppc_fetch_and_addlp(long a, long b) { + __fetch_and_addlp(&a, b); // expected-error {{this builtin is only available on 64-bit targets}} +} + +void test_builtin_ppc_fetch_and_andlp(unsigned long a, unsigned long b) { + __fetch_and_andlp(&a, b); // expected-error {{this builtin is only available on 64-bit targets}} +} +void test_builtin_ppc_fetch_and_orlp(unsigned long a, unsigned long b) { + __fetch_and_orlp(&a, b); // expected-error {{this builtin is only available on 64-bit targets}} +} + +void test_builtin_ppc_fetch_and_swaplp(unsigned long a, unsigned long b) { + __fetch_and_swaplp(&a, b); // expected-error {{this builtin is only available on 64-bit targets}} +} #endif unsigned long test_mfspr(void) {