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

Reply via email to