nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1--- b/include/clang/Basic/TargetInfo.h
2+++ a/include/clang/Basic/TargetInfo.h
3@@ -612,8 +612,8 @@
4 }
5
6 /// Return the largest alignment for which a suitably-sized allocation with
7+ /// '::operator new(size_t)' is guaranteed to produce a correctly-aligned
8+ /// pointer.
9- /// '::operator new(size_t)' or 'malloc' is guaranteed to produce a
10- /// correctly-aligned pointer.
11 unsigned getNewAlign() const {
12 return NewAlign ? NewAlign : std::max(LongDoubleAlign, LongLongAlign);
13 }
14--- b/lib/CodeGen/CGCall.cpp
15+++ a/lib/CodeGen/CGCall.cpp
16@@ -2048,24 +2048,6 @@
17 // allows it to work on indirect virtual function calls.
18 if (AttrOnCallSite && TargetDecl->hasAttr<NoMergeAttr>())
19 FuncAttrs.addAttribute(llvm::Attribute::NoMerge);
20-
21- // Add known guaranteed alignment for allocation functions.
22- if (unsigned BuiltinID = Fn->getBuiltinID()) {
23- switch (BuiltinID) {
24- case Builtin::BIaligned_alloc:
25- case Builtin::BIcalloc:
26- case Builtin::BImalloc:
27- case Builtin::BImemalign:
28- case Builtin::BIrealloc:
29- case Builtin::BIstrdup:
30- case Builtin::BIstrndup:
31- RetAttrs.addAlignmentAttr(Context.getTargetInfo().getNewAlign() /
32- Context.getTargetInfo().getCharWidth());
33- break;
34- default:
35- break;
36- }
37- }
38 }
39
40 // 'const', 'pure' and 'noalias' attributed functions are also nounwind.
41--- b/test/CodeGen/alloc-fns-alignment.c
42+++ /dev/null
43@@ -1,35 +0,0 @@
44-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm < %s | FileCheck %s --check-prefix=ALIGN16
45-// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm < %s | FileCheck %s --check-prefix=ALIGN16
46-// RUN: %clang_cc1 -triple i386-apple-darwin -emit-llvm < %s | FileCheck %s --check-prefix=ALIGN16
47-// RUN: %clang_cc1 -triple i386-unknown-linux-gnu -emit-llvm < %s | FileCheck %s --check-prefix=ALIGN8
48-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-malloc -emit-llvm < %s | FileCheck %s --check-prefix=NOBUILTIN-MALLOC
49-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-calloc -emit-llvm < %s | FileCheck %s --check-prefix=NOBUILTIN-CALLOC
50-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-realloc -emit-llvm < %s | FileCheck %s --check-prefix=NOBUILTIN-REALLOC
51-
52-typedef __SIZE_TYPE__ size_t;
53-
54-void *malloc(size_t);
55-void *calloc(size_t, size_t);
56-void *realloc(void *, size_t);
57-
58-void *malloc_test(size_t n) {
59- return malloc(n);
60-}
61-
62-void *calloc_test(size_t n) {
63- return calloc(1, n);
64-}
65-
66-void *raalloc_test(void *p, size_t n) {
67- return realloc(p, n);
68-}
69-
70-// ALIGN16: align 16 i8* @malloc
71-// ALIGN16: align 16 i8* @calloc
72-// ALIGN16: align 16 i8* @realloc
73-// ALIGN8: align 8 i8* @malloc
74-// ALIGN8: align 8 i8* @calloc
75-// ALIGN8: align 8 i8* @realloc
76-// NOBUILTIN-MALLOC: declare i8* @malloc
77-// NOBUILTIN-CALLOC: declare i8* @calloc
78-// NOBUILTIN-REALLOC: declare i8* @realloc