Hi kongyi,
The parameter definition of this API is const volatile __int64*, but it is not
defined correctly in clang. Move the 'CD' to the correct location.
Bug tracked here: http://llvm.org/bugs/show_bug.cgi?id=21004
http://reviews.llvm.org/D6598
Files:
include/clang/Basic/BuiltinsARM.def
test/CodeGen/builtins-arm-ms.c
test/Sema/builtins-arm-ms.c
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
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);
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits