Hello community,
here is the log from the commit of package sparse for openSUSE:Factory checked in at 2016-08-05 18:17:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sparse (Old)
and /work/SRC/openSUSE:Factory/.sparse.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sparse"
Changes:
--------
--- /work/SRC/openSUSE:Factory/sparse/sparse.changes 2016-05-17 17:15:05.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.sparse.new/sparse.changes 2016-08-05 18:17:55.000000000 +0200
@@ -1,0 +2,17 @@
+Thu Aug 04 13:37:04 UTC 2016 - jslaby@suse.com
+
+- Switch to the chrisl's repo
+- Update to version 0.5+git.20160223:
+ * Ignore pure attribute in assignement
+ * Add tests for the builtin INF and nan() functions.
+ * sparse/parse.c: ignore hotpatch attribute
+ * sparse, llvm: compile: skip function prototypes to avoid SIGSEGV
+ * validation/prototype: regression for skipping prototypes
+ * ptrlist: reading deleted items in NEXT_PTR_LIST()
+ * .gitignore: add cscope and Qt project files
+ * Add default case to switches on enum variables
+ * Fix size calculation of unsized bool array
+ * Do not drop 'nocast' modifier when taking the address.
+- add parse-add-support-for-no_sanitize_-attributes.patch
+
+-------------------------------------------------------------------
Old:
----
sparse-0.5+git.20150208.tar.xz
New:
----
parse-add-support-for-no_sanitize_-attributes.patch
sparse-0.5+git.20160223.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sparse.spec ++++++
--- /var/tmp/diff_new_pack.GBi65m/_old 2016-08-05 18:17:56.000000000 +0200
+++ /var/tmp/diff_new_pack.GBi65m/_new 2016-08-05 18:17:56.000000000 +0200
@@ -17,13 +17,14 @@
Name: sparse
-Version: 0.5+git.20150208
+Version: 0.5+git.20160223
Release: 0
Summary: A semantic parser of source files
License: MIT
Group: Development/Tools/Building
Url: https://sparse.wiki.kernel.org/index.php/Main_Page
Source: sparse-%{version}.tar.xz
+Patch0: parse-add-support-for-no_sanitize_-attributes.patch
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: make
@@ -79,6 +80,7 @@
%prep
%setup -q
+%patch0 -p1
%build
make \
++++++ _service ++++++
--- /var/tmp/diff_new_pack.GBi65m/_old 2016-08-05 18:17:56.000000000 +0200
+++ /var/tmp/diff_new_pack.GBi65m/_new 2016-08-05 18:17:56.000000000 +0200
@@ -1,6 +1,6 @@
<services>
<service mode="localonly" name="tar_scm">
- <param name="url">git://git.kernel.org/pub/scm/devel/sparse/sparse.git</param>
+ <param name="url">git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
<param name="filename">sparse</param>
++++++ parse-add-support-for-no_sanitize_-attributes.patch ++++++
From: Jiri Slaby
Date: Thu, 4 Aug 2016 15:24:11 +0200
Subject: parse: add support for no_sanitize_* attributes
Patch-mainline: no, submitted
gcc added support for new no_sanitize_* function attributes:
* no_address_safety_analysis
* no_sanitize_address
* no_sanitize_thread
* no_sanitize_undefined
The kernel uses at least no_sanitize_address as of now. So add them
(and their __...__ counterparts) to ignored_attributes as we can
safely ignore them.
Signed-off-by: Jiri Slaby
---
parse.c | 8 ++++++++
validation/attr-no_sanitize.c | 15 +++++++++++++++
2 files changed, 23 insertions(+)
create mode 100644 validation/attr-no_sanitize.c
diff --git a/parse.c b/parse.c
index b43d6835528b..c1ce70b2a4e5 100644
--- a/parse.c
+++ b/parse.c
@@ -562,6 +562,14 @@ const char *ignored_attributes[] = {
"__naked__",
"no_instrument_function",
"__no_instrument_function__",
+ "no_address_safety_analysis",
+ "__no_address_safety_analysis__",
+ "no_sanitize_address",
+ "__no_sanitize_address__",
+ "no_sanitize_thread",
+ "__no_sanitize_thread__",
+ "no_sanitize_undefined",
+ "__no_sanitize_undefined__",
"noclone",
"__noclone",
"__noclone__",
diff --git a/validation/attr-no_sanitize.c b/validation/attr-no_sanitize.c
new file mode 100644
index 000000000000..c776027ff202
--- /dev/null
+++ b/validation/attr-no_sanitize.c
@@ -0,0 +1,15 @@
+static void __attribute__((no_sanitize_address)) foo(void)
+{
+}
+
+static void __attribute__((no_sanitize_thread)) bar(void)
+{
+}
+
+static void __attribute__((no_sanitize_undefined)) baz(void)
+{
+}
+
+/*
+ * check-name: attribute no_sanitize_address
+ */
--
2.9.2
++++++ sparse-0.5+git.20150208.tar.xz -> sparse-0.5+git.20160223.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/c2xml.c new/sparse-0.5+git.20160223/c2xml.c
--- old/sparse-0.5+git.20150208/c2xml.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/c2xml.c 2016-08-04 15:37:01.000000000 +0200
@@ -214,6 +214,8 @@
case SYM_UNINITIALIZED:
newProp(child, "base-type-builtin", builtin_typename(sym));
break;
+ default:
+ break;
}
return;
}
@@ -330,4 +332,3 @@
return 0;
}
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/evaluate.c new/sparse-0.5+git.20160223/evaluate.c
--- old/sparse-0.5+git.20150208/evaluate.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/evaluate.c 2016-08-04 15:37:01.000000000 +0200
@@ -623,7 +623,7 @@
static void examine_fn_arguments(struct symbol *fn);
-#define MOD_IGN (MOD_VOLATILE | MOD_CONST)
+#define MOD_IGN (MOD_VOLATILE | MOD_CONST | MOD_PURE)
const char *type_difference(struct ctype *c1, struct ctype *c2,
unsigned long mod1, unsigned long mod2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/lib.c new/sparse-0.5+git.20160223/lib.c
--- old/sparse-0.5+git.20150208/lib.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/lib.c 2016-08-04 15:37:01.000000000 +0200
@@ -876,6 +876,17 @@
add_pre_buffer("extern int __builtin_islessgreater(float, float);\n");
add_pre_buffer("extern int __builtin_isunordered(float, float);\n");
+ /* And some INFINITY / NAN stuff.. */
+ add_pre_buffer("extern double __builtin_huge_val(void);\n");
+ add_pre_buffer("extern float __builtin_huge_valf(void);\n");
+ add_pre_buffer("extern long double __builtin_huge_vall(void);\n");
+ add_pre_buffer("extern double __builtin_inf(void);\n");
+ add_pre_buffer("extern float __builtin_inff(void);\n");
+ add_pre_buffer("extern long double __builtin_infl(void);\n");
+ add_pre_buffer("extern double __builtin_nan(const char *);\n");
+ add_pre_buffer("extern float __builtin_nanf(const char *);\n");
+ add_pre_buffer("extern long double __builtin_nanl(const char *);\n");
+
/* And some __FORTIFY_SOURCE ones.. */
add_pre_buffer ("extern __SIZE_TYPE__ __builtin_object_size(void *, int);\n");
add_pre_buffer ("extern void * __builtin___memcpy_chk(void *, const void *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
@@ -959,6 +970,7 @@
add_pre_buffer("#define __builtin_va_alist (*(void *)0)\n");
add_pre_buffer("#define __builtin_va_arg_incr(x) ((x) + 1)\n");
add_pre_buffer("#define __builtin_va_copy(dest, src) ({ dest = src; (void)0; })\n");
+ add_pre_buffer("#define __builtin_ms_va_copy(dest, src) ({ dest = src; (void)0; })\n");
add_pre_buffer("#define __builtin_va_end(arg)\n");
add_pre_buffer("#define __builtin_ms_va_end(arg)\n");
add_pre_buffer("#define __builtin_va_arg_pack()\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/parse.c new/sparse-0.5+git.20160223/parse.c
--- old/sparse-0.5+git.20150208/parse.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/parse.c 2016-08-04 15:37:01.000000000 +0200
@@ -540,6 +540,8 @@
"__gnu_inline__",
"hot",
"__hot__",
+ "hotpatch",
+ "__hotpatch__",
"leaf",
"__leaf__",
"l1_text",
@@ -2769,6 +2771,9 @@
case SYM_ENUM:
case SYM_RESTRICT:
base_type->ident = ident;
+ break;
+ default:
+ break;
}
}
} else if (base_type && base_type->type == SYM_FN) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/ptrlist.h new/sparse-0.5+git.20160223/ptrlist.h
--- old/sparse-0.5+git.20150208/ptrlist.h 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/ptrlist.h 2016-08-04 15:37:01.000000000 +0200
@@ -97,6 +97,8 @@
} else { \
__list = __list->next; \
ptr = NULL; \
+ while (__list->nr == 0 && __list != __head) \
+ __list = __list->next; \
if (__list != __head) { \
__nr = 0; \
ptr = PTR_ENTRY(__list,0); \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/sparse-llvm.c new/sparse-0.5+git.20160223/sparse-llvm.c
--- old/sparse-0.5+git.20150208/sparse-llvm.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/sparse-llvm.c 2016-08-04 15:37:01.000000000 +0200
@@ -1070,6 +1070,13 @@
return data;
}
+static int is_prototype(struct symbol *sym)
+{
+ if (sym->type == SYM_NODE)
+ sym = sym->ctype.base_type;
+ return sym && sym->type == SYM_FN && !sym->stmt;
+}
+
static int compile(LLVMModuleRef module, struct symbol_list *list)
{
struct symbol *sym;
@@ -1077,6 +1084,10 @@
FOR_EACH_PTR(list, sym) {
struct entrypoint *ep;
expand_symbol(sym);
+
+ if (is_prototype(sym))
+ continue;
+
ep = linearize_symbol(sym);
if (ep)
output_fn(module, ep);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/symbol.c new/sparse-0.5+git.20160223/symbol.c
--- old/sparse-0.5+git.20150208/symbol.c 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/symbol.c 2016-08-04 15:37:01.000000000 +0200
@@ -393,7 +393,7 @@
int count = count_array_initializer(node_type, initializer);
if (node_type && node_type->bit_size >= 0)
- bit_size = node_type->bit_size * count;
+ bit_size = array_element_offset(node_type->bit_size, count);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/symbol.h new/sparse-0.5+git.20160223/symbol.h
--- old/sparse-0.5+git.20150208/symbol.h 2016-05-08 12:52:56.000000000 +0200
+++ new/sparse-0.5+git.20160223/symbol.h 2016-08-04 15:37:01.000000000 +0200
@@ -247,7 +247,7 @@
#define MOD_SIZE (MOD_CHAR | MOD_SHORT | MOD_LONG_ALL)
#define MOD_IGNORE (MOD_TOPLEVEL | MOD_STORAGE | MOD_ADDRESSABLE | \
MOD_ASSIGNED | MOD_USERTYPE | MOD_ACCESSED | MOD_EXPLICITLY_SIGNED)
-#define MOD_PTRINHERIT (MOD_VOLATILE | MOD_CONST | MOD_NODEREF | MOD_STORAGE | MOD_NORETURN)
+#define MOD_PTRINHERIT (MOD_VOLATILE | MOD_CONST | MOD_NODEREF | MOD_STORAGE | MOD_NORETURN | MOD_NOCAST)
/* Current parsing/evaluation function */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/validation/bool-array.c new/sparse-0.5+git.20160223/validation/bool-array.c
--- old/sparse-0.5+git.20150208/validation/bool-array.c 1970-01-01 01:00:00.000000000 +0100
+++ new/sparse-0.5+git.20160223/validation/bool-array.c 2016-08-04 15:37:02.000000000 +0200
@@ -0,0 +1,47 @@
+static _Bool boolarray_d1[1];
+static _Bool boolarray_d8[8];
+static _Bool boolarray_i2[2] = {
+ 0,
+ 1,
+};
+static int nd1 = sizeof(boolarray_d1);
+static int nd8 = sizeof(boolarray_d8);
+static int ni2 = sizeof(boolarray_i2);
+
+
+static long longarray_u2[] = {
+ 0,
+ 1,
+};
+static int nl2 = sizeof(longarray_u2);
+
+/*
+ * Used to get "warning: excessive elements in array initializer"
+ * for all elements but the first one.
+ * Note: only occurs if nbr of elements is a multiple of 8
+ * (if not, theer was another problem)
+ */
+static _Bool boolarray_u8[] = {
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 1,
+};
+
+/*
+ * Used to get "error: cannot size expression" for the sizeof.
+ */
+static _Bool boolarray_u2[] = {
+ 0,
+ 1,
+};
+static int nu2 = sizeof(boolarray_u2);
+
+/*
+ * check-name: sizeof(bool array)
+ * check-command: sparse -Wno-sizeof-bool $file
+ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/validation/builtin_inf.c new/sparse-0.5+git.20160223/validation/builtin_inf.c
--- old/sparse-0.5+git.20150208/validation/builtin_inf.c 1970-01-01 01:00:00.000000000 +0100
+++ new/sparse-0.5+git.20160223/validation/builtin_inf.c 2016-08-04 15:37:02.000000000 +0200
@@ -0,0 +1,13 @@
+static double d = __builtin_huge_val();
+static float f = __builtin_huge_valf();
+static long double l = __builtin_huge_vall();
+static double di = __builtin_inf();
+static float fi = __builtin_inff();
+static long double li = __builtin_infl();
+static double dn = __builtin_nan("");
+static float fn = __builtin_nanf("");
+static long double ln = __builtin_nanl("");
+
+/*
+ * check-name: __builtin INFINITY / nan()
+ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/validation/nocast.c new/sparse-0.5+git.20160223/validation/nocast.c
--- old/sparse-0.5+git.20150208/validation/nocast.c 1970-01-01 01:00:00.000000000 +0100
+++ new/sparse-0.5+git.20160223/validation/nocast.c 2016-08-04 15:37:02.000000000 +0200
@@ -0,0 +1,197 @@
+#define __nocast __attribute__((nocast))
+typedef unsigned long __nocast ulong_nc_t;
+
+extern void use_val(ulong_nc_t);
+extern void use_ptr(ulong_nc_t *);
+
+/* use address */
+static void good_use_address(void)
+{
+ ulong_nc_t t;
+
+ use_ptr(&t);
+}
+
+static ulong_nc_t *good_ret_address(void)
+{
+ static ulong_nc_t t;
+
+ return &t;
+}
+
+static ulong_nc_t good_deref(ulong_nc_t *t)
+{
+ return *t;
+}
+
+/* assign value */
+static ulong_nc_t t;
+static ulong_nc_t good_assign_self = t;
+static unsigned long good_assign_sametype = t;
+
+/* assign pointer */
+static ulong_nc_t *good_ptr = &t;
+static ulong_nc_t *bad_ptr_to = 1UL;
+static unsigned long *bad_ptr_from = &t;
+
+/* arithmetic operation */
+static ulong_nc_t good_arith(ulong_nc_t t, unsigned int n)
+{
+ return t + n;
+}
+
+/* implicit cast to other types */
+static unsigned long good_ret_samecast(ulong_nc_t t)
+{
+ return t;
+}
+static unsigned long long bad_ret_biggercast(ulong_nc_t t)
+{
+ return t;
+}
+static long bad_ret_signcast(ulong_nc_t t)
+{
+ return t;
+}
+static short bad_ret_smallercast(ulong_nc_t t)
+{
+ return t;
+}
+
+static void assign_val(ulong_nc_t t)
+{
+ ulong_nc_t good_c = t;
+ unsigned long good_ul = t;
+ unsigned long long bad_ull = t;
+ long bad_l = t;
+ short bad_i = t;
+}
+
+static void assign_via_ptr(ulong_nc_t *t)
+{
+ ulong_nc_t good_c = *t;
+ unsigned long good_ul = *t;
+ unsigned long long bad_ull = *t;
+ long bad_l = *t;
+ short bad_i = *t;
+}
+
+static void assign_ptr(ulong_nc_t *t)
+{
+ ulong_nc_t *good_same_type = t;
+ unsigned long *bad_mod = t;
+ unsigned long long __nocast *bad_size = t;
+ short __nocast *bad_i = t;
+ long __nocast *bad_l = t;
+}
+
+/* implicit cast to nocast */
+static void implicit_assign_to(void)
+{
+ ulong_nc_t t;
+ unsigned long ul = 1;
+ unsigned short us = 1;
+ unsigned long long ull = 1;
+ long l = 1;
+
+ t = ul; /* implicit to nocast from same type: OK? */
+ t = us;
+ t = ull;
+ t = l;
+}
+
+static void bad_implicit_arg_to(void)
+{
+ unsigned long ul = 1;
+ unsigned short us = 1;
+ unsigned long long ull = 1;
+ long l = 1;
+
+ use_val(ul); /* implicit to nocast from same type: OK? */
+ use_val(us);
+ use_val(ull);
+ use_val(l);
+}
+
+/* implicit cast from nocast */
+static unsigned long good_implicit_ret_ul(ulong_nc_t t)
+{
+ return t; /* implicit to nocast from same type: OK? */
+}
+
+static unsigned short bad_implicit_ret_us(ulong_nc_t t)
+{
+ return t;
+}
+
+static unsigned long long bad_implicit_ret_ull(ulong_nc_t t)
+{
+ return t;
+}
+
+static long bad_implicit_ret_l(ulong_nc_t t)
+{
+ return t;
+}
+
+/* FIXME: explicit cast: should we complain? */
+static ulong_nc_t good_samecast(ulong_nc_t v)
+{
+ return (ulong_nc_t) v;
+}
+
+static ulong_nc_t bad_tocast(unsigned long v)
+{
+ return (ulong_nc_t) v;
+}
+
+static unsigned long bad_fromcast(ulong_nc_t v)
+{
+ return (unsigned long) v;
+}
+
+/*
+ * check-name: nocast.c
+ *
+ * check-error-start
+nocast.c:34:33: warning: incorrect type in initializer (different base types)
+nocast.c:34:33: expected unsigned long [nocast] [usertype] *static [toplevel] bad_ptr_to
+nocast.c:34:33: got unsigned long
+nocast.c:34:33: warning: implicit cast to nocast type
+nocast.c:35:39: warning: incorrect type in initializer (different modifiers)
+nocast.c:35:39: expected unsigned long *static [toplevel] bad_ptr_from
+nocast.c:35:39: got unsigned long static [nocast] [toplevel] *<noident>
+nocast.c:35:39: warning: implicit cast from nocast type
+nocast.c:50:16: warning: implicit cast from nocast type
+nocast.c:54:16: warning: implicit cast from nocast type
+nocast.c:58:16: warning: implicit cast from nocast type
+nocast.c:65:38: warning: implicit cast from nocast type
+nocast.c:66:22: warning: implicit cast from nocast type
+nocast.c:67:23: warning: implicit cast from nocast type
+nocast.c:74:38: warning: implicit cast from nocast type
+nocast.c:75:22: warning: implicit cast from nocast type
+nocast.c:76:23: warning: implicit cast from nocast type
+nocast.c:82:34: warning: incorrect type in initializer (different modifiers)
+nocast.c:82:34: expected unsigned long *bad_mod
+nocast.c:82:34: got unsigned long [nocast] [usertype] *t
+nocast.c:82:34: warning: implicit cast from nocast type
+nocast.c:83:49: warning: incorrect type in initializer (different type sizes)
+nocast.c:83:49: expected unsigned long long [nocast] *bad_size
+nocast.c:83:49: got unsigned long [nocast] [usertype] *t
+nocast.c:83:49: warning: implicit cast to/from nocast type
+nocast.c:84:33: warning: incorrect type in initializer (different type sizes)
+nocast.c:84:33: expected short [nocast] *bad_i
+nocast.c:84:33: got unsigned long [nocast] [usertype] *t
+nocast.c:84:33: warning: implicit cast to/from nocast type
+nocast.c:85:32: warning: implicit cast to/from nocast type
+nocast.c:98:13: warning: implicit cast to nocast type
+nocast.c:99:13: warning: implicit cast to nocast type
+nocast.c:100:13: warning: implicit cast to nocast type
+nocast.c:111:17: warning: implicit cast to nocast type
+nocast.c:112:17: warning: implicit cast to nocast type
+nocast.c:113:17: warning: implicit cast to nocast type
+nocast.c:124:16: warning: implicit cast from nocast type
+nocast.c:129:16: warning: implicit cast from nocast type
+nocast.c:134:16: warning: implicit cast from nocast type
+ * check-error-end
+ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/validation/prototype.c new/sparse-0.5+git.20160223/validation/prototype.c
--- old/sparse-0.5+git.20150208/validation/prototype.c 1970-01-01 01:00:00.000000000 +0100
+++ new/sparse-0.5+git.20160223/validation/prototype.c 2016-08-04 15:37:02.000000000 +0200
@@ -0,0 +1,6 @@
+static int prototype(void);
+
+/*
+ * check-name: Compile skip function prototype
+ * check-command: ./sparsec -c $file -o tmp.o
+ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sparse-0.5+git.20150208/validation/pure-function.c new/sparse-0.5+git.20160223/validation/pure-function.c
--- old/sparse-0.5+git.20150208/validation/pure-function.c 1970-01-01 01:00:00.000000000 +0100
+++ new/sparse-0.5+git.20160223/validation/pure-function.c 2016-08-04 15:37:02.000000000 +0200
@@ -0,0 +1,16 @@
+
+static __attribute__((__pure__)) int pure1(void)
+{
+ int i = 0;
+ return i;
+}
+
+static __attribute__((__pure__)) void *pure2(void)
+{
+ void *i = (void *)0;
+ return i;
+}
+
+/*
+ * check-name: Pure function attribute
+ */