Index: include/clang/Basic/BuiltinsARM.def =================================================================== --- include/clang/Basic/BuiltinsARM.def +++ include/clang/Basic/BuiltinsARM.def @@ -94,7 +94,7 @@ LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES) LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES) LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES) -LANGBUILTIN(__ldrexd, "WiCDWi*", "", ALL_MS_LANGUAGES) +LANGBUILTIN(__ldrexd, "WiWiCD*", "", ALL_MS_LANGUAGES) LANGBUILTIN(_MoveFromCoprocessor, "UiUiUiUiUiUi", "", ALL_MS_LANGUAGES) LANGBUILTIN(_MoveFromCoprocessor2, "UiUiUiUiUiUi", "", ALL_MS_LANGUAGES) LANGBUILTIN(_MoveToCoprocessor, "vUiUiUiUiUiUi", "", ALL_MS_LANGUAGES) Index: test/CodeGen/builtins-arm-ms.c =================================================================== --- test/CodeGen/builtins-arm-ms.c +++ test/CodeGen/builtins-arm-ms.c @@ -0,0 +1,7 @@ +// REQUIRES: arm-registered-target +// RUN: %clang_cc1 -Wall -Werror -triple thumbv7-eabi -target-cpu cortex-a8 -O3 -emit-llvm -fms-extensions -o - %s | FileCheck %s + +void ldrexd() +{ + __ldrexd(0); // CHECK: call {{.*}} @llvm.arm.ldrexd(i8* null) +} Index: test/Sema/builtins-arm-ms.c =================================================================== --- test/Sema/builtins-arm-ms.c +++ test/Sema/builtins-arm-ms.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -triple armv7 -fsyntax-only -fms-extensions -verify %s +// RUN: %clang_cc1 -triple armv7 -target-abi apcs-gnu -fms-extensions -fsyntax-only -verify %s + +void test1() { + const long long * ptr; + __ldrexd(); // expected-error {{too few arguments to function call, expected 1, have 0}} + __ldrexd(1); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const volatile long long *'}} + __ldrexd(ptr); +}