java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?...

当我在this question中提出时,gcc正在移除(是的,使用 -O0 )一行代码 _mm_div_ss(s1, s2); ,大概是因为结果未保存 . 但是,这应该触发浮点异常并引发SIGFPE,如果删除调用则不会发生这种情况 .

Question :是否有一个标志或多个标志传递给gcc,以便代码按原样编译?我正在考虑像 fno-remove-unused 这样的东西,但是我支持使用gcc属性/ pragma代替吗?

我尝试过的事情:

$ gcc --help=optimizers | grep -i remove

没有结果 .

$ gcc --help=optimizers | grep -i unused

没有结果 .

并明确禁用所有死代码/消除标志 - 请注意,没有关于未使用代码的警告:

$ gcc -O0 -msse2 -Wall -Wextra -pedantic -Winline \

-fno-dce -fno-dse -fno-tree-dce \

-fno-tree-dse -fno-tree-fre -fno-compare-elim -fno-gcse \

-fno-gcse-after-reload -fno-gcse-las -fno-rerun-cse-after-loop \

-fno-tree-builtin-call-dce -fno-tree-cselim a.c

a.c: In function ‘main’:

a.c:25:5: warning: ISO C90 forbids mixed declarations and code [-Wpedantic]

__m128 s1, s2;

^

$

来源计划

#include

#include

#include

#include

static void sigaction_sfpe(int signal, siginfo_t *si, void *arg)

{

printf("%d,%d,%d\n", signal, si!=NULL?1:0, arg!=NULL?1:0);

printf("inside SIGFPE handler\nexit now.\n");

exit(1);

}

int main()

{

struct sigaction sa;

memset(&sa, 0, sizeof(sa));

sigemptyset(&sa.sa_mask);

sa.sa_sigaction = sigaction_sfpe;

sa.sa_flags = SA_SIGINFO;

sigaction(SIGFPE, &sa, NULL);

_mm_setcsr(0x00001D80);

__m128 s1, s2;

s1 = _mm_set_ps(1.0, 1.0, 1.0, 1.0);

s2 = _mm_set_ps(0.0, 0.0, 0.0, 0.0);

_mm_div_ss(s1, s2);

printf("done (no error).\n");

return 0;

}

编译上面的程序给出了

$ ./a.out

done (no error).

换线

_mm_div_ss(s1, s2);

s2 = _mm_div_ss(s1, s2); // add "s2 = "

产生预期的结果:

$ ./a.out

inside SIGFPE handler

编辑更多细节 .

这似乎与 _mm_div_ss definition上的 __always_inline__ 属性有关 .

$ cat t.c

int

div(int b)

{

return 1/b;

}

int main()

{

div(0);

return 0;

}

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

$

(没有警告或错误)

$ ./t.out

Floating point exception

$

vs下面(功能属性除外)

$ cat t.c

__inline int __attribute__((__always_inline__))

div(int b)

{

return 1/b;

}

int main()

{

div(0);

return 0;

}

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

$

(没有警告或错误)

$ ./t.out

$

添加函数属性 __warn_unused_result__ 至少会给出一条有用的消息:

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

t.c: In function ‘main’:

t.c:9:5: warning: ignoring return value of ‘div’, declared with attribute warn_unused_result [-Wunused-result]

div(0);

^

编辑:

关于gcc mailing list的一些讨论 . 最终,我认为一切都按预期工作 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java第二部分项目_Java_第二次作业:项目构思与实现

写在最前:我我我我我我靠,以后再也不再ddl截止前1小时调试程序了!之前在DDL前1小时修改程序,当我改完后,我想着,再把之前的测试样例跑一遍,如果都对就OK了。就在这时,问题出现了&…

java远程插件动态注册机制_Spring运行时动态注册bean的方法

在spring运行时,动态的添加bean,dapeng框架在解析xml的字段时,使用到了动态注册,注册了一个实现了FactoryBean类!定义一个没有被Spring管理的Controllerpublic class UserController implements InitializingBean{private UserSer…

java变量用来干嘛_Java

一、Maven的简介1、Maven是什么?Apache Maven是一个软件项目管理的综合工具。基于项目对象模型(POM)的概念,提供了帮助管理构建、文档、报告、依赖、发布等方法,Maven简化和标准化项目建设过程。处理编译,分配,文档&am…

mysql 视图 数据相加_MySQL

查看安装路径ps -ef|grep mysql1,配置linux虚拟机,修改IP????? vim /etc/sysconfig/network-scripts/ifcfg-eth02,配置完网卡之后,执行清空命令3,reboot查看生产环境上传文件MySQL5.5编译方式安装过程参考连接&am…

mllib协同过滤 java实现_协同过滤(ALS)算法介绍及Spark MLlib调用实例(Scala/Java/Python)...

协同过滤算法介绍:协同过滤常被用于推荐系统。这类技术目标在于填充“用户-商品”联系矩阵中的缺失项。Spark.ml目前支持基于模型的协同过滤,其中用户和商品以少量的潜在因子来描述,用以预测缺失项。Spark.ml使用交替最小二乘(ALS…

java编程启蒙_程序设计入门—Java语言

第一周:做点计算1.1 第一个程序如何下载、安装Eclipse和JRE,并且简单介绍一下这个软件的几个主要部分;如何在Eclipse中编辑、编译和运行程序;详解第一个程序:程序框架、输出、出错怎么办;做点计算&#xff…

python中什么是关键字参数_Python中的关键字参数

关键字参数与函数调用有关。在函数调用中使用关键字参数时,调用者通过参数名称标识参数。由于Python解释器能够使用提供的关键字来将值与参数进行匹配,因此您可以跳过参数或将其乱序放置。您还可以通过以下方式对printme()函数进行关键字调用-示例#!/usr…

java 任意代码执行漏洞_php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)...

目录0x01 漏洞介绍0x02 漏洞影响0x03 漏洞复现0x01 漏洞介绍在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送%0a符号时,服务返回异常,疑似存在漏洞。在nginx上…

c enum能像java一样吗_不一样的Java Enum

Emum是在Java5中引入的新特性,从那开始,它被广泛的用在不同的Java应用中,相比于C和C的Enum,Java的Enum功能更加强大。但是很多开发人员暂时还没意识到它的强大之处,在Enum的一些细节问题上把握的还不到位。Enum的特性及…

java se 9.0.4_jre 9下载(Java SE Runtime Environment)下载

JRE9官方下载是运行JAVA程序不可缺少的环境。JRE中由ClassLoader负责查找和加载程序引用到的类库,基础类库ClassLoader会到rt.jar中自动加载,其它的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索,按照先来先到的原则&…

php+数组存放文件名_php将数组存储为文本文件的三种方法

本篇文章主要介绍php将数组存储为文本文件的三种方法&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。(1)利用serialize 将数组序列化存储为文本文件&#xff0c;调用时候再使用unserialize 还原<?php $file./cache/phone.php;$arrayarray(color> array…

php 屏蔽ctrl c,ctrl+c用不了怎么回事

解决办法&#xff1a;首先在运行里输入clipbrd打开剪贴板查看器看看里面是什么东西如果是剪贴板卡死了的话重启可解决问题如果不是复制个别的东西还是那个那么需要杀毒了&#xff01;(可能是灰鸽子病毒&#xff0c;冲击、震荡、狙击等都有可能导致不能复制粘贴剪切)方法一&…

php生日计算年龄,php根据生日计算年龄的方法

摘要&#xff1a;本文实例讲述了php根据生日计算年龄的方法。分享给大家供大家参考。具体如下&#xff1a;<?php function birthday($birthday){$age strtotime($birthday);if($age false){return false;本文实例讲述了php根据生日计算年龄的方法。分享给大家供大家参考。…

jq php异步上传图片,php+jquery Ajax异步上传图片(ajaxSubmit)实例_PHP教程

$photo_typesarray(image/jpg, image/jpeg,image/png,image/pjpeg,image/gif,image/bmp,image/x-png);//定义上传格式$max_size700000; //上传照片大小限制,默认700k$photo_folder"upload/".date("Y")."/".date("m")."/".da…

solaris php,针对 Solaris 的安装提示

用户评论:[#1]ariedederde [2011-06-18 00:58:25]Install php on solaris express:pkg search phppart of output is e.g.pkg:/web/php-525.2.12-0.151.0.1pkg install php-52php binary installs in /usr/php/5.2/bin/php[#2]julie at baumler dot com [2006-12-28 21:22:35]T…

php ajax复选框是否选中的值,jquery-ajax - php+ajax分页时,checkbox复选框选中的问题...

目的&#xff1a;所有的数据实现分页显示&#xff0c;不是查询所有的数据&#xff0c;而是每次取固定的条数。而且在每页选中的数据ID都可以保存&#xff0c;一起提交选中的数据&#xff0c;做相应的操作。比如第一页选中2条&#xff0c;第二页选中3条&#xff0c;提交时是5条&…

php 循环大数组 卡死,PHP 大数组循环问题_PHP教程

小妹刚刚改投PHP门下。领导叫我把这段代码的执行效率优化一下我现在知道的优化就是小循环外面&#xff0c;好像在这没啥用。请问各位大侠我该怎么优化ne ? 领导说放内存里什么的。基本就是2个大数组不停的循环算权重。_aItems $aItems;$this->_aMatchs array();$this->…

java在控制台打印余弦曲线,java打印正弦曲线示例

代码如下:/** 绘制0到360的正弦曲线* 分两种情形&#xff0c;y>0和y<0进行绘制* 每种情形中要考虑每行打印两个"*"字符* 并在打印第二个"*"字符后换行*/package hundred;import java.lang.Math;public class SinTest {public static void main(Strin…

matlab中逻辑符号,matlab 逻辑运算符号

逻辑运算符号: 关于符号逻辑的介绍&#xff0c;缺失&#xff1a;matlab运算3699/9符号逻辑又称数理逻辑、理论逻辑。 它是数学的一个分支&#xff0c;是用数学方法研究逻辑或形式逻辑的学科。其研究对象是对证明和计算这两个直观概念进行符号化以后的形式系统。数理逻辑是数学基…

matlab怎么计算行列式,Matlab 线性代数(一)–行列式与方程组求解 | 学步园

1.%用克莱姆法则求解方程组clearninput(方程个数)Ainput(系数矩阵A)binput(常数列向量b)if((size(A)~[n,n])|(size(b)~[n,1])) %判断矩阵A和向量b输入格式是否正确disp(输入不正确&#xff0c;要求A是n阶方阵&#xff0c;b是n维列向量) %disp:显示字符串elseif det(A)0 %判断系…