Using the builtin function __builtin_add_overflow_p in gcc

11,724

Solution 1

__builtin_add_overflow_p is supported by GCC 7 that has not been released yet

Solution 2

So I figured out how to use the built-in functions. Instead of using __builtin_add_overflow_p I used __builtin_add_overflow

#include <stdio.h>
#include <assert.h>

int main(void)
{
  int x1 = -1073741826;
  int y1 = -1073741826;
  int z1 = x1 + y1; 
  int temp;

  printf("%d\n", __builtin_add_overflow(x1, y1, &temp));
  if (__builtin_add_overflow(x1, y1, &temp)) {
    printf("overflow detected");
  }
  printf("%d\n", z1);

  return 0;
}
Share:
11,724
Eagle
Author by

Eagle

I'm a student at Stellenbosch University.

Updated on June 17, 2022

Comments

  • Eagle
    Eagle almost 2 years

    I was wondering on how to use this function, because I get an error when I do this:

    #define INT_ADD_OVERFLOW_P(a, b) \
    __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0);
    #include <stdio.h>
    #include <assert.h>
    __int main()
    {
        int x1 = -1073741826;
        int y1 = -1073741826;
        int z1 = x1+y1; 
        INT_ADD_OVERFLOW_P ( x1,  y1);
        printf("%d\n",z1);
        return 0;
    }
    

    Compile_OUTPUT:

    gcc -c -Wall -D DEBUG  tempFile.c
    gcc tempFile.o -o tempFile
    Makefile:8: recipe for target 'tempFile' failed//new error after update
    

    Compile_ERROR:

    tempFile.c: In function ‘main’:
    tempFile.c:10:1: warning: implicit declaration of function        ‘__builtin_add_overflow_p’ [-Wimplicit-function-declaration]
    tempFile.o: In function `main':
    tempFile.c:(.text+0x44): undefined reference to `__builtin_add_overflow_p'
    collect2: ld returned 1 exit status
    make: *** [tempFile] Error 1
    

    Here is a link to the functions I want to use:

    https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html

    Here is the makefile that i'm using:

    compiler=gcc
    CFLAGS=-c -Wall -D DEBUG 
    programname=tempFile
    
    all: $(programname)
    
    $(programname): $(programname).o
        $(compiler) $(programname).o -o $(programname)
    
    $(programname).o: $(programname).c
        $(compiler) $(CFLAGS) $(programname).c
    
    clean:
        rm *o $(programname)